PHP魔术方法
<?php namespace test; class ObjectClass { public function __construct($params) // 实例化对象则会被调用__construct() { echo "<pre>"; print_r(__METHOD__ .json_encode($params) . PHP_EOL); echo "</pre/>"; } public function __invoke($params) // 对象本身不能直接当函数用,如果被当做函数用,会直接回调__invoke() { echo "<pre>"; print_r(__METHOD__ .json_encode($params) . PHP_EOL); echo "</pre/>"; } public function __sleep($params) // 序列化对象的时候调用 { echo "<pre>"; print_r(__METHOD__ .json_encode($params) . PHP_EOL); echo "</pre/>"; } public function __wakeup($params) // 反序列化对象的时候调用 { echo "<pre>"; print_r(__METHOD__ .json_encode($params) . PHP_EOL); echo "</pre/>"; } public function __destruct() // 反序列化对象的时候调用 { echo "<pre>"; print_r(__METHOD__ . PHP_EOL); echo "</pre/>"; } public function __get($params) // 获取对象不存在的属性则会调用 { echo "<pre>"; print_r(__METHOD__ .json_encode($params) . PHP_EOL); echo "</pre/>"; } public function __set($params, $value) // 设置对象不存在的属性则会调用 { echo "<pre>"; print_r(__METHOD__ .json_encode($params) . $value . PHP_EOL); echo "</pre/>"; } public function __toString() // 把对象当成字符串打印则会调用 { echo "<pre>"; print_r(__METHOD__ . PHP_EOL); echo "</pre/>"; return __METHOD__ . PHP_EOL; } public function __clone() // 克隆对象的时候则会调用 { echo "<pre>"; print_r(__METHOD__ . PHP_EOL); echo "</pre/>"; } } $objectClass = new ObjectClass("construct()"); // __construct() $objectClass("invoke()"); // __invoke() serialize($objectClass("sleep()")); // __sleep() unserialize($objectClass("wakeup()")); // __wakeup() $objectClass->name; // __get() $objectClass->sex = 1; // __set() echo $objectClass("toString()"); // __toString() $clone = clone $objectClass; // __clone() unset($objectClass); // __destruct()