这可能就像一个愚蠢的问题,但直到现在我才注意到以下内容。
<?php
class Something {
private $another;
private static $yetAnother;
public function printSomething($what_to_print){
$this->another = $what_to_print;
$this::$yetAnother = $what_to_print;
//print($this::$yetAnother);//prints good
//print($this->another); //prints good
//print($this->$another); //PHP Notice: Undefined variable:
//print($this::yetAnother); //PHP Fatal error: Undefined class constant
}
}
$x = new Something();
$x->printSomething("Hello World!");
?>
为什么我可以使用$
访问静态变量但是如果我不使用系统理解它,因为它是一个const ..但是我没理解它。只是为了语法?或者还有其他原因吗?
答案 0 :(得分:1)
静态变量是类属性,而不是对象属性。因此,对于具有相同值的所有对象,它们是共享的,并且它们在没有对象的情况下可用。因此,访问这些属性的正确方法是从类内部通过self :: $ yetAnother(或static :: $ yetAnother)或Something :: $ yetAnother来自外部,如果是公共的。 “$这 - &gt;” 中是对象的引用,但属性$ yetAnother不是对象属性而是静态类属性,所以你可以通过这种方式访问属性(这里的php不是很严格)但正确的方法是self ::,static ::或班级名称::。
由于变量需要$ as作为前缀,这就是为什么你不能通过$ this :: yetAnother或self :: yetAnother来访问它,因为这将是const的名称。这就是为什么$ this :: yetAnother给你一个错误,因为那个名字没有const。