php类 对象 继承,详解php中的类与对象(继承)

简介

在php中,类型的继承使用extends关键字,而且最多只能继承一个父类,php不支持多继承。

class MyClass

{

public $dat = 0;

public function __construct($dat) {

$this->dat = $dat;

}

public function getDat() {

return "$this->datn";

}

}

class MySubClass extends MyClass

{

public function getDat() {

return "dat: $this->datn";

}

}

$a = new MyClass(3);

$b = new MySubClass(4);

echo $a->getDat(); // 3

echo $b->getDat(); // dat: 4

方法覆盖

包括构造函数在内,子类可以重新定义同名的类方法以覆盖父类方法。覆盖时遵循以下规则:

1.除构造函数之外,其他函数在覆盖时,函数的参数列表必须相同

2.包括构造函数在内,方法被覆盖后,调用子类方法时并不会自动调用父类方法

3.如果父类要禁止方法被子类覆盖,可以使用final来声明方法,这时如果子类仍要覆盖父类方法,将会出错

class MyClass

{

private $name = "";

public $num = 0;

public $str = "";

public function __construct($name) {

$this->name = $name;

$this->num = 100;

$this->str = "none";

}

public function getName() {

return $this->name;

}

}

class MySubClass extends MyClass

{

public function __construct($name, $str) {

parent::__construct($name); // 调用父类方法

$this->num = "0";

$this->str = $str;

echo parent::getName()."n"; // 调用父类方法

}

public function getName() {

return parent::getName()."$this->strn"; // 调用父类方法

}

}

$b = new MySubClass("myName", true); // myName

echo $b->getName(); // myName1

class MyClass

{

final public function getName() {

}

}

属性重定义

在子类中,可以访问父类中的public和protected属性成员,除非重定义了同名的自有属性,这时,父类中的属性将无法访问。

方法则不同,子类对方法进行覆盖后,仍然可以访问到父类方法。

class MyClass

{

public $a = 1;

protected $b = 2;

private $c = 3;

public function f1() {

echo "MyClass f1n";

echo "$a:$this->a; $b:$this->b; $c:$this->c;n";

}

protected function f2() {

echo "MyClass f2n";

echo "$a:$this->a; $b:$this->b; $c:$this->c;n";

}

private function f3() {

echo "MyClass f3n";

}

}

class MySubClass extends MyClass

{

public $b = 22;

public $c = 33;

public function f1() {

echo "MySubClass f1n";

// 继承到父类中的$a属性,直接使用

echo "$a:$this->a; $b:$this->b; $c:$this->c;n";

// 调用父类中的同名方法

parent::f1();

// 继承到父类中的f2()方法,直接使用

$this->f2();

}

// 父类的f3()是私有的,这里的定义与父类无关

public function f3() {

echo "MySubClass f3n";

}

}

$b = new MySubClass;

$b->f1();echo "n";

/*

MySubClass f1

$a:1; $b:22; $c:33;

MyClass f1

$a:1; $b:22; $c:3;

MyClass f2

$a:1; $b:22; $c:3;

*/

$b->f3();echo "n";

/*

MySubClass f3

*/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值