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()函数被调用啦~

posted @ 2012-09-26 11:06  longailili  阅读(229)  评论(0)    收藏  举报