php的一些魔术方法的使用

    这篇文章主要是测试了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);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值