PHP重写的定义是什么,怎么应用
Admin 2022-08-20 群英技术资讯 1291 次浏览
这篇文章主要讲解了“PHP重写的定义是什么,怎么应用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“PHP重写的定义是什么,怎么应用”吧! 1.不管是公有属性,还是受保护属性,一旦重写,父类的属性就会不存在,而私有属性不会因为被覆盖而丢失。
<?php
class A{
public $name='张三';
protected $sex='man';
private $age='25';
public function getName(){
echo __CLASS__,'<br/>';
echo $this->name."<br>";
}
protected function getSex(){
echo __CLASS__,'<br/>';
echo $this->sex."<br>";
}
private function getAge(){
echo __CLASS__,'<br/>';
echo $this->age."<br>";
}
}
class B extends A{
public $name='王五';
protected $sex='woman';
private $age='26';
public function getAll(){
echo $this->name."<br>";
echo $this->sex."<br>";
echo $this->age."<br>";
}
}
$a=new B();
var_dump($a);
/* object(B)#1 (4)
{ ["name"]=> string(6) "王五"
["sex":protected]=> string(5) "woman"
["age":"B":private]=> string(2) "26"
["age":"A":private]=> string(2) "25"
}*/
echo "<br>";
$a->getAll();//王五 woman 26
?> 可以发现无论是公有属性,还是受保护属性都被覆盖,而私有属性因为没有被继承,所以不受影响。
<?php
class A{
public $name='张三';
protected $sex='man';
private $age='25';
public function getName(){
echo $this->name."我是父类的getName"."<br>";
}
protected function getSex(){
echo $this->sex."我是父类的getSex"."<br>";
}
private function getAge(){
echo $this->age."我是父类的getAge"."<br>";
}
}
class B extends A{
public $name='王五';
protected $sex='woman';
private $age='26';
public function getName(){
echo $this->name."我是子类的getName"."<br>";
}
protected function getSex(){
echo $this->sex."我是子类的getSex"."<br>";
}
private function getAge(){
echo $this->age."我是子类的getAge"."<br>";
}
public function getAll(){
$this->getName();
$this->getSex();
$this->getAge();
}
}
$a=new B();
$a->getAll();//王五我是子类的getName woman我是子类的getSex 26我是子类的getAge
echo "<br>";
?>小结:公有、受保护的属性重写是直接覆盖父类成员,私有属性不会被覆盖;公有、收保护的方法会被重写,但是私有方法不会被重写(私有方法本质没有被继承)。
2.子类重写父类方法的要求。
a. 子类重写父类的方法,控制权不能高于父类,即子类可以比父类更开放。
<?php
class Fu{
protected function show(){
echo __CLASS__,'<br/>';
}
}
class Zi extends Fu{
protected function show(){} //正确
public function show(){} //允许
private function show(){} //错误:控制权比父类更严格
}
?>b. PHP中重写要求子类重写父类方法的时候,必须保证与父类同名方法参数一致。
<?php
class Fu{
protected function show(){
echo __CLASS__,'<br/>';
}
}
class Zi extends Fu{
public function show(){}
public function show($a){} //错误,与父类同名方法不一致
}
?>c. 重写针对的是被继承的成员,父类私有方法不会被继承,因此不受要求b规定。
<?php
class Fu{
private function show(){
echo __CLASS__,'<br/>';
}
}
class Zi extends Fu{
private function show($name){ //不会报错,因为本质不存在重写(父类Fu::show没有被继承)
echo $name,'<br/>';
}
}
?> d.重写是指子类拥有特殊的情况,一般是需要在父类的基础上进行扩展,此时如果想要继续保证父类被重写的方法继续执行(默认永远只访问子类重写的新方法),需要在子类重写方法的时候使用parent关键字。
<?php
class Fu{
protected function show(){
echo __CLASS__,'<br/>';
}
}
class Zi extends Fu{
public function show(){
parent::show();
//扩展业务逻辑
echo __CLASS__,'<br/>';
}
}?> 小结:parent不能访问父类的属性,可以访问静态属性、静态方法、类常量和普通方法。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
workerman无法监听的解决办法:首先删除掉“workerman/workerman”;然后使用命令“workerman/workerman-for-win”;接着重新启动监听即可。
首先我详细说下这四个引入函数include()与require()的功能相同唯一不同:require()不管是否被执行,只要存在,php在执行前都会预引入,include()则是执行到该语句时才进行引入 include_once() 与require_once() 都是检测文件是否被引入,被引入则不会引入唯一不同: require_once()为无条件包含,顾名思义也就是引入后如遇
php构造方法__construct()的介绍:1、构造方法__construct()是一种结构特有的特殊方法。2、由系统规定,开发人员在定义时只需写一次,有构造方法的类在实例化对象后,对象自动调用。
在PHP编程中,当有一个四则运算的字符串表达式,要怎么编写函数来计算四则运算的结果呢?其实利用栈这种数据结构来计算表达式很赞,下面小编将为你分享PHP用函数如何实现四则运算的代码。
thinkphp基于的mvc分别是指:1、m是model的缩写,表示模型,用于数据处理;2、v是view的缩写,表示视图,由View类和模板文件组成;3、c是controller的缩写,表示控制器,用于逻辑处理。mvc设计模式是一种编程思想,是一种将应用程序的逻辑层和表现层进行分离的方法。
成为群英会员,开启智能安全云计算之旅
立即注册关注或联系群英网络
7x24小时售前:400-678-4567
7x24小时售后:0668-2555666
24小时QQ客服
群英微信公众号
CNNIC域名投诉举报处理平台
服务电话:010-58813000
服务邮箱:service@cnnic.cn
投诉与建议:0668-2555555
Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 ICP核准(ICP备案)粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008