Phương thức thay thế cho hàm _doing_it_wrong () riêng tư của WordPress là gì


7

Tôi đã nhận thấy các plugin sử dụng một mẫu singleton sẽ sử dụng _doing_it_wrong()chức năng của WordPress trong các clone()phương thức của họ , như vậy:

<?php
public function __clone() {
    _doing_it_wrong( __FUNCTION__, __( 'Cheatin&#8217; huh?', 'divlibrary' ), $this->version );
}
?>

Nhưng tôi cũng nhận thấy cảnh báo / thông báo này trên tài liệu chính thức của WordPress: nhập mô tả hình ảnh ở đây

Nó thực sự không quan trọng khi nào, nhà phát triển đang sử dụng nó như thế nào, WordPress đang ủng hộ rằng nó không nên được sử dụng, vì vậy tôi tự hỏi đâu là cách chính xác để làm điều này trong các plugin tùy chỉnh? Phương thức này được sử dụng để phản đối mã nhưng trong trường hợp này, nhà phát triển chỉ muốn gửi cảnh báo / cảnh báo ra.

Tham khảo: https://developer.wordpress.org/reference/fifts/_doing_it_wrong/


Điều tốt nhất là không viết mã công khai chỉ nhằm mục đích sử dụng nội bộ. Tuy nhiên, nếu bạn muốn xử lý một lỗi logic trong API công khai của mình LogicExceptionthì hãy đưa ra lỗi này do lỗi thiết kế mã thực thi sai. Nếu bạn không muốn sử dụng ngoại lệ, bạn vẫn có thể luôn sử dụng trigger_error () . Ngoài ra: Đừng sử dụng singletons!
David

@David Cảm ơn vì tiền trigger_error()boa. Đối với chỉ thị "Đừng sử dụng singletons", có một thời gian và địa điểm để sử dụng chúng, vì vậy để tuyên bố rằng một điều răn cũng ngây thơ như lý do hầu hết mọi người sử dụng chúng.
Xtremefaith

Singletons vi phạm SRP.
David

Câu trả lời:


2

Phương thức thay thế cho hàm _doing_it_wrong () riêng tư của WordPress là gì?

Không có cách nào mà WordPress sẽ loại bỏ _doing_it_wrong()chức năng này, vì vậy nó hoàn toàn an toàn khi sử dụng nó. Nhưng nếu vì lý do nào đó bạn không muốn sử dụng nó vì nó được đánh dấu là riêng tư, thì bạn có thể tạo một plugin có chức năng gọi doing_it_wrong()là sao chép và dán từ đó _doing_it_wrong().

Một cách khác là không sao chép mã và thay vào đó sử dụng một lớp xử lý mã không dùng nữa. Đây là một số mã mẫu về cơ bản làm điều tương tự _doing_it_wrong().

class deprecated {
  protected $method;
  protected $message;
  protected $version;

  public function method( $method ) {
    $this->method = $method;
    return $this;
  }

  public function message( $message ) {
    $this->message = $message;
    return $this;
  }

  public function version( $version ) {
    $this->version = sprintf( 
      __( 'This message was added in version %1$s.' ), 
      $version
    );
    return $this;
  }

  public function trigger_error() {
    do_action( 'doing_it_wrong_run', $this->method, $this->message, $this->version );
    if ( WP_DEBUG && apply_filters( 'doing_it_wrong_trigger_error', true ) ) {
      trigger_error( sprintf( 
        __( '%1$s was called <strong>incorrectly</strong>. %2$s %3$s' ),
        isset( $this->method ) ? $this->method : '', 
        isset( $this->message ) ? $this->message : '', 
        isset( $this->version ) ? $this->version : ''
      ) );
    }
  }
}

Sử dụng

class wpse_238672 {
  public function some_deprecated_method() {
    ( new deprecated() )
      ->method( __METHOD__ )
      ->message( __( 
        'Deprecated Method: Use non_deprecated_method() instead.', 'wpse-238672'
       ) )
      ->version( '2.3.4' )
      ->trigger_error();

    $this->non_deprecated_method();
  }

  public function non_deprecated_method() {
  }
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.