博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
php5魔术函数、魔术常量
阅读量:5941 次
发布时间:2019-06-19

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

2008-05-29 17:27 by Jaypei, 729 阅读, 1 评论, , 

php5魔术函数、魔术常量
魔术函数
1。__construct()
 
实例化对象时被调用,
 
当__construct和以类名为函数名的函数同时存在时,__construct将被调用,另一个不被调用。
 
2。__destruct()
 
当删除一个对象或对象操作终止时被调用。
 
3。__call()
 
对象调用某个方法,
 
若方法存在,则直接调用;
 
若不存在,则会去调用__call函数。
 
4。__get()
 
读取一个对象的属性时,
 
若属性存在,则直接返回属性值;
 
若不存在,则会调用__get函数。
 
5。__set()
 
设置一个对象的属性时,
 
若属性存在,则直接赋值;
 
若不存在,则会调用__set函数。
 
6。__toString()
 
打印一个对象的时被调用。如echo $obj;或print $obj;
 
7。__clone()
 
克隆对象时被调用。如:$t=new Test();$t1=clone $t;
 
8。__sleep()
 
serialize之前被调用。若对象比较大,想删减一点东东再序列化,可考虑一下此函数。
 
9。__wakeup()
 
unserialize时被调用,做些对象的初始化工作。
 
10。__isset()
 
检测一个对象的属性是否存在时被调用。如:isset($c->name)。
 
11。__unset()
 
unset一个对象的属性时被调用。如:unset($c->name)。
 
12。__set_state()
 
调用var_export时,被调用。用__set_state的返回值做为var_export的返回值。
 
13。__autoload()
 
实例化一个对象时,如果对应的类不存在,则该方法被调用。
 
魔术常量
1。__LINE__
 
返回文件中的当前行号。
2。__FILE__
 
返回文件的完整路径和文件名。如果用在包含文件中,则返回包含文件名。自 PHP 4.0.2 起,__FILE__ 总是包含一个绝对路径,而在此之前的版本有时会包含一个相对路径。
3。__FUNCTION__
 
返回函数名称(PHP 4.3.0 新加)。自 PHP 5 起本常量返回该函数被定义时的名字(区分大小写)。在 PHP 4 中该值总是小写字母的。
4。__CLASS__
 
返回类的名称(PHP 4.3.0 新加)。自 PHP 5 起本常量返回该类被定义时的名字(区分大小写)。在 PHP 4 中该值总是小写字母的。
5。__METHOD__
 
返回类的方法名(PHP 5.0.0 新加)。返回该方法被定义时的名字(区分大小写)。
 

(1)初识魔术方法
Php5.0发布以来为我们提供了很多面向对象的特性,尤其是为我们提供了好多易用的魔术方法,这些魔术方法可以让我们简化我们的编码,更好的设计我们的系统。今天我们就来认识下php5.0给我们提供的魔术方法。

3,__get() 当试图读取一个并不存在的属性的时候被调用。

如果试图读取一个对象并不存在的属性的时候,PHP就会给出错误信息。如果在类里添加__get方法,并且我们可以用这个函数实现类似java中反射的各种操作。

class
 Test 
 
public
 
function
 __get(
$key
 { 
  
echo
 
$key
 
.
 
"
 不存在
"
 } 
$t
 
=
 
new
 Test(); 
echo
 
$t
->
name; 
就会输出:
name 不存在
4,__set() 当试图向一个并不存在的属性写入值的时候被调用。
class
 Test 
 
public
 
function
 __set(
$key
,
$value
 { 
  
echo
 
'
'
.
$key
 
.
 
"
附值
"
.
$value
 } 
$t
 
=
 
new
 Test(); 
$t
->
name 
=
 
"
aninggo
"
就会输出:
对 name 附值 aninggo
5,__call() 当试图调用一个对象并不存在的方法时,调用该方法。
class
 Test 
 
public
 
function
 __call(
$Key
,
 
$Args
 { 
  
echo
 
"
您要调用的 {
$Key
} 方法不存在。你传入的参数是:
"
 
.
 
print_r
(
$Args
,
 
true
); 
 } 
$t
 
=
 
new
 Test(); 
$t
->
getName(aning
,
go);

程序将会输出:

您要调用的 getName 方法不存在。参数是:Array
(
[0] => aning
[1] => go
)

6,__toString() 当打印一个对象的时候被调用

这个方法类似于java的toString方法,当我们直接打印对象的时候回调用这个函数

class
 Test 
 
public
 
function
 __toString() 
 { 
  
return
 
"
打印 Test
"
 } 
$t
 
=
 
new
 Test(); 
echo
 
$t

运行echo $t;的时候,就会调用$t->__toString();从而输出

打印 Test

7,__clone() 当对象被克隆时,被调用

class
 Test 
 
public
 
function
 __clone() 
 { 
  
echo
 
"
我被复制了!
"
 } 
}
$t
 
=
 
new
 Test(); 
$t1
 
=
 
clone
 
$t
;
程序输出:
我被复制了!

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

你可能感兴趣的文章
认识jQuery及jQuery选择器
查看>>
从前后端分离到GraphQL,携程如何用Node实现?\n
查看>>
JavaScript标准库系列——RegExp对象(三)
查看>>
Linux Namespace系列(09):利用Namespace创建一个简单可用的容器
查看>>
js深度解析url地址
查看>>
web入门+书籍推荐
查看>>
[转]:xmake插件开发之色彩高亮显示
查看>>
OS X 下在代码中枚举所有进程的方法
查看>>
eventEmitter3源码分析与学习
查看>>
关于缓存命中率的几个关键问题!
查看>>
崛起的中国服务器市场迎来旺盛的SPEC测试需求
查看>>
视频转成flv格式
查看>>
客服运营三部曲
查看>>
《Python硬件编程实战》——2.8 在Mac中安装Python
查看>>
《iOS应用开发指南——使用HTML5、CSS3和JavaScript》——导读
查看>>
小测一下fastjson的速度(纯娱乐)
查看>>
如何做618数据复盘?你需要掌握这8大思路
查看>>
《ANSYS FLUENT 16.0超级学习手册》——2.5 FLUENT 16.0的基本操作
查看>>
深入理解Spark:核心思想与源码分析. 3.9 启动测量系统MetricsSystem
查看>>
讲给普通人听的分布式数据存储
查看>>