1.构造方法,创建实例化对象的时候自动调用
function __construct ($name="",$age=0,$sex="男"){
$this -> name = $name;
$this -> age = $age;
$this -> sex = $sex;
}
2.析构方法,销毁实例化对象的引用之前自动调用
function __desturct(){
}
3. public function __get($propertyName){
return $this -> $propertyName;
}
自动调用,是在直接访问私有成员时,自动调用!有一个参数
4. public function __set($propertyName, $value){
$this -> $propertyName = $value;
}
自动调用,是在直接设置私有属性的时候,两个参数
5.__isset() isset(), 在使用isset()判断一个私有属性是否存在时,自动调用__iseet()这个魔术方法,参数则是属性名称
function __isset($propertyName){
if($propertyName == "age"){
return false;
}
echo "$propertyName ######<br>";
return isset($this->$propertyName);
}
6.__unset() unset(),在使用unset()删除一个私有属性时,自动调用__unset()这个魔术方法,参数则是属性名称
function __unset($propertyName){
if($propertyName !== "age"){
unset($this->$propertyName);
}
}
7.__toString(),相当于object-c中的description方法,__toString()是在直接使用echo print printf语句来输出一个对象引用时,自动调用这个方法
将对象的基本信息放在__toString方法内部,形成字符串返回
在__toString()方法中,不能携带参数,而且必须返回一个字符串
class Person(){
<span style="white-space:pre"> </span>public $name;
<span style="white-space:pre"> </span>public $age;
<span style="white-space:pre"> </span>public $sex;
<span style="white-space:pre"> </span>function __construct($name,$age,$sex){
<span style="white-space:pre"> </span>$this->name = $name;
<span style="white-space:pre"> </span>$this->age = $age;
<span style="white-space:pre"> </span>$this->sex = $sex;
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>function say(){
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>function __toString(){
<span style="white-space:pre"> </span>return "aaaaaaaa";
<span style="white-space:pre"> </span>}
}
$p = new Person("张三",10,"男");
echo $p; //输入aaaaaaaa
8.__clone()方法与clone关键字
使用clone这个关键字,复制一个对象
__clone()是在调用clone关键字的时候自动调用的方法
作用:和构造方法一样,是对新克隆出来的对象进行初始化
在这个方法中,$this代表的是副本,所以就可以给所有的副本的成员初始化了
function __clone(){
<span style="white-space:pre"> </span>//这个$this是代表克隆出来的新对象
<span style="white-space:pre"> </span>$this->name = "克隆的张三";
<span style="white-space:pre"> </span>$this->age = 0;
}
</pre><pre code_snippet_id="1767529" snippet_file_name="blog_20160717_13_81934" name="code" class="php">$p2 = clone $p;
</pre><p></p><p></p>9.__call()方法处理错误调用<p>就是在调用一个对象中不存在的方法时,自动调用的方法</p><p>有两个参数,必须写这两个参数,第一个参数,调用的不存在的方法的方法名,第二个参数是,调用这个不存在的方法的参数</p><p>作用:可以写提示,但这个不是主要的功能,主要的功能是,将方法的功能相似,但方法名还要不同的,就可以采用__call()来完成一定的功能</p><p></p><pre code_snippet_id="1767529" snippet_file_name="blog_20160717_15_7638935" name="code" class="php">function __call($method,$args){
<span style="white-space:pre"> </span>echo "对不起,你调用用的方法{$method}(),参数为:";
<span style="white-space:pre"> </span>print_r($args);
<span style="white-space:pre"> </span>echo "不存在";
}
10. __set_state()方法,就是在使用var_export()这个方法的时候,导出一个类的信息时自动调用的方法。
调用var_export()时,这个静态方法会被调用 (自PHP5.1起有效)
本方法的唯一参数是一个数组,其中包含按array("property"=>value, ...)格式排列的类属性。
static public function __set_state($arr){
echo "自动调用了__set_state()方法";
$p = new Person("张三",20,"男");
return $p;
}