类的继承要通过extends来实现
class 子类名 extends 父类名 {…………}
子类访问父类中public成员方法
- 子类可以继承父类的构造函数,当子类被实例化时,php会先在子类中查找构造函数。
- 若子类有自己的构造函数,php会先调用子类中的构造函数。
- 当子类没有自己的构造函数时,php则会去调用父类中的构造函数。
<?php
class Website{
public $name, $url, $title;
public function __construct(){
echo '--基类中的构造函数--';
}
public function demo(){
echo '--基类中的成员方法';
}
}
class ClassOne extends Website{
}
class ClassTwo extends Website{
public function __construct(){
echo '--子类中的构造函数--';
}
}
$object = new ClassOne();
$object->demo();
/*结果为:--基类中的构造函数--
--基类中的成员方法*/
$object2 = new ClassTwo();
$object2->demo();
/*结果为:--子类中的构造函数--
--基类中的成员方法*/
?>
子类访问父类中protected成员方法
- 有些类继承的属性,并不想在类外都被访问,这个成员被声明为保护成员,用protected修饰。
- 受保护成员不可在类外部被访问到,但可以在子类的内部访问。
- 也就是说我们可以在子类中设置一个函数,来访问父类中这个受保护的成员。
<?php
class Website{
public $name, $url, $title;
public function __construct(){
echo '--基类中的构造函数--';
}
protected function demo(){
echo '--基类中的成员方法';
}
}
class ClassOne extends Website{
}
class ClassTwo extends Website{
public function __construct(){
echo '--子类中的构造函数--';
}
public function test(){
$this->demo();
}
}
$object = new ClassOne(); /*结果为:--基类中的构造函数--*/
//$object->demo(); //在子类中调用父类使用protected修饰的成员方法会报错
$object2 = new ClassTwo();
$object2->test();
/*结果为:--子类中的构造函数--
--基类中的成员方法- */
?>
子类访问父类中private成员方法
- private修饰私有成员
- 父类中的私有成员不会被子类继承。
- 因此不可被子类放问到。
<?php
class Website{
public $name, $url, $title;
public function __construct(){
echo '--基类中的构造函数--';
}
private function demo(){
echo '--基类中的成员方法';
}
}
class ClassTwo extends Website{
public function test(){
$this->demo();
}
}
$object2 = new ClassTwo();
$object2->test();
/*结果为: --基类中的构造函数--
PHP Fatal error: Uncaught Error: Call to private method Website::demo() from context 'ClassTwo' in 5_php_extends_private.php:14*/
/*出错原因: 子类中调用父类中使用private关键字修饰的成员,程序会报错并终止。*/
?>