PHP重写的定义是什么,怎么应用
Admin 2022-08-20 群英技术资讯 963 次浏览
这篇文章主要讲解了“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进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
本节将介绍PHP中文件是如何上传的。通过PHP,可以把文件上传到服务器。下文有实例供大家参考,对大家了解操作过程或相关知识有一定的帮助,而且实用性强,希望这篇文章能帮助大家,下面我们一起来了解看看吧。
php使用array_diff去除元素:1、array_diff() 函数用于比较两个(或更多个)数组的值,并返回差集。2、array_diff() 比较两个数组的值(key=>value 中的 value),并返回一个差集数组。
今天小编就为大家分享一篇实现laravel 插入操作日志到数据库的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
php接入workerman的方法:新建文件start.php,在此文件中创建一个Worker监听2346端口,使用websocket协议通讯即可在php中接入workerman,然后运行此文件即可在php中启动workerman。
php mysql中文乱码的解决办法:1、网页文件head设置编码;2、将PHP页面在保存的时候使用utf-8编码保存;3、在MYSQL中新建数据库的时候数据库选择UTF-8编码。
成为群英会员,开启智能安全云计算之旅
立即注册关注或联系群英网络
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