<?php
header("content-type:text/html;charset=utf-8");
// ## 3. 属性重载
// * 重载: 动态的创建属性和方法
// * 当访问未定义或不可见的属性/方法时, 重载方法会自动调用
// * "当访问未定义或不可见", 统称为: "不可访问"
// * PHP中的重载,是通过"魔术方法"实现
// * "魔术方法"是特指客户端不能访问,而只能是系统根据一定条件自动调用
// * 所有重载方法必须声明为: `public`
class demo{
private $name; //private()受保护的属性或方法
private $age;
protected $country = '中国'; //私有属性或方法
// // 魔术方法,前面都是 __开头,两个下划线
public function __construct($name,$age){
$this->name = $name;
$this->age = $age;
}
// // 当获取未定义 不可见的属性时,触发。
public function __get($name){ //__get()方法:这个方法用来获取私有成员属性值的,有一个参数,参数传入你要获取的成员属性的名称,返回获取的属性值。如果成员属性不封装成私有的,对象本身就不会去自动调用这个方法。
if($name == 'country'){
echo $this->country;
}
}
//// // 给不可见的属性,进行赋值时,触发。
public function __set($name,$value){ //__set()方法:这个方法用来为私有成员属性设置值的,有两个参数,第一个参数为你要为设置值的属性名,第二个参数是要给属性设置的值,没有返回值。(key=>value)
if($name == 'country'){
if($value == '***'){
echo '绝不让***人加入';
}
}
}
//
//// // 检测不可见的属性,触发
//// // 需要搭配isset函数
public function __isset($name){
if($name == 'country'){
echo '变量存在';
}else{
echo '变量不存在';
}
}
// // 删除不可见的属性,触发
// // 需要搭配unset函数
public function __unset($a){
if($a == 'country'){
unset($this->country);
echo '删除成功';
}else{
echo '无法删除';
}
}
public function info(){
return $this->name.$this->age.$this->country;
}
}
$a = new demo('朱老师',90);
echo $a->country;
echo $a->info();
// echo '<br>';
$a->country = '***';
// echo '<br>';
isset($a->country);
// echo '<br>';
unset($a->country);
//echo '<br>';
//isset($a->country);点击 "运行实例" 按钮查看在线实例
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号