这篇文章主要是测试了php一些魔术方法的使用,说明在文件的注释中,大家可以参考下,
<?php
class Students{
public $name;
protected $sex;
private $score;
function __construct($name,$sex,$score){
$this->name = $name;
$this->sex = $sex;
$this->score = $score;
}
//当给对象设置一个不存在的属性时
function __set($key,$val){
$allow = array('sex','score');
if(in_array($key,$allow)){
$this->$key=$val;
}else{
echo "there is no ".$key;
}
}
//当获取对象一个不存在的属性时
function __get($key){
//增加一个允许访问的列表
$allow = array('sex','score');
//判断
if(in_array($key,$allow)){
return $this->$key;
}else{
echo "there is no:".$key;
}
}
//当使用isset和empty来判断类中的属性时调用,私有属性在类外访问不到
function __isset($key){
return isset($this->$key);
/**
$allow = array('sex','score');
if(in_array($key,$allow)){
return true;
}else{
return false;
}
**/
}
//unset属性时调用,外部不能unset类中私有的属性与方法
function __unset($key){
//在这里定义被保护的数组
unset($this->$key);
}
/**
方法重载:__call(),__callstatic()
__call():搞定普通 与对象相关
__callstaitc();:静态方法 与类相关
**/
//私有方法只能在类中调用
private static function isStatic(){
echo "测试私有静态类";
}
//调用静态方法
public function callStatic(){
self::isStatic();
}
//魔术方法
function __call($mtname,$args)
{
var_dump($args);
echo "there no this method";
}
//静态魔术方法
public static function __callStatic($mtname,$args){
echo "there is no this static method";
}
}
//实例化
$student = new Students("ceshi",'boy',65);
//$student->sex1="nane";
//var_dump($student);
//var_dump(isset($student->sex));//当使用isset方法时自动调用魔术方法__isset
//var_dump(empty($student->sex1));//empty方法与isset一样,也是自动访问__isset
//unset($student->sex);