ООП не может использовать определение в переменной - PullRequest
1 голос
/ 19 декабря 2010

Почему вы не можете использовать defines при создании переменной в классе? Что я могу сделать, чтобы пройти это? (определение является префиксом таблицы (дБ))

Как это:

class foo {
    public $bar = FOO."bar";
}

Это дает мне следующую ошибку:

Ошибка разбора: синтаксическая ошибка, неожиданная '.', ожидая ',' или ';'

Ответы [ 4 ]

7 голосов
/ 19 декабря 2010

Вы можете объявить свойства только с константными выражениями.Здесь оператор конкатенации является недопустимым (отсюда ошибка синтаксического анализа), а не константой FOO.

public $bar = FOO."bar";

Одним из способов решения этой проблемы является его инициализация в конструкторе.Вы по-прежнему можете использовать константу и объединить ее со своей строкой.

class foo {
    public $bar;

    public function __construct() {
        $this->bar = FOO."bar";
    }
}
1 голос
/ 19 декабря 2010

Вы можете использовать конструктор для инициализации значения:

<?php
define("FOO", "test");

class foo {
    public $bar;

    function __construct()
    {
        $this->bar = FOO . "bar";
    }
}

var_dump(new foo());
0 голосов
/ 19 декабря 2010

Как упоминалось выше, вы не можете определять переменные класса, используя операторы, если значение должно быть динамическим, тогда назначение должно происходить в функции.

При использовании констант может быть полезно использовать константы класса вместо определения ваших констант в глобальной области видимости.Они определены с помощью ключевого слова const и доступны с помощью оператора self::.

class foo 
{
    const BAR = 'test';

    public $baz;

    public function __construct()
    {
        $this->baz = self::BAR . 'bat';
    }

}

Константы класса также могут быть доступны вне экземпляра статически: foo::BAR, поэтому вы можете использовать константы из классов в других контекстах, но они не будут автоматически включены в глобальную область видимости как константа, определенная с помощью define.

$some_var = foo::BAR;
echo $some_var;
// output: test
0 голосов
/ 19 декабря 2010

Это не значит, что вы не можете использовать defines.Вы не можете использовать операторы при инициализации переменных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...