php5魔术常量和魔术函数
魔术常量
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 新加)。返回该方法被定义时的名字(区分大小写)。
具体事例部分代码:
class wrj{ public function wrjwrj(){ echo __CLASS__."<br>"; echo __METHOD__."<br>"; echo __LINE__."<br>"; echo __FILE__."<br>"; ECHO __FUNCTION__; } }
$wrj = new wrj(); $wrj->wrjwrj();
输出:
wrj
wrj::wrjwrj 41 D:\webserver\www\ceshi\cookie\cookie.php wrjwrj
魔术函数
1。__construct() 实例化对象时被调用。例如: $wrj = new wrj(); 当__construct和以类名为函数名的函数同时存在时,__construct将被调用,另一个不被调用。 (声明:php4中以类名的函数作为默认的构造函数,php5重新规定,__construct为构造函数名)
2。__destruct() 当删除一个对象或对象操作终止时被调用。
3。__call() //两个参数,(方法名,方法中的参数数组) 对象调用某个方法, 若方法存在,则直接调用; 若不存在,则会去调用__call函数。 在调用一个不存在的方法时自动调用,处理错误调用。 4。__get() 读取一个对象的属性时, 若属性存在,则直接返回属性值; 若不存在,则会调用__get函数。
5。__set() 设置一个对象的属性时, 若属性存在,则直接赋值; 若不存在,则会调用__set函数。
get 和set为私有属性的访问提供了接口,可以实现对数据的安全验证。
6。__toString() 打印一个对象时被调用。如echo $obj;或print $obj;
直接输出对象引用时调用,用来快速获取对象的字符串表示的最便捷的方式。
7。__clone() 克隆对象时被调用。
重新clone出一个新的对象。在内存中单独存在。
而$p1 = $p2;指代对象p1共享p2的内存地址,所以指代的是同一块数据。
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()
实例化一个对象时,如果对应的类不存在,则该方法被调用
14.__sleep()
15.wakeup()
部分函数调用事例代码:
class WrjOne {
static $name1 = 'WrjOne Value';
public static function render() {
echo __CLASS__;
} // public static function text(){static::render();}
}
class WrjTwo extends WrjOne {
static $name1 = 'WrjTwo Value';
}
/*echo WrjTwo::text(); */
class wrj{
public $wrj="dede"; protected $gxq; private $wrjwrj; public function wrjwrj(){ echo __CLASS__."<br>"; echo __METHOD__."<br>"; echo __LINE__."<br>"; echo __FILE__."<br>"; ECHO __FUNCTION__; } public function __set($name,$value){ $this->$name = $value; echo date("y-m-d H:i:s").'对'.$name . "附值".$value."<br>"; } public function __get($name){ echo date("y-m-d H:i:s").$name . "不存在 get()函数被调用"; return $this->$name."<br>"; } public function __call($key,$Args){ echo date("y-m-d H:i:s")."__call()函数被调用啦~~" . "<br> 您要调用的 {$Key} 方法不存在。你传入的参数是:" . print_r($Args, true)."<br>"; } public function __toString(){ echo date("y-m-d H:i:s")."__tostring()函数被调用啦~~"."<br>"; } public function __clone(){ echo date("y-m-d H:i:s")."__clone()函数被调用啦~~"."<br>"; } public function __autoload($name){ echo "__autoload()函数被调用啦~~"."<br>"; } public function __isset($name){ } public function __destruct(){ echo __CLASS__."__destruct()函数被调用啦~"."<br>"; } }
$wrj1 = new wrj(); $wrj1->wrjwrj(); $wrj1->$ww; $wrj1->wrjwr = "wrjwrjddd";//不存在属性的访问处理 $wrj1->wrjwrj = "wrjwrjddd";//私有属性的访问处理 echo $wrj1->wrj; print $wrj1->$wrj; $wrj2 = clone $wrj1; $wrj3 = new WrjOne();//自动加载类
echo
$wrj1;
输出结果:
wrj wrj::wrjwrj 46 D:\webserver\www\ceshi\cookie\cookie.php wrjwrj不存在 get()函数被调用对wrjwr附值wrjwrjddd 对wrjwrj附值wrjwrjddd 8wrjwrj不存在 get()函数被调用wrjwrjddd 不存在 get()函数被调用 __clone()函数被调用啦~~ 3wrj__destruct()函数被调用啦~ wrj__destruct()函数被调用啦~

浙公网安备 33010602011771号