PHP中魔术方法
__construct
__destruct
__set
__get
__isset
__unset
- 下面是一个 Person 类
class Person
{
private $name;
private $sex;
private $age;
// 构造方法
function __construct($name = '', $sex = '男', $age = 1)
{
echo __METHOD__ . PHP_EOL;
$this->name = $name;
$this->sex = $sex;
$this->age = $age;
}
// 析构方法
function __destruct()
{
echo __METHOD__ . PHP_EOL;
}
function say()
{
echo '我的名字: ' . $this->name . ' ,性别: ' . $this->sex . ' ,年龄: ' . $this->age . PHP_EOL;
}
function run()
{
echo $this->name . ' 在跑步' . PHP_EOL;
}
}
- 初始化时调用 __construct
$roy = new Person('roy', '男', 18); // Person::__construct
$roy->run(); // roy 在跑步
$roy->say(); // 我的名字: roy ,性别: 男 ,年龄: 18
- 调用 __destruct
$roy = null; // Person::__destruct
- __set
/**
* @param string $propertyName 成员变量
* @param mixed $propertyValue 成员变量对应的值
*/
function __set($propertyName, $propertyValue)
{
echo __METHOD__ . ' ,参数: property- ' . $propertyName . ' ,value- ' . $propertyValue . PHP_EOL;
}
$roy->name = 'lily'; // 自动调用 __set()
- __get
/**
* @param string $propertyName 成员变量
*/
function __get($propertyName)
{
echo __METHOD__ . '参数: Property - ' . $propertyName . PHP_EOL;
}
echo $roy->age; // 自动调用 __get()
- __isset 和 __unset
function __isset($propertyName)
{
echo __METHOD__ . '参数 : ' . $propertyName . PHP_EOL;
}
function __unset($propertyName)
{
echo __METHOD__ . '参数 : ' . $propertyName . PHP_EOL;
}
var_dump(isset($roy->name)); // 自动调用 __isset
unset($roy->age); // 自动调用 __unset
- __call 当调用对象不存在的方法时会自动调用此方法
/**
* @param string $functionName 方法名
* @param array $arguments 传入的参数
*/
function __call($functionName, $arguments)
{
// TODO: Implement __call() method.
}