php类中的魔术方法

1、__set()和__get()

在访问和修改php类中的私有成员时可以这两个方法,详细可看下面对代码:

class Account{
    private $usr = 1;
    private $pwd = 2;
    public function __set($name,$value){
        echo "Setting $name to $value \r\n";
        $this->$name = $value;
    }

    public function __get($name){
        if(!isset($this->$name)){
            echo "未设置";
            $this->$name="正在为你设置默认值";
        }
        return  $this->$name;
    }
}

$a = new Account();
echo $a->user;
$a->name = 5;
echo $a->name;
echo $a->big;

2、__call()和__callStatic()方法

当访问一个不可访问(未定义,不可见)的方法时,__call()会被调用,第一个参数是调用的方法,第二个是传入对参数数组。__callStatic对应于静态方法。

详细可以看下面的代码:

public function __call($name,$arguments){
		switch (count($arguments)) {
			case '2':
				echo $arguments[0]*$arguments[1],PHP_EOL;
				break;
			case '3':
				echo array_sum($arguments),PHP_EOL;		
				break;
			default:
				echo 'wrong arguments',PHP_EOL;
				break;
		}
	}

3、__toString方法

当使用echo输出一个对象时,会自动调用这个函数,如果类中没有定义这个函数,则使用echo输出对象时会报错。这个方法必须返回一个string。

class Account{
   public $usr = 1;
   private 4pwd = 2;
   public function __toString(){
      return "{$this->user},{$this->pwd}";
   }
}
$a = new Account();
echo $a,PHP_EOL;
print_r($a);

你可能感兴趣的:(PHP,魔术方法)