魔术方法小记

xiaoxiao2021-02-28  140

<?php namespace magic\sub; class magic { const foo = 1; //被重载的数据放在此 private $data = []; private $_name = ''; //重载不能用在已定义的属性 // public $a = ''; public function __construct($name) { // echo __FUNCTION__ . "<br/>"; // echo __CLASS__ . "<br/>"; // echo __METHOD__ . "<br/>"; $this->_name = $name; } public function __destruct() { echo '__destruct' . "<br/>"; } public function __get($name) { echo '__get' . "<br/>"; if (array_key_exists($name, $this->data)) { return $this->data[$name]; } $trace = debug_backtrace(); trigger_error( 'Undefined property via __get(): ' . $name . ' in ' . $trace[0]['file'] . ' on line ' . $trace[0]['line'], E_USER_NOTICE); return null; } public function __set($name, $value) { echo '__set' . "<br/>"; $this->data[$name] = $value; } public function __isset($name) { echo '__isset' . "<br/>"; return isset($this->data[$name]); } public function __unset($name) { echo '__unset' . "<br/>"; unset($this->data[$name]); } public function __call($name, $arguments) { // 注意: $name 的值区分大小写 /*echo "Calling object method '$name' " . implode(', ', $arguments). "\n";*/ $className = '_' . $name; $this->$className(); } private function _getName() { echo 'call _getName' . "<br/>"; } public static function __callStatic($name, $arguments) { // 注意: $name 的值区分大小写 echo "Calling static method '$name' " . implode(', ', $arguments). "\n"; } public function __sleep() { return array('server', 'username', 'password', 'db'); } public function __wakeup() { $this->connect(); } public function __toString() { echo 'call __toString' . "<br/>"; return $this->_name . "<br/>"; } //当尝试以调用函数的方式调用一个对象时,__invoke() 方法会被自动调用。 function __invoke($x) { var_dump($x); } public function __debugInfo() { return [ 'propSquared' => $this->_name, ]; } }

调用文件

<?php namespace magic; require_once('magic.class.php'); $mag = new magic('jack'); /*var_dump($mag->a); echo "<br/>"; unset($mag->a); var_dump(isset($mag->a)); echo "<br/>";*/ /*$mag->getName(); echo "<br/>"; magic::getName(); echo "<br/>";*/ //测试__toString // echo $mag; // $mag(5); // echo "<br/>"; // var_dump(new magic('jack')); // echo "<br/>"; //魔术常量 // echo __LINE__; // echo __FILE__; // echo __DIR__; // echo __NAMESPACE__;
转载请注明原文地址: https://www.6miu.com/read-24949.html

最新回复(0)