博客列表 >类与对象-属性重载

类与对象-属性重载

夜澜风的博客
夜澜风的博客原创
2019年05月06日 16:00:49940浏览

实例

<?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);

运行实例 »

点击 "运行实例" 按钮查看在线实例


声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议