1. 程式人生 > >PHP中魔術方法__get和__set的用法

PHP中魔術方法__get和__set的用法

PHP中,魔術方法有很多種,本文章給大家記錄分享:__get\__set的用法跟理解

首先,我們得明白oop中的三個訪問修飾符:public、protected、private

分別的意思:

1、公共的,任何地方都可以訪問,包括本類,子類,外部

2、受保護的成員屬性或者方法,只能在本類或者子類中訪問

3、私有的,只能在本類中訪問

那麼__get,__set就跟這修飾符存在跟很大的關係

  • __get:當訪問一個不是公開成員屬性時被呼叫,一個不存在的屬性被呼叫也會執行
  • __set:當給一個不是公開成員屬性賦值時被呼叫,給一個不存在的屬性賦值也會執行

看案例程式碼:

<?php
    class Car
    {
        protected $price = 300000;
    }

    /*
    *魔術方法 __get
    *@param pre_name 屬性名稱
    */
    function __get($pre_name)
    {
            if(isset($this->$pre_name))
            {
                return $this->$pre_name;
            } else
            {
                echo '此屬性不存在';
            }
        
    }
    
    /*
    *當訪問一個受保護的屬性時 __get被呼叫
    *此時通過魔術方法讓外部也可以訪問到
    */  
    $lexus = new Car();
    echo $lexus->price;  //輸出300000

    /*
    *當訪問一個不存在的屬性時 __get也會被呼叫
    */ 
    echo $lexus->types;        //輸出:此屬性不存在
?>

這是一個車類,價格不是公開的,當某個人硬是要知道這輛雷克薩斯的價格時,可以用__get方法。

下面是__set

<?php
    class Car
    {
        protected $price = 300000;
    }

    /*
    *魔術方法 __set
    *@param pre_name 屬性名稱  val  屬性值
    */
    function __set($pre_name,$val)
    {
            if(isset($this->$pre_name))
            {
                $this->$pre_name = $val;
            } else
            {
                echo '此屬性不存在';
            }
        
    }
    
    /*
    *當設定一個不公開的屬性值時 __set被呼叫
    */  
    $lexus = new Car();
    $lexus->price = 3000000;

    /*
    *當設定一個不存在的屬性時 __set也會被呼叫
    */ 
    $lexus->types = 'XFS';        //輸出:此屬性不存在
?>