微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

php中的常用魔术方法汇总

这篇文章详细的对PHP中的常用魔术方法进行了整理归纳,分享给大家供大家参考,具体内容如下

1、PHP把所有”__”开头的方法当做魔术方法,所以任何自定义方法都不能是”__”开头 PHP提供的重载,是指动态的创建属性方法。重载是通过魔术方法来实现的。这些魔术方法的参数不能饮用传递,__get(),__set(),__isset(),__unset(),实现类属性重载。 2、当访问类中不可访问的属性时,将调用__get()方法 3、当访问类中不可访问的属性时,根据不同的情况会调用__get(),其中当访问属性 时,使用函数isset()或empty()时,将调用__isset()方法使用unset()函数时,将调用__unset()方法。 4、这四个方法不能使用static关键词定义,在PHP5.3.0后,一个warning级别的警告将发生,当使用static方法定义这4个方法。 5、何谓不可访问的属性:(1)类中没有的属性,(2)私有变量在类外被访问。方法重载,通过__call()和__callstatic()来实 现,两者的区别是一个上下文环境是否是静态方法,后者在调用不可访问的静态方法时会被调用。__callstatic()是在PHP5.3.0中才被添 加。 6、__sleep()和__wakeup() serialize()序列化时,会先检查是否存在__sleep()函数,如果存在,则先调用__sleep(),返回一个包含所有变量名称的数组,如果该方法不返回任何内容,则null被序列化,并产生一个notice级别的错误。 __wakeup()方法和__sleep()相反,在调用unserialize()时被调用 7、__toString(),让一个类决定它如何转换成字符串,在PHP5.2.0之前,这个方法只能结合echo或print方法生效,PHP5.2.0之后,可以结合printf()修饰,但修饰的时候也不能用类似%d之类的非字符修饰符。 8、__invoke(),当尝试以调用函数的方式调用对象时,将出发这个函数,只在PHP5.3之后生效。 9、__set_state()静态方法,当调用var_export()的时候,才会调用这个静态方法,PHP5.1.0之后生效。唯一参数是接收一个数组。 10、__construct()和__destruct(),构造函数和析构函数,构造函数主要用于类的初始化,析构函数在某个对象的所有引用都 删除后或者对象被显示的销毁时运行。在析构函数中不允许抛出异常,否则会出发一个Fatal error,析构函数在脚本结束时调用,此时所有的http header都已经发出. 11、__clone(),对象复制,此方法不能直接被调用,必须通过clone关键字显示调用

代码

title = "hello"; //使用对象不存在的属性时,会调用对象的__get方法 echo $obj->title; //调用对象不存在的方法时,会调用对象的__call方法 $obj->test("hello",123,567); //调用不存在的类静态方法时,会调用类的__callStatic方法 Object::staticmethod("static","not found method"); //直接输出对象时,会调用对象的__toString方法 echo $obj; //将一个对象当作函数一样使用时,会调用对象的__invoke方法 echo $obj("test"); //克隆对象时,会调用对象的__clone方法 $obj2 = clone $obj; //判断对象属性是否存在时,会调用对象的__isset方法 var_dump(isset($obj->aaa)); //销毁对象属性时,会调用对象的__unset方法 unset($obj->aaa);

class Object{

protected $array = array();

function construct()
{
echo
METHOD__."你正在实例化对象
";
}

function __set($name,$value)
{
$this->array[$name]=$value;
}

function __get($name)
{
return $this->array[$name];
}

function __call($name,$arguments)
{
var_dump($name,$arguments);
return "magic function\n";
}

static function __callStatic($name,$arguments);
return "magic static function";
}

function toString()
{
return
CLASS__.'
';
}

function __invoke($arguments)
{
var_dump($arguments);
return METHOD.'
';
}

function clone()
{
echo
METHOD__."你正在克隆对象
";
}

function isset($name)
{
echo
METHOD__."你想判断有没有属性".$name."
";
return 1;
}

function unset($name)
{
echo
METHOD__."你想删除属性".$name."
";
}

function destruct()
{
echo
METHOD__."你正在注销对象
";
}

}

以上就是关于PHP中的常用魔术方法的全部内容,希望对大家的学习有所帮助。

原文地址:https://www.jb51.cc/php/20367.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐