Страницы

Поиск по вопросам

пятница, 31 января 2020 г.

Как присвоить переменной класса результат выражения?

#php


Вот так код работает:


Ответы

Ответ 1



Во-первых, вы используете устаревший синтаксис. Замечание: Метод объявления переменной через ключевое слово var, принятый в PHP 4, до сих пор поддерживается в целях совместимости (как синоним ключевого слова public). В версиях PHP 5 ниже 5.1.3 такое использование выводит предупреждение E_STRICT. Подробнее в документации Во-вторых, проблема в том, что вы пытаетесь присвоить переменной в качестве значения по умолчанию результат выполнения выражения. Это недопустимо. Таким образом можно присваивать только скалярные значения. Почему "$a" выражение? Потому что здесь происходит неявное преобразование переменной в строку. Ваш код следует преобразовать таким образом, чтобы выражение присваивалось переменной или в конструкторе, или в функции-сеттере. Например, так: class CL { public $a = 1; public $b; function __construct() { $this->b = "$this->a"; } } $c = new CL; echo $c->b; // Выведет: 1 Заметьте, что объявление переменной $a перенесено в класс. У вас нарушение области видимости в коде. Подробнее о конструкторах и деструкторах

Ответ 2



Класс - это, так сказать, отдельный организм. Он никак не связан с внешнем миром. Не зря он отделяется скобками { }, как бы ограничивая все, что внутри от того, что снаружи. В нем могут быть свои переменные с именем $a, даже если вне есть с аналогичным именем. Достать ту заветную переменную можно разве что в отдельном методе и с помощью global - это дает понять классу, что можно работать с этой глобальной переменной. Пример: $a = 1; class CL { public $b = 666; public function test() { global $a; return $a; } } $c = new CL(); echo $c->test(); В методе тест мы указываем на то, что хотим работать с переменной $a, которая вне класса. Но так (использовать global) уже никто не делает и это неприемлемо. В вашем случае, как следствие, переменная $a в своем внутреннем мире просто напросто не существует. Поэтому присвоение переменной $b значение несуществующей в классе переменной $a выдает ошибку. Если же эта переменная должна использоваться в классе, тогда её необходимо также поместить внутрь класса: class CL { public $a = 1; public $b; } И в нем оперировать этими переменными так, как вы захотите. Если же отвечать на вопрос: "Как вызвать $a, не выходя за пределы строки и не меняя структуру класса?", ответ - никак. p.s. один момент. можно объявить a константой и тогда все получится b; } } echo (new CL)->test(); ?> Только сами понимаете.. что константе уже нельзя будет ничего присвоить в дальнейшем. Поэтому на сколько это оправдано это ненужное извращение.....глупо.....но работает именно так, как вы хотите - без доп. изменений класса)

Комментариев нет:

Отправить комментарий