вызов частного массива из другого частного массива в php - PullRequest
1 голос
/ 25 апреля 2011

Я не понимаю, почему этот код не работает:

<?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

Ответы [ 3 ]

2 голосов
/ 25 апреля 2011

Нельзя объединять переменные в определении члена класса.Вы можете использовать только собственные типы и константы:

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;
}
1 голос
/ 25 апреля 2011

Из документации PHP :

Объявление [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;
    }
}
1 голос
/ 25 апреля 2011

Вы не можете ссылаться на $ this при объявлении свойств.

...