搜尋

首頁  >  問答  >  主體

__set() 操作流程是怎樣的?

    class dome{
    private $age;
    public function __construct($age){

#       ($name,$value){

if($name =='age')

        {return false;}      



return $this->$name= $value;

    }  



 }

$obj =new dome(24);

echo $obj->age=25;和

     $obj->age=26;

     echo $obj->age;

問題很簡單我想透過在__set()方法中透過if語句被讓age被修改正常情況2個輸出結果都應該是預設值24 但

echo $obj->age=25的結果是25 age 被修改了? $obj->age=26;  echo $obj-> ;age; 這句沒有問題,他們意思有上面不同嗎?

葫芦娃平衡盘葫芦娃平衡盘2662 天前1280

全部回覆(2)我來回復

  • DayDayUp

    DayDayUp2017-08-12 16:38:41

    class demo{
        private $age;
        public function __construct($age){
                $this->age =$age;
        }
        public function __set($name,$value){
            if($name =='age'){
                return false;
            }       
            return $this->$name=$value;
        }   
    }
        $obj =new demo(24);
        echo $obj->age=25;
        $obj->age=26;
        echo $obj->age;

    你這個程式碼,第二個echo應該是不能執行的,你程式碼沒貼全吧,因為他會提示你不能存取私有屬性

    兩個輸出結果的差異是因為你echo的寫法,echo a = 3 這種寫法會執行賦值語句,但不管賦值成不成功,會把等號右邊的數輸出到屏幕上

    1、第一個echo $obj->age=25;執行了你的set方法,得到name是等於age的,執行return false ,所以沒有修改屬性age的值。 但你這種寫法,他會輸出你等號右邊的25在螢幕上;

    2、第二個就是正常一般的寫法,會執行這個賦值語句,然後判斷返回false,不修改age的值,然後輸出你的age屬性的值還是24


    回覆
    1
  • 葫芦娃平衡盘

    明白了 非常感謝

    葫芦娃平衡盘 · 2017-08-12 18:18:18
  • DayDayUp

    DayDayUp2017-08-12 16:00:34

    echo $obj->age=25  這種語句是錯誤的,你沒有更改類別裡面的值,你只是單純的輸出了一個25.

    1、你的set方法裡面應該是寫錯了吧,你看下你的else語句好像弄掉了

    2、你要讀取私有屬性,要再寫一個get方法


    回覆
    0
  • 取消回覆