Welcome 微信登录

首页 / 网页编程 / PHP / php面向对象编程的继承性

php面向对象编程的继承性2016-10-22guaitu

为什么需要继承?

<?php
//开发一套学生管理系统(小学生pupil,大学生,...)
//父类
class Stu{
public $name;
protected $age;
protected $grade;
public function showInfo(){
echo $this->name."||".$this->age;
}
}
//子类
class Pupil extends stu{ //小学生
public function testing(){
echo "小学生考试";
}
}
class Graduate extends stu{//研究生
public function testing(){
echo "研究生考试";
}
}
//创建学生
$stu1=new Pupil();
$stu1->testing();
$stu1->name="www.bianceng.cn";
$stu1->showInfo();
echo "<br />";
//创建研究生
$stu2=new Graduate();
$stu2->testing();
$stu2->name="hello";
$stu2->showInfo();
?>
从上面代码可以看出,所谓继承,就是一个子类通过 extends 父类,把父类的public/protect属性和方法继承下来,但不能继承父类的private属性和方法。

继承的基本语法:

class 类名 extends 父类名{

//子类需要的属性和方法

}

使用继承的注意事项:

1)子类能把父类的public/protect属性和方法继承下来,但不能继承父类的private属性和方法

<?php
//父类的什么属性和方法被子类继承
class A{
public $n1=1;
protected $n2="www.bianceng.cn";
private $n3=20;
public function test1(){
echo "test1()";
}
public function test2(){
echo "test2()";
}
public function test3(){
echo "test3()";
}
}
class SubClass extends A{
function show(){
echo "<br />".$this->n2; //
}
}
//创建SubClass对象
$sub1=new SubClass();
$sub1->test1();
echo "<br />";
$sub1->test2();
echo "<br />";
$sub1->test3();
echo "<br />".$sub1->n1;
$sub1->show();
?>

2)php继承是单一继承,即一个子类不能直接继承两个父类

可以通过继承两次的方法达到继承多个类的目的。

<?php
class A{
}
class B extends A{
}
class C extends B{ //通过两次继承,C继承了A和B两个类
}
?>

3)当创建子类对象的时候,默认不会自动调用父类的构造方法。

<?php
class A{
//构造方法
public function __construct(){
echo "A__construct";
}
}
class B extends A{
function __construct(){
echo "B__construct";
}
}
//创建对象实例
$b=new B(); //输出B__construct
?>

4)如果希望在子类中调用父类的构造方法或者其它方法(public/protected),可以这样处理(了解即可):

(1)类名::方法名();

(2)parent::方法名();

例:

<?php
class A{
//构造方法
public $n1=90;
public function __construct($n1){
$this->n1=$n1;
echo "A__construct";
}
}
class B extends A{
function __construct(){
echo "B__construct";
//显式的调用父类的方法
//A::__construct(900);
parent::__construct(900);
}
}
//创建对象实例
$b=new B(); //输出B__construct
echo "<br />".$b->n1; //输出900
?>

5)如果子类(派生类)中的方法与父类(基类)中的方法相同,称之为方法重写/方法覆盖。

URL:http://www.bianceng.cn/webkf/PHP/201610/50463.htm