PHP:parent :: somefunction或$ this-> somefunction

时间:2010-09-13 03:43:13

标签: php wordpress

实际上这个问题突然出现在我查看有关小部件的wordpress codex时,但我认为它更像是一个PHP问题。这里有3个问题:

  1. 为什么codex和本书使用两种看似不同的方法来构建小部件。 codex使用parent::WP_Widget(静态方法?)和书籍使用$this->WP_Widget(实例方法?)会有什么不同吗?

  2. 我还注意到我使用的是PHP4构造函数WP_Widget而不是__construct。是出于兼容性原因?我可以使用$this->__construct太对了吗?

  3. 我试过......

    // in pp_widget class extends WP_Widget
    function __construct() {
        $this->WP_Widget(...); // or $this->__construct(...) 
    }
    
  4. 并且

    失败
      

    致命错误:最大功能嵌套   达到'100'的水平,堕胎!在   d:\项目\网站\ WordPress的\可湿性粉剂内容\插件\产品后\后product.php   在第137行调用堆栈:0.0002 331328   1. {main}()D:\ Projects \ Websites \ wordpress \ wp-admin \ widgets.php:0   0.0008 331592 2. require_once('D:\ Projects \ Websites \ wordpress \ wp-admin \ admin.php')   d:\项目\网站\ WordPress的\可湿性粉剂管理员\ widgets.php:10   0.0013 331848 3. require_once('D:\ Projects \ Websites \ wordpress \ wp-load.php')   d:\项目\网站\ WordPress的\可湿性粉剂管理员\ admin.php的:20   0.0020 332224 4. require_once('D:\ Projects \ Websites \ wordpress \ wp-config.php')   d:\项目

    wordpressx中的

    class FooWidget extends WP_Widget {
        /** constructor */
        function FooWidget() {
            parent::WP_Widget(false, $name = 'FooWidget');  
        }
    

    并从书专业wordpress

    class pp_widget extends WP_Widget {
        function pp_widget() {
            $this->wp_widget(...);
        }
    

    构造函数的基础wordpress代码

    function WP_Widget( $id_base = false, $name, $widget_options = array(), $control_options = array() ) {
        $this->__construct( $id_base, $name, $widget_options, $control_options );
    }
    ...
    function __construct( $id_base = false, $name, $widget_options = array(), $control_options = array() ) {
        $this->id_base = empty($id_base) ? preg_replace( '/(wp_)?widget_/', '', strtolower(get_class($this)) ) : strtolower($id_base);
        $this->name = $name;
        $this->option_name = 'widget_' . $this->id_base;
        $this->widget_options = wp_parse_args( $widget_options, array('classname' => $this->option_name) );
        $this->control_options = wp_parse_args( $control_options, array('id_base' => $this->id_base) );
    

    }

1 个答案:

答案 0 :(得分:1)

  

我还注意到我使用的是PHP4构造函数WP_Widget而不是__construct。是出于兼容性原因?我可以使用$ this-> __构造得对吗?

你可以。我倾向于使用__constructor,因为A)它不含糊不清B)如果重构类名,我不必更改名称。

i tried ...
// in pp_widget class extends WP_Widget
function __construct() {
    $this->WP_Widget(...); // or $this->__construct(...) 
}

在PHP中,保留函数名__construct是与该类同名的方法的别名。它通常由$my_object = new MyClass();调用。毫无疑问,这是一个无限的递归循环,因为对象继承了这些方法。

相关问题