PHP的物件4種定義變數可用範圍
定義方法使用範圍由大到小
static
(靜態變數) > public
(公有變數) > protected
> private
(私有變數)
static
(靜態變數)
使用時不需要特別建立物件,就可以直接使用;
例如:類別名稱::$static變數;
public
(公有變數)
必須建立物件後才可以使用,但是可以在類別以外的地方做使用;
例如:$變數 = new 類別(); $變數->public變數;(不需加$字號)
protected
必須建立物件後才可以使用,不可以在類別以外的地方做使用,但是可以被繼承並在子類別使用,範例如下。
private
(私有變數)
必須建立物件後才可以使用,只可以在這個類別內使用且不能被繼承。
範例展示:
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();