批改状态:未批改
老师批语:
语法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;点击 "运行实例" 按钮查看在线实例
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号