PHP的物件有4種定義變數的可用範圍
這些定義方法分別是 static 、 public 、 private 、 protected
而使用範圍由大到小剛好也是
static(靜態變數) > public(公有變數) > protected > private(私有變數)
static(靜態變數):使用時不需要特別建立物件,就可以直接使用;例如:$類別名稱::$static變數;
public(公有變數):必須建立物件後才可以使用,但是可以在類別以外的地方做使用;例如:$變數 = new 類別(); $變數->public變數;(不需加$字號)
protected:必須建立物件後才可以使用,不可以在類別以外的地方做使用,但是可以被繼承並在子類別使用,範例如下
private(私有變數):必須建立物件後才可以使用,只可以在這個類別內使用且不能被繼承
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 |
class Father{ //不需建立物件可以直接使用 static $static_value = "static"; //需要建立物件,但是在類別以外也可以用 public $public_value = "public"; //只有這個類別才能使用 private $private_value = "private"; //只有這個類別和子類別才能使用 protected $protected_value = "protected"; //private 變數只能在類別內的函數使用 function getprivate(){ return $this->private_value; } } // static 變數不需建立物件可以直接使用 echo Father::$static_value; //建立後可以直接呼叫 public 變數讓類別外的函數使用 $testFather = new Father(); echo $testFather->public_value; //使用protected變數的繼承特性之前,必須先建立子類別來繼承父類別 class son extends Father{ function __construct(){ //可直接從父類別取得變數 echo $this->protected_value."子類別"; } function testextend(){ return $this->protected_value."來自testextend"; } } //當子物件被建立時會直接從父類別取得變數,下面是兩種不同的做法 $testSon = new son(); echo $testSon->testextend(); //private 變數只能在類別內的函數使用,不能像 public 變數直接使用也無法被繼承 // echo $testFather->private_value; 這行會失敗 echo $testFather->getprivate(); |