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