PHP學習之外部呼叫類的私有屬性

2020-07-16 10:05:31
本篇文章主要講述的是外部呼叫類的私有屬性,具有一定的參考價值,感興趣的朋友可以了解一下,希望能夠幫到你。

外部呼叫類的私有屬性

先來了解一下PHP類中的__get__set函數
當試圖獲取一個不可達屬性時,類會自動呼叫__get函數。
當試圖設定一個不可達屬性時,類會自動呼叫__set函數。

首先,來看一下__get函數,先來獲取一個可達屬性試試:

<?php
    class A{
        public $a=1;
        private $b=2;
        function __get($name){
            echo 'you can get '.$name;
        }
    }
    $dy = new A();
    echo $dy->a;
?>

看一下它的返回:

1

沒有問題,沒有呼叫__get函數,現在我來存取一個私有的不可達屬性:

<?php
    class A{
        public $a=1;
        private $b=2;
        function __get($name){
            echo 'you can get '.$name;
        }
    }
    $dy = new A();
    echo $dy->b;
?>

會發現:

you can get b

說明這裡呼叫了__get函數,我再來看一下__set函數,同樣也是先使用可達的public屬性:

<?php
    class A{
        public $a;
        private $b;
        function __set($name,$val){
            echo 'you can get '.$name.$val;
        }
    }
    $dy = new A();
    $dy->a = 1;
    echo $dy->a;
?>

看一下輸出:

1

使用成功,沒有問題,接著我們來使用私有屬性:

<?php
    class A{
        public $a;
        private $b;
        function __set($name,$val){
            echo 'you can get '.$name.$val;
        }
    }
    $dy = new A();
    $dy->b = 1;
    echo $dy->b;
?>

這時看到:

you can get b1

PHP Fatal error:  Cannot access private property A::$b in /usercode/file.php on line 11

這裡呼叫了__set函數並提示我們不能使用類的私有屬性。
現在來通過__set函數實現外部使用私有屬性:

<?php
    class A{
        public $a;
        private $b;
        function __set($name,$val){
                $this->$name=$val;
        }
        function B(){
            echo $this->b;
        }
    }
    $dy = new A();
    $dy->b = 1;
    $dy->B();
?>

看一下輸出:

1

說明使用成功。

相關教學:PHP視訊教學

以上就是PHP學習之外部呼叫類的私有屬性的詳細內容,更多請關注TW511.COM其它相關文章!