Я знаю, что вы можете назначить возвращаемое значение функции переменной и использовать ее, например:
function standardModel() { return "Higgs Boson"; } $nextBigThing = standardModel(); echo $nextBigThing;
Так кто-то, пожалуйста, скажите мне, почему следующее не работает? Или это еще не реализовано? Я что-то упускаю?
class standardModel { private function nextBigThing() { return "Higgs Boson"; } public $nextBigThing = $this->nextBigThing(); } $standardModel = new standardModel; echo $standardModel->nextBigThing; // get var, not the function directly
Я знаю, что могу это сделать:
class standardModel { // Public instead of private public function nextBigThing() { return "Higgs Boson"; } } $standardModel = new standardModel; echo $standardModel->nextBigThing(); // Call to the function itself
Но в случае моего проекта вся информация, хранящаяся в классе, является предопределенными общедоступными vars, за исключением одного из них, который должен вычислять значение во время выполнения.
Я хочу, чтобы он был последовательным, поэтому я или любой другой разработчик, использующий этот проект, должен помнить, что одно значение должно быть вызовом функции, а не вызовом var.
Но не беспокойтесь о моем проекте, мне в основном просто интересно, почему непоследовательность в интерпретаторе PHP?
Очевидно, примеры сделаны для упрощения вещей. Пожалуйста, не задавайте вопросов «почему» мне нужно поставить указанную функцию в класс. Мне не нужен урок для надлежащего ООП, и это всего лишь доказательство концепции. Благодаря!
public $nextBigThing = $this->nextBigThing();
Вы можете инициализировать только члены класса с постоянными значениями . Т.е. на данный момент вы не можете использовать функции или какое-либо выражение. Кроме того, этот класс еще не загружен полностью, поэтому, даже если бы он был разрешен, вы, вероятно, не могли бы называть его собственные функции, пока он все еще строится.
Сделай это:
class standardModel { public $nextBigThing = null; public function __construct() { $this->nextBigThing = $this->nextBigThing(); } private function nextBigThing() { return "Higgs Boson"; } }
Вы не можете присваивать значения по умолчанию таким свойствам, если это значение не является постоянным типом данных (например, string, int … и т. Д.). Все, что по существу обрабатывает код (например, функция, даже значения $ _SESSION), не может быть присвоено значению по умолчанию для свойства. Однако вы можете назначить свойство независимо от того, какое значение вы хотите внутри конструктора.
class test { private $test_priv_prop; public function __construct(){ $this->test_priv_prop = $this->test_method(); } public function test_method(){ return "some value"; } }
class standardModel { // Public instead of private public function nextBigThing() { return "Higgs Boson"; } } $standardModel = new standardModel(); // corection echo $standardModel->nextBigThing();