2016-01-07 3 views
1

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

public function __construct($docID) { 

    self::getDocumentInfo($docID); 
    self::getTranscriptionInfo($docID); 

} 

private static function getTranscriptionInfo($docID) { 
    $this->documentTranscription = 5; 
} 

Im получение ошибки «PHP Неустранимая ошибка: использование $ this, когда не в контексте объекта в ...». Это упрощено для целей проводки, но лучше ли иметь очень большой конструктор и пропускать все функции вместе? Или их лучший способ присвоить ценности?

+0

вы должны изменить ваш файл '$ this' в' 'я :: – roullie

ответ

3

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

Удалите static ключевое слово и изменить:

self::getDocumentInfo($docID); 
self::getTranscriptionInfo($docID); 

к этому:

$this->getDocumentInfo($docID); 
$this->getTranscriptionInfo($docID); 

Использование $this означает, что она будет вызывать его в правильном контексте экземпляра.

Некоторая информация статическое ключевое слово (выделено курсивом):

Declaring class properties or methods as static makes them accessible without needing an instantiation of the class. A property declared as static cannot be accessed with an instantiated class object (though a static method can).

Because static methods are callable without an instance of the object created, the pseudo-variable $this is not available inside the method declared as static.

Source

http://php.net/manual/en/language.oop5.static.php

+0

Хорошо, что вполне понятно. Спасибо! – the1gofer

Смежные вопросы