Php为全局变量返回NULL

问题描述 投票:-1回答:1

所以我有以下代码:

public function pcieh_shortcodes_init() {
    $data = $this->data;
    var_dump($data); //Return an array which is Expected       

    function pcieh_shortcode($atts = [], $content = null) {
         global $data;
         var_dump($data); //Return NULL
     }

    add_shortcode('pcieh', 'pcieh_shortcode');
}

当我调用pcieh_shortcodes_int时,我希望pcieh_shortcode中的$ data与外部$ data具有相同的值,因为它是全局的,但它返回NULL。为什么这样,我该如何解决?

php oop global-variables
1个回答
0
投票

而不是这个

 public function pcieh_shortcodes_init() {
     $data = $this->data;
     var_dump($data); //Return an array which is Expected       

     function pcieh_shortcode($atts = [], $content = null) {
          global $data;
          var_dump($data); //Return NULL
      }

     add_shortcode('pcieh', 'pcieh_shortcode');
 }

为什么不呢

public function pcieh_shortcodes_init() {
    $data = $this->data;
    var_dump($data); //Return an array which is Expected       
    add_shortcode('pcieh', [$this,'pcieh_shortcode']);
}

public function pcieh_shortcode($atts = [], $content = null) {
    var_dump($this->data); //Return NULL
}

然后就不需要global或任何与之相关的丑陋。将类和方法作为数组传递是完全可以接受的。

基本上wordpress正在使用call_user_func来调用它。

http://php.net/manual/en/function.call-user-func.php

UPDATE

我应该注意到,在问题的原始代码中,即使你确实让它工作,你也没有引用这个类的实际实例,所以你在数据中设置的任何值(在分配短代码和全局之后) )无论如何都可能会丢失。换句话说,您将丢失当前对象的状态及其包含的任何数据。

因此,通过使用实际的实例$this,您可以确定您实际上正在处理您想要的实例。

© www.soinside.com 2019 - 2024. All rights reserved.