博客列表 >PHP-类常量与类属性重载-0903

PHP-类常量与类属性重载-0903

Bean_sproul
Bean_sproul原创
2018年09月11日 15:47:47766浏览

语法const 名称='常量';
类常量属于类自身,不属于对象实例,不能通过对象实例访问
不能用public,protected,private,static修饰
子类可以重写父类中的常量,可以通过(parent::)来调用父类中的常量
自PHP5.3.0起,可以用一个变量来动态调用类。但该变量的值不能为关键字(如self,parent或static)。


实例

<?php
//父类
class cl
{
    const constant ='常量';
    public static function getConstant()
    {
        //在类的内部可以使用self或类名来访问自身的常量,外部需要用类名
        echo '<h3>这是内部调用</h3>'.self::constant.'<r>';
    }
}
//cl::getConstant();

//类外部访问方法一
echo '<h3>这是外部调用</h3>'.cl::constant.'<hr>';

//类外部访问方法二
//用new方法实例化一个对象h
$obj = new cl();
echo '<h3>这是外部调用</h3>'.$obj::constant.'<hr>';

echo $obj->getConstant().'<hr>';


//子类继承父类
class foo extends cl
{
    const constant = '改写常量'; // 重写父类常量
    public static function getMyConstant()
    {
        return self::constant;
    }
}
//输出改写常量
echo '<h3>'.foo::getMyConstant().'</h3>';

运行实例 »

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



 类的重载

实例

<?php
//类实例化时会先自动调用构造方法,所以可以在构造方法中对对象进行一些初始化操作

class ChongZai{
    //尽可能的将属性私有化
    private $name;
    private $age;
    private $grade;

    //构造方法,构造器
    public function __construct($name,$age,$grade)
    {
        $this-> name = $name;
        $this-> age = $age;
        $this-> grade =$grade;

        //构造方法也可以调用本类的方法,在创建对象之前执行
        echo $this->show();

    }

    public function show()
    {
       return '姓名:'.$this->name.',年龄:'.$this->age .',考试成绩:'.$this->grade;
    }

    //获取属性的重载  $a 是要查看属性的名称,就是一个字符串
    //-----------获取----------
    public function __get($a)
    {
       if ($a== 'age'){
           return $a.'年龄不允许查看';
       }
        return $this->$a;
    }

    //-----------设置----------
    public function __set($b,$value)
    {
        if ($b== 'grade'){
            return $b.'不允许设置成绩';
        }
        $this->$b=$value;
    }

    //-----------检测----------
    public function __isset($c)
    {
        if ($c== 'grade'){
            return false;
        }
        return isset($this->$c);
    }
   //-----------检测----------
    public function __unset($d)
    {
        if ($d == 'grade' || $d == 'name'){
            return false;
        }
        unset($this->$d);
    }

}
echo '<pre>';
$ChongZai = new ChongZai('小样','18','82');//打印一下数组
var_dump($ChongZai);
echo '</pre>';

//输出属性 show方法
echo $ChongZai->show().'<hr>';

//构造方法中调用show方法,给变量赋值,直接new类输出
new ChongZai('小样样','18','60');

echo '<hr>';
//类属性重载
//属性重载的四种场景:获取__get,设置__set,检查__isset,销毁__unset;

//-----------获取----------
echo $ChongZai->name,'<hr>';
echo $ChongZai->age,'<hr>';//判断 $a= 'age' 无法查看
echo $ChongZai->grade,'<hr>';

//-----------设置----------
echo $ChongZai->name='小红','<hr>';
echo $ChongZai->grade='70','<hr>';

//-----------检测----------
echo isset($ChongZai->grade) ? '存在<hr>':'<span style="color: red">不存在</span><hr>';
echo isset($ChongZai->name) ? '存在<hr>':'<span style="color: red">不存在</span><hr>';

//-----------销毁----------
unset($ChongZai->age);
echo $ChongZai->age;

unset($ChongZai->name);
echo $ChongZai->name;

运行实例 »

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

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