繁体   English   中英

PHP函数内部的另一个函数[class]

[英]PHP function inside another function [ class ]

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

还有其他想法或建议,此代码正确与否?

正如您在评论中所说,由于wordpress hook方法(我想是一个插件),您需要全局功能。

这不是必需的:有一种方法可以将对象方法(不是整个对象)传递给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挂钩,并直接使用对象方法调用它们,而无需使用全局变量或函数技巧。

我不确定我是否理解正确,但是notice_global可以移出该类。

全局变量在类之外

不需要这些功能。 您已将$notice定义为公共财产。 您可以这样访问它: $GP->notice ;

您可能还想阅读有关方法和属性可见性的文档

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM