我有以下代码,在类中执行全局函数来填充wordpress的功能,问题是我可以获得变量公共类的唯一方法如下
class Core {
public $notice;
function __construct(){
$this->core_function();
}
function core_function(){
global $globalvar;
$globalvar = $this;
function notice_global(){
global $globalvar;
return $globalvar->notice;
}
}
function set_notice(){
$this->notice = array('Warning');
}
}
$GP = new Core();
$GP->set_notice();
var_dump(notice_global());
任何其他想法或建议,这段代码是否正确?
答案 0 :(得分:1)
正如你在评论中所说,你需要全局功能,因为wordpress钩子方法(对于插件,我想)。
这不是必需的:有一种方法可以将对象方法(不是整个对象)传递给wordpress。
您可以尝试这种方式:
class Core {
public $notice;
function get_notice()
{ return $this->notice; }
function set_notice()
{ $this->notice = array('Warning'); }
}
$GP = new Core();
$GP->set_notice();
add_action( 'save_post', array( $GP, 'get_notice' ) );
或 - 以更好的灵活性 - 以这种方式:
class Core {
public $notice;
function get_notice()
{ return $this->notice; }
function set_notice()
{ $this->notice = array('Warning'); }
function add_wp_action( $hook, $method )
{ add_action( $hook, array( $this, $method ) ); }
}
$GP = new Core();
$GP->set_notice();
$GP->add_wp_action( 'save_post', 'get_notice' );
通过这种方式,您可以直接在类中设置所有wp钩子,并使用对象方法直接调用它们,而不使用全局变量或函数技巧。
答案 1 :(得分:0)
我不确定我是否理解你,但notice_global可以移出该课程。
全球范围内的范围
答案 2 :(得分:0)
不需要这些功能。您已将$notice
定义为公共财产。您可以像这样访问它:$GP->notice
;
您可能还想阅读有关方法和属性可见性的documentation。