【问题标题】:calling a private array from another private array in php从 php 中的另一个私有数组调用一个私有数组
【发布时间】:2011-08-12 01:33:17
【问题描述】:

我不明白为什么这段代码不起作用:

<?php
class Test {

    private $BIG = array(
        'a' => 'A',
        'b' => 'B',
        'c' => 'C'
    );

    private $arr2 = array(
        $this->BIG['a'],
        $this->BIG['b'],
        'something'
    );

    public function getArr2(){
        return $this->arr2;
    }


}

$t = new Test();
print_r($t->getArr2());

?>

我收到此错误:

解析错误:语法错误,意外 T_VARIABLE,期待 ')' 在 /home/web/te/test.php 在第 11 行

【问题讨论】:

    标签: php arrays private


    【解决方案1】:

    您不能在类成员定义中组合变量。您只能使用本机类型和常量:

    private $arr = array('a', 'b');
    private $obj = new stdClass(); // error
    private $obj = (object)array(); // error
    private $num = 4;
    private $a = 1;
    private $b = 2;
    private $c = $this->a + .... // error
    

    如果要合并或计算,请在__construct

    private $a = 1;
    private $b = 2;
    private $c;
    
    function __construct() {
      $this->c = $this->a + $this->b;
    }
    

    【讨论】:

      【解决方案2】:

      在声明属性时不能引用 $this。

      【讨论】:

        【解决方案3】:

        来自PHP Documentation

        [Property] 声明可能包含一个 初始化,但这 初始化必须是常量 价值——也就是说,它必须能够 在编译时评估,不能 依赖于运行时信息 为了被评估

        因此,在构造函数中执行类似的操作:

        class Test {
        
            private $BIG = array(
                'a' => 'A',
                'b' => 'B',
                'c' => 'C'
            );
        
            private $arr2;
        
            public function __construct()
            {
                $this->arr2 = array(
                    $this->BIG['a'],
                    $this->BIG['b'],
                    'something'
                );
            }
        
            public function getArr2(){
                return $this->arr2;
            }
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-07-04
          • 1970-01-01
          • 1970-01-01
          • 2019-04-18
          • 2018-11-22
          • 2020-10-13
          • 2017-04-12
          • 1970-01-01
          相关资源
          最近更新 更多