2017年4月10日 星期一

public vs protected vs private比較

        這是在php裡,最常看到三種宣告function的方式。

        下面用code做個簡單解說:

class Test
{
    public function public_function()
    {
        echo 'I am public function!';
    }

    protected function protected_function()
    {
        echo 'I am protected function!';
    }

    private function private_function()
    {
        echo 'I am private function!';
    }
}

$test = new Test();

$test->public_function();


       這三個宣告方式,如果要在class外面使用的話,只有public可以,因為public意思就是公眾化的,開放的,大家都可以任意取用的。

       而protected則是要透過parent class的用法,也就是extends就能調用了:

class Test
{
    public function public_function()
    {
        echo 'I am public function!';
    }

    protected function protected_function()
    {
        echo 'I am protected function!';
    }

    private function private_function()
    {
        echo 'I am private function!';
    }
}

class Test2 extends Test
{
    public function call_parents_function_protected()
    {
        $this->protected_function();
    }
}


$test = new Test();

$test->public_function();

$test2 = new Test2();

$test2->call_parents_function_protected();


        像這樣的方式,就能成功調用了!

        至於private在所處的class裡面才能調用:

class Test
{
    public function public_function()
    {
        echo 'I am public function!';
    }

    protected function protected_function()
    {
        echo 'I am protected function!';
    }

    private function private_function()
    {
        echo 'I am private function!';
    }

    public function call_in_same_class()
    {
        $this->private_function();
    }

}

$test = new Test();

$test->call_in_same_class();

        這樣就行了!

        總結來說,public大家都能取用,protected則是父類別才能使用,private則是只能在宣告function的class裡面使用。



        參考資料:

http://stackoverflow.com/questions/4361553/what-is-the-difference-between-public-private-and-protected