魔术方法:是指PHP为我们提供的一系列用双下划线(__)开头的函数,这些函数无需自己手动调用,会在合适的时机自动调用,这类函数称为魔术函数。
* 比如之前使用过的 function __construct(){}, 构造函数,在new一个新对象时自动调用此函数
* 1、__get() 当用户访问一个不存在或者无权访问的属性的时候,自动调用
* 2、__set() 当用户对一个不存在或者无权访问的属性赋值的时候,自动调用
执行结果如下图:
代码如下:
<?php class Books1 { private $name; protected $price; //用__construct()这个构造函数来初始化属性值。__construct()函数在用户创建对象时,自动执行。 public function __construct($name='《思考,快与慢》',$price=69) { $this->name = $name; $this->price = $price; } //1、__get()魔术方法的使用 public function __get($proName) //$proName 是属性名 { //用条件判断来实现对私有属性和受保护属性的有条件的外部调用 if ($this->price == 69 || $this->name == '《思考,快与慢》'){ return $this->$proName; }else{ return '您无权访问该属性'; } } //2、__set()魔术方法的使用 public function __set($proName, $proValue) //$proName是属性名,$proValue 是属性值 { return $this->$proName = $proValue; //将属性值赋值给属性 } } $obj1 = new Books1(); echo $obj1->name.'售价:'; echo $obj1->price.'元/本'; echo '<hr>'; $boj2 = new Books1(); echo $boj2->name = '《智识分子》'.'售价:'; echo $boj2->price = '65'.'元/本'; echo '<hr>'; echo $boj2->name = '《完全写作手册》'.'售价:'; echo $boj2->price = '78'.'元/本';