我们一起学php(面向对象七)



2017-02-03 15:46:14

面向对象七


今天主要讲,魔术方法


昨天,我们讲的__construct(); __destruct();函数就是魔术方法的一部分!


今天在将一些其他的魔术方法!


大部分魔术方法都是以‘__’打头的,常用的模仿方法有 


__clone();    当程序中用到clone的时候,会自动调用类中__clone()魔术方法;


__sleep();    serialize() 函数会检查类中是否存在一个魔术方法 __sleep()。如果存在,该方法会先被调用,然后才执行序列化操作。


所有php里面的值都可以使用函数serialize()来返回一个包含字节流的字符串来表示。unserialize()函数能够重新把字符串变回php原来的值。 序列化一个对象将会保存对象的所有变量,但是不会保存对象的方法,

只会保存类的名字。


__wakeup();    unserialize() 会检查是否存在一个 __wakeup() 方法。如果存在,则会先调用 __wakeup 方法,预先准备对象需要的资源。__wakeup() 经常用在反序列化操作中,例如重新建立数据库连接,或执行其它初始化操作。


__call();     在对象中调用一个不可访问方法时,__call() 会被调用。在静态上下文中调用一个不可访问方法时,__callStatic() 会被调用。



<?php 

header("content-type:text/html;charset=utf-8");

class a{

public function b(){

echo 'bb';

}

public function __call($name,$arguments){

echo '您访问的函数名不存在<br>';

echo "{$name}<br>";

echo '函数的参数为<br>';

print_r($arguments);

}

}

$x = new a();

$x->aa(5);




public function __call($name$arguments)   必须有2个参数!!     $name 参数是要调用的方法名称。$arguments 参数是一个枚举数组,包含着要传递给方法 $name 的参数。


_____________________________________________________________________________________________________


__get();              读取不可访问属性的值时,__get() 会被调用。


__set();       在给不可访问属性赋值时,__set() 会被调用。


__isset();    当对不可访问属性调用 isset() 或 empty() 时,__isset() 会被调用。


__unset();     当对不可访问属性调用 unset() 时,__unset() 会被调用。












上一篇 我们一起学php(面向对象六)

下一篇 我们一起学php(面向对象八)


相关文章


我们一起学php(面向对象六)     2017-02-03 11:26:29

我们一起学php(面向对象五)     2017-02-02 17:37:58

我们一起学php(面向对象四)     2017-02-02 17:36:10

我们一起学php(面向对象三)     2017-02-01 14:13:40

我们一起学php(面向对象一、二)     2017-02-01 12:20:57

我们一起学php(session)     2017-01-30 20:15:20

我么一起学php(cookie)     2017-01-29 14:56:44

我么一起学php(函数二)     2017-01-29 14:53:46

新年寄语     2017-01-28 10:57:45

我们一起学php(函数)     2017-01-21 21:44:58

回到顶部