分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 技术分享

PHP面向对象----- 魔术方法

发布时间:2023-09-06 01:27责任编辑:熊小新关键词:PHP面向对象

1、__sleep和__wakeup

serialize() 函数会检查类中是否存在一个魔术方法 __sleep()。如果存在,该方法会先被调用,然后才执行序列化操作。此功能可以用于清理对象,并返回一个包含对象中所有应被序列化的变量名称的数组。如果该方法未返回任何内容,则 NULL 被序列化,并产生一个 E_NOTICE 级别的错误。

与之相反,unserialize() 会检查是否存在一个 __wakeup() 方法。如果存在,则会先调用 __wakeup 方法,预先准备对象需要的资源。

user.php(转自)大眼的博客

<?phpclass user { ???public $name; ???public $id; ????????function __construct() { ???// 给id成员赋一个uniq id ???????$this->id = uniqid(); ???????} ????????????function __sleep() { ??????//此处不串行化id成员 ???????return(array(‘name‘)); ???????} ????????????function __wakeup() { ???????$this->id = uniqid(); ???????} ???} $u = new user(); $u->name = "Leo"; $s = serialize($u); //serialize串行化对象u,此处不串行化id属性,id值被抛弃 $u2 = unserialize($s); //unserialize反串行化,id值被重新赋值 ???//对象u和u2有不同的id赋值 print_r($s);echo ‘<br/>‘; print_r($u2); 

可以很清楚地看到,$s中不再含有id属性,$u2中又调用了__wakeup魔术方法,获得id属性。(目前对两个魔术方法了解不深,希望在接下来的学习中加深了解)。

2、__toString方法

__toString() 方法用于一个类被当成字符串时应怎样回应。例如 echo $obj; 应该显示些什么。此方法必须返回一个字符串,否则将发出一条 E_RECOVERABLE_ERROR 级别的致命错误。

<?phpclass TestClass{ ???public $foo; ???public function __construct($foo) ????{ ???????$this->foo = $foo; ???} ???public function __toString() { ???????return $this->foo; ???}}$class = new TestClass(‘Hello‘);echo $class;?>

如果不添加魔术方法,则会报致命错误。

3、__invoke()方法

当尝试以调用函数的方式调用一个对象时,__invoke() 方法会被自动调用。

<?phpclass CallableClass { ???function __invoke($x) { ???????var_dump($x); ???}}$obj = new CallableClass;$obj(5);var_dump(is_callable($obj));?>

4、 __get(),__set(),__isset() 和 __unset() 

PHP所提供的"重载"(overloading)是指动态地"创建"类属性和方法。我们是通过魔术方法(magic methods)来实现的。

当调用当前环境下未定义或不可见的类属性或方法时,重载方法会被调用。本节后面将使用"不可访问属性(inaccessible properties)"和"不可访问方法(inaccessible methods)"来称呼这些未定义或不可见的类属性或方法。

5、方法重载

public mixed __call ( string $name , array $arguments )

PHP面向对象----- 魔术方法

原文地址:http://www.cnblogs.com/liepan/p/7892855.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved