第七章-类的PHP魔术方法

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;

}






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值