首页/PHP/PHP中常用的几个魔术方法实例__set、__get()、__toString()、__call()

PHP中常用的几个魔术方法实例__set、__get()、__toString()、__call()

PHP5+版本中,为我们提供了很多魔术方法,大多以__开头,有的在开发过程中很方便,本篇技术教程将以实例的形式,来介绍__get()、__set()、__toString()、__call()这4个魔术方法。本教程在使用这4个魔术方法时,都是以原型形式进行使用,当前PHP版本5.3。

<?php
	class person{
		private $name;
		private $age;
		public function __construct($name='',$age=''){
			$this->name = $name;
			$this->age = $age;
		}
		public function __get($attr){
			echo "您调用了魔术方法__get,取到了私有属性{$attr}的值";  
			return $this->$attr;
		}

		public function __set($attr,$value){
			echo "您调用了魔术方法__set,设置了私有属性{$attr}的值";
			return $this->$attr = $value;  
		}

		public function __toString(){
			return "我必须返回的是一个字符串,否则报错";
		}
		public function __call($funName,$arrguments){
			echo "你所调用的方法:".$funName."(参数:";
			print_r($arrguments);
			echo ")不存在";
		}
	}
?>
我们来看输出结果。

<?php
$p1 = new person("mido",30);
$p1->name = 32;	//在正常情况下,无法直接访问类的私有属性,此时调用__set()方法
echo $p1->name;	//在正常情况下,无法直接访问类的私有属性,此时调用__get()方法
echo $p1;	//在打印对象体的时候,则自动调用__toString()方法
$p1->hhhh("a");	//在调用一个不存在的方法时,则自动调用__call()方法,而程序不中断
?>
相关阅读: 1、对__construct()不熟,看这里《PHP中构造方法及其继承关系的详细解释》 2、如果对private修饰符,及访问控制不熟,看这里《php中对象的继承关系与访问控制实例讲解
收藏:

相关资讯