php中people类,姓名性别,getinfo方法用final关键字修饰,student类继承people类,添加新的属性ID,尝试重写getinfo方法查看是否报错,如果报错尝试写新的方法来访问自身属性,并声明一个静态变量locaion = x302,将自身属性全都输出出来。
时间: 2024-11-12 19:36:49 浏览: 3
在PHP中,`final` 关键字用于标记类、方法或属性不可被覆盖(即不可被子类继承并重写)。如果我们有一个名为 `People` 的基础类,它有 `姓名` 和 `性别` 属性以及 `getInfo()` 方法:
```php
class People {
private $name;
private $gender;
final public function getInfo() {
return "Name: " . $this->name . ", Gender: " . $this->gender;
}
// 其他构造函数等...
}
```
然后我们创建了一个 `Student` 类继承自 `People` 并新增加了 `ID` 属性:
```php
class Student extends People {
protected $id; // 声明一个新的 ID 属性
// 如果试图重写 final 的 getinfo() 方法会抛出错误,因为final不允许覆盖
// try {
// final public function getInfo() { ... }
// } catch (TypeError $e) {
// echo "Final method cannot be overridden.";
// }
// 要访问新属性并避免直接重写,我们可以定义一个新的方法如:
public function displayInfo() {
return parent::getInfo() . ", ID: " . $this->id;
}
// 定义静态变量 $location
public static $location = 'x302';
}
// 使用示例:
$student = new Student();
$student->name = 'Alice';
$student->gender = 'Female';
$student->id = 123456;
echo Student::$location . "\n";
echo $student->displayInfo(); // 输出 Student的信息加上ID
```
在这个例子中,尝试重写 `getInfo()` 会因为 `final` 访问限制而抛出错误。通过定义新的 `displayInfo()` 方法,我们可以绕过这个问题来访问所有的属性。
阅读全文