Присвоение результата функции переменной в классе PHP?ООП Странность - PullRequest
3 голосов
/ 25 августа 2010

Я знаю, что вы можете присвоить возвращаемое значение функции переменной и использовать его, например, так:

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

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

Я хочу, чтобы оно было согласованным, поэтому я, как и любой другой разработчик, использующий этот проект, должен помнить это одно значениедолжен быть вызов функции, а не вызов var.

Но не беспокойтесь о моем проекте, я в основном просто задаюсь вопросом, почему несоответствие в интерпретаторе PHP?

Очевидно,примеры составлены для упрощения вещей.Пожалуйста, не задавайтесь вопросом «почему», я должен поместить указанную функцию в класс.Мне не нужен урок по правильному ООП, и это всего лишь доказательство концепции.Спасибо!

Ответы [ 3 ]

7 голосов
/ 25 августа 2010
public $nextBigThing = $this->nextBigThing();   

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

Сделайте это:

class standardModel {

    public $nextBigThing = null;

    public function __construct() {
        $this->nextBigThing = $this->nextBigThing();
    }

    private function nextBigThing() {
        return "Higgs Boson";   
    }

}
6 голосов
/ 25 августа 2010

Нельзя назначать значения по умолчанию таким свойствам, если только это значение не имеет постоянного типа данных (например, 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";
    }
}
0 голосов
/ 28 марта 2014
class standardModel
{
// Public instead of private
public function nextBigThing()
{
    return "Higgs Boson";   
}
}

$standardModel = new standardModel(); // corection

echo $standardModel->nextBigThing(); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...