一、语法
public __set ( string $name , mixed $value ) : void public __get ( string $name ) : mixed public __isset ( string $name ) : bool public __unset ( string $name ) : void public __call ( string $name , array $arguments ) : mixed public static __callStatic ( string $name , array $arguments ) : mixed
说明:
在给不可访问属性赋值时,__set() 会被调用。
读取不可访问属性的值时,__get() 会被调用。
当对不可访问属性调用 isset() 或 empty() 时,__isset() 会被调用。
当对不可访问属性调用 unset() 时,__unset() 会被调用。
在对象中调用一个不可访问方法时,__call() 会被调用。
在静态上下文中调用一个不可访问方法时,__callStatic() 会被调用。
参数 $name 是指要操作的变量名称。__set() 方法的 $value 参数指定了 $name 变量的值。
$name 参数是要调用的方法名称。$arguments 参数是一个枚举数组,包含着要传递给方法 $name 的参数
二、示例
<?php
/**
* 定义一个猫类
*/
class Cat {
//定义一个属性
private $name = null;
// 构造函数
function __construct(?string $name = null){
print "__construct <br>\n";
if(is_null($this->name)){
$this->setName($name);
}
//就算执行下面方法 ,析构函数照样执行
// exit();
// die();
}
/**
* 输出名字
*/
public function getName(){
echo "这是一只猫,名字叫{$this->name}。\n"."<br>";
}
/**
* 私有方法
*/
private function setName($name){
$this->name = $name;
}
/**
* 私有方法
*/
private static function setStaticName($name){
$this->name = $name;
}
//在给不可访问属性赋值时,__set() 会被调用。
function __set($name , $value){
echo $name.'属性是私有属性,不可赋值为:'.$value."<br>";
return '__set';
}
//读取不可访问属性的值时,__get() 会被调用。
function __get($name){
echo $name."属性是私有属性,不可读<br>";
return '__get';
}
//当对不可访问属性调用 isset() 或 empty() 时,__isset() 会被调用。
function __isset($name ){
echo $name."属性是私有属性,不可访问属性调用 isset() 或 empty()<br>";
return '__isset';
}
//当对不可访问属性调用 unset() 时,__unset() 会被调用。
function __unset($name ){
echo $name."属性是私有属性,不可访问属性调用 unset()<br>";
return '__unset';
}
//当对不可访问属性调用 unset() 时,__unset() 会被调用。
function __call($name ,$arg){
echo $name."属性是私有方法,不可访问<br>";
return '__call';
}
//当对不可访问属性调用 unset() 时,__unset() 会被调用。
function __callStatic($name ,$arg){
echo $name."属性是私有静态方法,不可访问<br>";
return '__callStatic';
}
//析构函数 脚本结束时执行
function __destruct() {
print "__destruct 类名: ". __CLASS__."<br>";
}
}
//实例化
$Cat = new Cat(); // 输出 __construct
$Cat->getName(); //输出:这是一只猫,名字叫旺财。
$Cat->name = 3; //触发:__set() 输出:name属性是私有属性,不可赋值为:3
$Cat->name;//触发:__get() 输出:name属性是私有属性,不可读
isset($Cat->name); //触发:__isset() 输出:name属性是私有属性,不可访问属性调用 isset() 或 empty()
unset($Cat->name);//触发: __unset() 输出:name属性是私有属性,不可访问属性调用 unset()
$Cat->setName('旺财2'); //触发:__call() 输出:setName属性是私有方法,不可访问
Cat::setStaticName('旺财2'); //触发:__callStatic() 输出:setStaticName属性是私有静态方法,不可访问
// 脚本结束时 输出 : __destruct 类名:Cat
三、其他
想要了解更多,请前往:https://www.php.net/manual/zh/language.oop5.overloading.php#object.call
浙公网安备 33010602011771号