[英]PHP: parent::somefunction or $this->somefunction
实际上,当我查看有关小部件的wordpress Codex时,这个问题突然出现了,但是我认为它更多是一个PHP问题。 实际上,这里有3个问题:
为什么手抄本和这本书使用2种看似不同的方法来构造窗口小部件。 抄本使用parent::WP_Widget
(静态方法?),而书使用$this->WP_Widget
(实例方法?)会有什么区别吗?
我还注意到,我使用的是PHP4构造函数WP_Widget
而不是__construct
。 是否只是出于兼容性原因? 我也可以使用$this->__construct
吗?
我试过了 ...
// in pp_widget class extends WP_Widget function __construct() { $this->WP_Widget(...); // or $this->__construct(...) }
它失败了
致命错误:达到最大功能嵌套级别'100',正在中止! 在第137行的D:\\ Projects \\ Websites \\ wordpress \\ wp-content \\ plugins \\ post-product \\ post-product.php中调用堆栈: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:\\ Projects \\ Websites \\ wordpress \\ wp-admin \\ widgets.php: 10 0.0013 331848 3. require_once('D:\\ Projects \\ Websites \\ wordpress \\ wp-load.php')D:\\ Projects \\ Websites \\ wordpress \\ wp-admin \\ admin.php:20 0.0020 332224 4. require_once('D :\\ Projects \\ Websites \\ wordpress \\ wp-config.php')D:\\ Projects
在Wordpress Codex中:
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) );
}
我还注意到,我使用的是PHP4构造函数
WP_Widget
而不是__construct
。 是否只是出于兼容性原因? 我也可以使用$ this-> __ construct吗?
您可以。 我倾向于使用__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();
调用$my_object = new MyClass();
。 这是一个无限递归循环,这并不奇怪,因为该对象继承了这些方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.