感谢关注 PHP学习坊 ,文章内容由 PHP学习坊 收集整理,如有错误或者疏漏之处,欢迎在评论区指出,也欢迎大家积极评论转发。小编需要来自你们订阅、评论的支持,吐槽也好,支持也罢,欢迎大家积极评论。
今天演示一下昨天的内容,魔术方法是如何进行触发的,先来截图感受下。
/**
* Created by PhpStorm.
* User: PHP学习坊
* Date: 17/2/28
* Time: 下午9:54
*/
class Magic
{
/**
* Magic constructor. 构造函数 ,自动执行
*/
public function __construct()
{
echo “我是构造函数,在类 实例化 的时候,我会自动执行\n”;
}
/**
* @param $name 要访问的变量
* 访问一个不存在的成员变量自动触发
*/
public function __get($name)
{
echo “我访问了一个不存在的成员变量{$name}\n”;
}
/**
* @param $name 变量名
* @param $value 变量值
* 为一个不存在的成员变量赋值,自动触发
*/
public function __set($name, $value)
{
echo “为不存在的成员变量 {$name} 赋值 {$value} \n”;
}
/**
* @param $name 方法名
* @param $arguments 参数
* 调用一个不存在的方法是触发
*/
public function __call($name, $arguments)
{
echo “我调用了不存在的方法{$name},参数是”.implode( ‘,’ , $arguments ).”\n”;
require_once ‘A.php’;
}
/**
* 对象被克隆时触发
*/
public function __clone()
{
echo “对象被克隆时触发\n”;
}
/**
* @return string
* 尝试echo一个对象时触发
*/
public function __toString()
{
return “我是__toString,尝试echo一个对象时触发\n”;
}
/**
* 对象销毁时触发
*/
public function __destruct()
{
echo “我是 析构函数 ,对象销毁时触发\n”;
}
public static function __callStatic( $name, $arguments )
{
echo “我调用了不存在的 静态方法 {$name},参数是”.implode( ‘,’ , $arguments ).”\n”;
}
}
$magic = new Magic(); //触发__construct
$magic->test; //触发__get
$magic->test = ‘test’; //触发__set
$magic->test( ‘a’ , ‘b’ , ‘c’ ); //触发__call
$a = new A(); //触发__autoload
/**
* @param $class 类名
* 试图实例化一个不存在的类时候触发
*/
function __autoload( $class )
{
echo “试图实例化类{$class},但是类不存在,我可以尝试从其他地方加载类A\n”;
}
$a = clone $magic; //触发__clone
echo $magic; //触发__toString
Magic::test(); //触发__callStatic
?>
以上就是昨日内容的一些代码示例,这里只是演示,既然特定情况下,能触发指定的魔术方法,我们自然可以做一些我们需要的操作,这就是他们被称为魔术方法的原因。
以上是今天的内容。
相关文章
本站已关闭游客评论,请登录或者注册后再评论吧~