1. 程式人生 > >PHP static關鍵字在類中的使用

PHP static關鍵字在類中的使用

PHP版本5.6.22
static 關鍵字在PHP中表示靜態的意思,在大多數程式語言中也是靜態的意思。
而在PHP類中使用static關鍵字可以宣告靜態的類屬性以及靜態的類方法。 通過使用類名+域作用符的方式可以呼叫靜態的屬性以及方法(可見性為public)
在靜態方法中呼叫靜態屬性需要使用self::$property的方式也可以使用className::$property的方式。ps:使用靜態方式呼叫屬性是,域操作符之後的$不可以少。
如下:
class Example {
public static $name = "static_property";


public static function getName(){
      echo  self::$name;
      echo  Example::$name;
}
}


echo Example::$name;
Example::getName();


討論:使用靜態的方式呼叫非靜態的方法和屬性是否可以?
1.不能使用靜態方式呼叫非靜態的屬性即className::$property的方式不能用來呼叫未宣告為靜態的屬性。
class Example {
            public $age = 18;
}
echo Example::$age;
錯誤 -- Fatal error: Access to undeclared static property: Example::$age   //fatal error 致命錯誤


2.在類的內部也不能使用靜態的方式呼叫非靜態的屬性。self::$property || className::$property
class Example {
public static $name = "static_property";
            public $age = 18;


public static function getName(){
      echo self::$age;
}
            
            public function getAge(){
                   echo  self::$age;
            }
}
Example::getName();
錯誤--Fatal error: Access to undeclared static property: Example::$age


3. 可以使用靜態的方式呼叫非靜態的方法(類中)。
前提是可見性為public ; 方法內部沒用$this,即沒有使用非靜態的屬性和方法。但是內部可以使用靜態的屬性和方法。


4.(在類中) 靜態方法中不能使用$this關鍵字,即不能通過$this來使用非靜態的屬性和方法,但可以使用self::methodName() || className::methodName()的方式來呼叫非靜態的方法(該方法需要滿足結論3,因為在類的內部,所以可見性可以忽略)。




5.靜態方法內部不能使用$this關鍵字的。 在非靜態方法的內部,可以使用$this->staticMethod的方式來呼叫靜態方法。

6.不能使用物件的例項來訪問靜態屬性,也不能在類的內部使用$this來呼叫靜態屬性。