PHP:使用範圍解析操作符
阿新 • • 發佈:2019-01-31
面向物件程式設計中會使用到一些它自己的操作符,如->,這個符號用來在物件中訪問它自己的成員。另外一個是範圍解析操作符:兩個冒號連在一起(::)。這個符號用於在類中(而不是物件中)訪問成員。使用方式如下:
ClassName::methodName();
ClassName::propertyName;
這種結構在兩個地方可能被用到:
1.在使用類的時候,父類和子類具有相同的屬性和方法時,利用它可以避免混淆。
2.在類外的時候,沒有建立物件的情況下使用該操作符訪問類的成員。
正如我們可以在一個類中使用$this來引用當前物件的例項,關鍵字self被用作當前類的一個引用。
class SomeClass { function __construct() { self::do(); } protected function do(){ echo "done!"; } }
在這段程式碼中,self::do()會觸發當前類的do()方法。
要引用父類的一個成員,可以使用關鍵字parent和範圍解析操作符來引用:
class SomeOtherClass extends SomeClass {
function __construct() {
parent::do();
}
}
在多數情況下,我們使用範圍解析操作符是為了訪問被重寫的方法。我們也可以用其訪問靜態和常數成員。
注:類常數和靜態屬性一樣,它可以被類(或其子類)的全部例項訪問。但是它的值不可改變。建立類常數是使用const關鍵字,後面緊跟著常數名(沒有美元符號)。常數不可通過物件訪問,比如$obj->PI或者$obj::PI都是不行的,但是我們可以在任何地方使用ClassName::CONSTANT_NAME。也可以在類中的方法使用self::CONSTANT_NAME。
示例程式:
<?php class Rectangle { protected static $_count = 0; protected $width; protected $height; function __construct($width, $height) { $this->width = $width; $this->height = $height; self::$_count++; echo "已成功建立".self::$_count."個Rectangle物件<br>"; } function __destruct() { echo "銷燬一個Rectangle物件<br>"; } function getArea() { echo "Rectangle面積是:".($this->width * $this->height."<br>"); } function getConunt() { return self::$_count; } } class Square extends Rectangle { function __construct($side) { $this->width = $side; $this->height = $side; parent::$_count++; echo "已成功建立".parent::$_count."個Rectangle(Square)物件<br>"; } } $rec = new Rectangle(10, 5); $rec->getArea(); $square = new Square(10); $square->getArea(); ?>
執行結果: