实际上这个问题突然出现在我查看有关小部件的wordpress codex时,但我认为它更像是一个PHP问题。这里有3个问题:
为什么codex和本书使用两种看似不同的方法来构建小部件。 codex使用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(...)
}
并且
失败wordpressx中的致命错误:最大功能嵌套 达到'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:\项目
:
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) );
}
答案 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();
调用。毫无疑问,这是一个无限的递归循环,因为对象继承了这些方法。