1. 程式人生 > >php __set() __get() 方法訪問屬性

php __set() __get() 方法訪問屬性

<?php
header("Content-type:text/html;charset=utf-8");
class Obj{
    function __set($name,$value){
        $setter = 'set'.ucfirst($name);
        if (method_exists($this, $setter)) {
            $this->$setter($value);
        }elseif (method_exists($this, 'get'.$name)){
            throw new Exception('write-only property:'.$name);
        }else {
            throw new Exception('unknown property:'.$name);
        }
    }
    function __get($name){
        $getter = 'get'.ucfirst($name);
        if (method_exists($this, $getter)) {
            return $this->$getter();
        }elseif (method_exists($this, 'set'.$name)){
            throw new Exception('read-only property:'.$name);
        }else{
            throw new Exception('unknown property:'.$name);
        }
    }
}
class person extends Obj{
    
    private $name;
    private $age;
    private $address;
 /**
     * @return the $name
     */
    public function getName()
    {
        return $this->name;
    }

 /**
     * @return the $age
     */
    public function getAge()
    {
        return $this->age;
    }

 /**
     * @return the $address
     */
    public function getAddress()
    {
        return $this->address;
    }

 /**
     * @param field_type $name
     */
    public function setName($name)
    {
        $this->name = $name;
    }

 /**
     * @param field_type $age
     */
    public function setAge($age)
    {
        $this->age = $age;
    }

 /**
     * @param field_type $address
     */
    public function setAddress($address)
    {
        $this->address = $address;
    }

    
}

$p = new person();
$p->name = '王寶強';
echo "value:",$p->name;

__set() __get()