Blogger Information
Blog 55
fans 0
comment 0
visits 50478
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
PHP-类常量与类属性重载-0903
Bean_sproul
Original
765 people have browsed it

语法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;

运行实例 »

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

Correction status:Uncorrected

Teacher's comments:
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post