博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PHP魔术变量和魔术方法
阅读量:6161 次
发布时间:2019-06-21

本文共 1832 字,大约阅读时间需要 6 分钟。

魔术变量

1.__FILE__

  当前运行文件的完整路径和文件名。如果用在被包含文件中,则返回被包含的文件名。

魔术方法

1.__sleep()和__weekup():执行serialize()前调用类里的__sleep()方法,并返回数组(去掉不必要的属性),

                                      执行unserialize()前调用__wakeup()方法,并返回序列化后需要增加的属性。
用法:下面例子显示了如何用__sleep和 __wakeup方法来串行化一个对象. Id属性是一个不打算保留在对象中的临时属性. __sleep方法保证在串行化的对象中不包含id属性. 当反串行化一个User对象,__wakeup方法建立id属性的新值. 这个例子被设计成自我保持. 在实际开发中,你可能发现包含资源(如图像或数据流)的对象需要这些方法。

 

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赋值echo "
";print_r($u);print_r($s);//直接没有idprint_r($u2);//echo "
";print_r(spl_);?>

 

输出:

user Object

(
[name] => Leo
[id] => 5538a94e581cc
)
O:4:"user":1:{s:4:"name";s:3:"Leo";}user Object
(
[name] => Leo
[id] => 5538a94e581fe
)

2.__clone():执行一个前拷贝,基本类型属性传值,对象类型属性传引用。故如果对象类型也要传值,则在类中增加__clone(){$this->balence = clone $this->balence; }.

count = $count; }}class P extends Balance{ public $balence; function __construct(Balance $balence){ $this->balence = $balence; } function __clone(){ $this->balence = clone $this->balence; } }$p = new P(new Balance(300));$p2 = clone $p;$p2->balence->count = 32;echo "
";var_dump($p,$p2);?>

输出:

object(P)#1 (2) {  ["balence"]=>  object(Balance)#2 (1) {    ["count"]=>    int(300)  }  ["count"]=>  int(0)}object(P)#3 (2) {  ["balence"]=>  object(Balance)#4 (1) {    ["count"]=>    int(32)  }  ["count"]=>  int(0)}

 3.__autoload();自动加载类,必须每次都include类文件。  自动加载不可用于 PHP 的 CLI 交互模式。

说明:该魔术方法试图使用尚未被定义的类时自动调用。通过调用此函数,脚本引擎在 PHP 出错失败前有了最后一个机会加载所需的类。

文件1:1.php

文件2:Animal.php (文件名必须和该类名一致)

 spl_autoload_register() 提供了一种更加灵活的方式来实现类的自动加载。因此,不再建议使用 __autoload() 函数,在以后的版本中它可能被弃用。

 匿名函数:

 

 

转载地址:http://chhfa.baihongyu.com/

你可能感兴趣的文章
Scroll Depth – 衡量页面滚动的 Google 分析插件
查看>>
Windows 8.1 应用再出发 - 视图状态的更新
查看>>
自己制作交叉编译工具链
查看>>
Qt Style Sheet实践(四):行文本编辑框QLineEdit及自动补全
查看>>
[物理学与PDEs]第3章习题1 只有一个非零分量的磁场
查看>>
onInterceptTouchEvent和onTouchEvent调用时序
查看>>
android防止内存溢出浅析
查看>>
4.3.3版本之引擎bug
查看>>
SQL Server表分区详解
查看>>
STM32启动过程--启动文件--分析
查看>>
垂死挣扎还是涅槃重生 -- Delphi XE5 公布会归来感想
查看>>
淘宝的几个架构图
查看>>
linux后台运行程序
查看>>
Python异步IO --- 轻松管理10k+并发连接
查看>>
Oracle中drop user和drop user cascade的区别
查看>>
登记申请汇总
查看>>
Android Jni调用浅述
查看>>
CodeCombat森林关卡Python代码
查看>>
(二)Spring Boot 起步入门(翻译自Spring Boot官方教程文档)1.5.9.RELEASE
查看>>
Shell基础之-正则表达式
查看>>