__set()的作用:
__set():在给不可访问属性赋值(private,protected,不存在)时,php就会执行__set()方法。大理石机械构件维修厂家
上面我们说了__set()的作用是:在给不可访问属性赋值(private,protected,不存在)时,php就会执行__set()方法。
这个是什么意思呢。比如说,我们还是以上面的实例为例。我们把猴子喜欢吃的桃子换成香蕉,但是根据规则来说,$food前面的关键词是protected
,不能直接访问,但是我们又需要对$food赋值,我们该怎么办呢?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
<?php
class Monkey{
public $name ;
protected $food ;
function __construct( $name , $food ){
$this ->name = $name ;
$this ->food = $food ;
}
function sayHello(){
echo '<br/>我是' . $this ->name . '我喜欢吃' . $this ->food;
}
function __get( $pro_name ){
if (isset( $this -> $pro_name )){
return $this -> $pro_name ;
} else {
echo '属性值不存在' ;
}
}
function __set( $pro_name , $value ){
if (isset( $this -> $pro_name )){
return $this -> $pro_name = $value ;
} else {
echo '属性值不存在' ;
}
$monkey = new Monkey( '猴子' , '桃子' )
$monkey -> sayHello();
echo '猴子喜欢吃' . $monkey -> food;
$monkey -> food = '香蕉' ;
echo '<br/>' ;
$monkey -> sayHello();
|
因为我们的$food是保护的,所以不允许访问。那么,我们就要借助__set()魔术方法来实现。__set()方法包含两个参数,分别表示变量名称和变量值,两个参数不可省略。https://www.bzddrive.com/zxmzcj/1294.html