Correction status:Uncorrected
Teacher's comments:
语法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;
点击 "运行实例" 按钮查看在线实例