[PHP] static、public、private、protected類別變數使用方法

10 月 4, 2019 | | 0 條留言

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();

轉貼自:static變數、public變數、private變數、protected變數的使用方法-PHP