php 重写父类方法,PHP重写父类方法的陷阱

面向对象技术要求子类覆盖重写父类方法时,要保证子类方法的签名与父类方法签名一致。当然PHP也遵守这条约束,不过其中还有一些特别的地方。

由于对其他面向对象语言没有深入的了解,所以不清楚这些特性(或陷阱)是不是PHP特有的。

方法签名是由方法的名称和它的每一个形参(按从左到右的顺序)的类型和种类(值、引用或输出)组成。

PHP重写父类方法时,对参数的名称没,参数个数,参数类型的限制都有不同。

参数名称:

PHP对参数名称没有限制。即下面代码没有问题:

class foo

{

public function test($a)

{

}

}

class bar extends foo

{

public function test($b)

{

}

}

参数个数:

子类参数个数不得少于父类参数个数,但多出的参数必须为默认参数。例如

class foo

{

public function test($a)

{

}

}

class bar extends foo

{

public function test($b, $c = '')

{

}

}

参数类型:

由于PHP是弱类型的语言,所以重写父类方法只涉及对象类型和数组类型

class foo

{

public function test(stdClass $a, array $z)

{

}

}

class bar extends foo

{

public function test(stdClass $b, array $c)

{

}

}

另,默认参数的值不同也是可以的

class foo

{

public function test($a, $z = '')

{

}

}

class bar extends foo

{

public function test($b, $c = null)

{

}

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值