Подтвердить что ты не робот

Объявление класса - переменная

При объявлении переменной класса PHP мы не можем выполнять никаких выражений, например:

class A
{
    $a = 10 + 5;
}

только мы можем просто предоставить константы, например:

class A
{
   $a = 100;
}

Кто-нибудь знает, почему это так?

4b9b3361

Ответ 1

Вы не можете использовать оператор или функцию, просто скалярное значение. Это связано с тем, что переменные класса инициируются во время компиляции (до выполнения). Конструктор классов должен использоваться для запуска свойства с помощью оператора/функции.

Ответ 2

Это потому, что выражение не разрешено в качестве значения по умолчанию для поля. Вместо инициализации переменных используйте конструкторы.

Я предлагаю вам сделать это.

class A
{
    public $a;

    function __construct()
    {
        return $this->a = 10 + 5;
    }
}

$a1 = new A;
echo $a1->a; //"prints" 15

Ответ 3

Вы можете выполнять выражения только в свойствах в constructor или other member functions класса.

Обратите внимание, что вы можете инициализировать значение для свойства вне конструктора и функции-члены тоже. Но это невозможно сделать. Лучшей практикой является инициализация и выполнение выражений в Конструктор и функции-члены класса.

Ответ 4

При объявлении переменной класса в PHP OOP они называются переменными-членами класса или свойствами класса. Причина, по которой мы не можем назначать значения или выполнять какое-либо выражение или вычисление, заключается в том, что вы объявляете структуру класса здесь, которая не совпадает с присвоением переменной в процедурном коде. Структура класса OOP PHP анализируется php Parser и Compiled, но при выполнении этой операции компилятор не выполняет процедурный код. Он может обрабатывать только постоянные значения.

Как вы уже сейчас, следующее не будет работать, и вы получите синтаксическую ошибку.

class A
{
   $a = 100;
}

Но вы можете добиться того же, используя константу в классе, подобную этой.

class A
{
    const a = 100;  
}

echo A::a;

Если вам нужно выполнять операции, вы делаете это, используя при необходимости методы или даже конструктор классов.

Ответ 5

Хорошо, если это имеет какое-то отношение к инициализации нового имени базы данных через "file.txt", который вы указываете по определенному пути, то, что я сделал для решения такой проблемы, это:

class A
{
    private static $a = "";
    private function __construct()
    {
       $a = //Code to get the value and initialize it.
    }
}