gpt4 book ai didi

PHP 命名空间 5.3 和 WordPress 小部件

转载 作者:行者123 更新时间:2023-12-03 00:36:45 26 4
gpt4 key购买 nike

我正在使用命名空间。

我尝试创建一个 WordPress 小部件 (http://codex.wordpress.org/Widgets_API)

使用命名空间,以下会给出错误,因为无法传递参数(如果没有命名空间,它显然会像平常一样工作)

 namespace a\b\c;
class whatever extends \WP_Widget {
function whatever() {
parent::WP_Widget('name1', 'name2');
}
// .. other functions left out
}
add_action('widgets_init',
create_function('', 'return register_widget("a\b\c\whatever");'));

嗯...使用命名空间的“parent::WP_Widget”的正确语法是什么?

(完整的错误消息是:

Warning: Missing argument 2 for WP_Widget::__construct(), called in 
C:\xampp\htdocs\wp2\wp-includes\widgets.php on line 324 and defined in
C:\xampp\htdocs\wp2\wp-includes\widgets.php on line 93

)

调试器显示没有传递任何内容:

Variables in local scope (#14)
$control_options = Undefined
$id_base = boolean false
$name = Undefined
$widget_options = Undefined

(仅需要 $name)

最佳答案

查看文档 located here似乎只需要名称,但 PHP 的工作方式还必须定义预变量。

您有两种创建类的方法:

  • 答:
    • WP_Widget __construct ([string $id_base = false], string $name, [array $widget_options = array()], [array $control_options = array()])
  • B:
    • WP_Widget WP_Widget ([ $id_base = false], $name, [ $widget_options = array()], [ $control_options = array()])

根据偏好,您应该始终使用 __construct 方法来初始化您的对象,我会像这样重写您的代码:

namespace a\b\c;

class whatever extends \WP_Widget
{
function __construct()
{
parent::__construct('name1', 'name2');
}

/*
* Other methods!
*/
}

WP_Widget::WP_Widget(..) 方法仅适用于 PHP4,不应在 PHP 5 或更高版本中使用。

现在看来您使用 PHP 5.3 作为您的使用 namespace ,因此您可以执行以下操作:

add_action('widgets_init', function() {
return register_widget(new a\b\c\whatever);
});

关于PHP 命名空间 5.3 和 WordPress 小部件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5247302/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com