PHP函数里面的另一个函数[类]

时间:2016-02-18 18:44:39

标签: php wordpress

我有以下代码,在类中执行全局函数来填充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());

任何其他想法或建议,这段代码是否正确?

3 个答案:

答案 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