【发布时间】:2010-09-13 03:43:13
【问题描述】:
实际上,当我查看有关小部件的 thw wordpress codex 时,这个问题突然出现了,但我认为它更像是一个 PHP 问题。实际上这里有 3 个问题:
为什么 codex 和 book 使用 2 种看似不同的方法来构建小部件。 codex 使用
parent::WP_Widget(静态方法?)和 book 使用$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'的水平,中止!在 D:\Projects\Websites\wordpress\wp-content\plugins\post-product\post-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:\Projects\Websites\wordpress\wp-admin\widgets.php:10 0.0013 331848 3.require_once('D:\Projects\Websites\wordpress\wp-load.php') D:\项目\网站\wordpress\wp-admin\admin.php:20 0.0020 332224 4.require_once('D:\Projects\Websites\wordpress\wp-config.php') D:\项目
在 wordpress 法典中:
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) );
}
【问题讨论】:
-
Wordpress 以其不一致的编码风格和糟糕的代码库而闻名。我不会试图理解为什么其中的代码是这样的。