<?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()