为了保持代码的整洁,我试图用一个函数替换构造函数中的一整堆代码。我相信我正确地调用了函数,但我无法按预期为变量赋值。
public function __construct($docID) {
self::getDocumentInfo($docID);
self::getTranscriptionInfo($docID);
}
private static function getTranscriptionInfo($docID) {
$this->documentTranscription = 5;
}
我收到一个错误"PHP致命错误:在…中不在对象上下文中使用$this"。这是为了发布目的而简化的,但如果有一个非常大的构造函数并跳过所有函数会更好吗?还是它们是分配价值的更好方式?
静态方法不是类实例的一部分。static关键字意味着可以在类中调用该方法,但它没有任何实例变量。
删除static
关键字并更改为:
self::getDocumentInfo($docID);
self::getTranscriptionInfo($docID);
到此:
$this->getDocumentInfo($docID);
$this->getTranscriptionInfo($docID);
使用$this
意味着它将在正确的实例上下文中调用它。
静态关键字的一些信息(用斜体字强调):
将类属性或方法声明为静态使它们可以访问,而无需类的实例化。声明为静态的属性不能用实例化的类对象访问(尽管静态方法可以)。
由于静态方法在没有创建对象实例的情况下是可调用的,因此伪变量$this在声明为static的方法中不可用。
来源
http://php.net/manual/en/language.oop5.static.php