魔术方法:是指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'.'元/本';
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号