PHP访问私有静态变量与私有变量?

时间:2015-05-30 10:06:16

标签: php oop

这可能就像一个愚蠢的问题,但直到现在我才注意到以下内容。

<?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 ..但是我没理解它。只是为了语法?或者还有其他原因吗?

1 个答案:

答案 0 :(得分:1)

静态变量是类属性,而不是对象属性。因此,对于具有相同值的所有对象,它们是共享的,并且它们在没有对象的情况下可用。因此,访问这些属性的正确方法是从类内部通过self :: $ yetAnother(或static :: $ yetAnother)或Something :: $ yetAnother来自外部,如果是公共的。 “$这 - &gt;” 中是对象的引用,但属性$ yetAnother不是对象属性而是静态类属性,所以你可以通过这种方式访问​​属性(这里的php不是很严格)但正确的方法是self ::,static ::或班级名称::。

由于变量需要$ as作为前缀,这就是为什么你不能通过$ this :: yetAnother或self :: yetAnother来访问它,因为这将是const的名称。这就是为什么$ this :: yetAnother给你一个错误,因为那个名字没有const。