好得很程序员自学网
  • 首页
  • 后端语言
    • C#
    • PHP
    • Python
    • java
    • Golang
    • ASP.NET
  • 前端开发
    • Angular
    • react框架
    • LayUi开发
    • javascript
    • HTML与HTML5
    • CSS与CSS3
    • jQuery
    • Bootstrap
    • NodeJS
    • Vue与小程序技术
    • Photoshop
  • 数据库技术
    • MSSQL
    • MYSQL
    • Redis
    • MongoDB
    • Oracle
    • PostgreSQL
    • Sqlite
    • 数据库基础
    • 数据库排错
  • CMS系统
    • HDHCMS
    • WordPress
    • Dedecms
    • PhpCms
    • 帝国CMS
    • ThinkPHP
    • Discuz
    • ZBlog
    • ECSHOP
  • 高手进阶
    • Android技术
    • 正则表达式
    • 数据结构与算法
  • 系统运维
    • Windows
    • apache
    • 服务器排错
    • 网站安全
    • nginx
    • linux系统
    • MacOS
  • 学习教程
    • 前端脚本教程
    • HTML与CSS 教程
    • 脚本语言教程
    • 数据库教程
    • 应用系统教程
  • 新技术
  • 编程导航
    • 区块链
    • IT资讯
    • 设计灵感
    • 建站资源
    • 开发团队
    • 程序社区
    • 图标图库
    • 图形动效
    • IDE环境
    • 在线工具
    • 调试测试
    • Node开发
    • 游戏框架
    • CSS库
    • Jquery插件
    • Js插件
    • Web框架
    • 移动端框架
    • 模块管理
    • 开发社区
    • 在线课堂
    • 框架类库
    • 项目托管
    • 云服务

当前位置:首页>后端语言>PHP
<tfoot draggable='sEl'></tfoot>

php重写类函数 php函数重载

很多站长朋友们都不太清楚php重写类函数,今天小编就来给大家整理php重写类函数,希望对各位有所帮助,具体内容如下:

本文目录一览: 1、 PHP方法重写 2、 php怎么方法重载 3、 如何用自定义函数文件对另一个php里的函数重写 PHP方法重写

直接extends类A然后同名函数覆盖就行了

调用的就是重写后的test

如果要调用重写前的用parent,例:parent::test();

php怎么方法重载

php面向对象(OOP)编程完全教程:12.重载新的方法

在学习PHP 这种语言中你会发现, PHP中的方法是不能重载的, 所谓的方法重载就是定义相同的方法名,通过“参数的个数“不同或“参数的类型“不同,来访问我们的相同方法名的不同方法。但是因为PHP是弱类型的语言, 所以在方法的参数中本身就可以接收不同类型的数据,又因为PHP的方法可以接收不定个数的参数,所以通过传递不同个数的参数调用不相同方法名的不同方法也是不成立的。所以在PHP里面没有方法重载。不能重载也就是在你的项目中不能定义相同方法名的方法。另外,因为PHP没有名子空间的概念,在同一个页面和被包含的页面中不能定义相同名称的方法, 也不能定义和PHP给我提供的方法的方法重名,当然在同一个类中也不能定义相同名称的方法。

我们这里所指的重载新的方法所指的是什么呢?其实我们所说的重载新的方法就是子类覆盖父类的已有的方法,那为什么要这么做呢?父类的方法不是可以继承过来直接用吗?但有一些情况是我们必须要覆盖的,比如说我们前面提到过的例子里面, “Person”这个人类里面有一个“说话”的方法,所有继承“Person”类的子类都是可以“说话”的, 我们“Student”类就是“Person”类的子类,所以“Student”的实例就可以“说话“了, 但是人类里面“说话”的方法里面说出的是“Person”类里面的属性, 而“Student”类对“Person”类进行了扩展,又扩展出了几个新的属性,如果使用继承过来的“say()”说话方法的话,只能说出从“Person”类继承过来的那些属性,那么新扩展的那些属性使用这个继承过来的“say()”的方法就说不出来了,那有的人就问了,我在“Student”这个子类中再定义一个新的方法用于说话,说出子类里面所有的属性不就行了吗?一定不要这么做, 从抽象的角度来讲, 一个“学生”不能有两种“说话”的方法,就算你定义了两个不同的说话的方法,可以实现你想要的功能,被继承过来的那个“说话“方法可能没有机会用到了,而且是继承过来的你也删不掉。这个时候我们就要用到覆盖了。

虽然说在PHP里面不能定义同名的方法, 但是在父子关系的两个类中,我们可以在子类中定义和父类同名的方法,这样就把父类中继承过来的方法覆盖掉了。

代码

<?

//定义一个"人"类做为父类

class Person

{

//下面是人的成员属性

var $name; //人的名子

var $sex; //人的性别

var $age; //人的年龄

//定义一个构造方法参数为属性姓名$name、性别$sex和年龄$age进行赋值

function __construct($name, $sex, $age)

{

$this->name=$name;

$this->sex=$sex;

$this->age=$age;

}

//这个人可以说话的方法, 说出自己的属性

function say()

{

echo "我的名子叫:".$this->name." 性别:".$this->sex." 我的年龄是:".$this->age;

}

}

class Student extends Person

{

var $school; //学生所在学校的属性

//这个学生学习的方法

function study()

{

echo "我的名子叫:".$this->name." 我正在".$this->school." 学习";

}

//这个学性可以说话的方法, 说出自己所有的属性,覆盖了父类的同名方法

function say()

{

echo "我的名子叫:".$this->name." 性别:".$this->sex." 我的年龄是:".$this->age."我在".$this->school."上学;

}

}

?>

上面的例子, 我们就在“Student”子类里覆盖了继承父类里面的”say()”的方法,通过覆盖我们就实现了对“方法”扩展。

但是,像这样做虽然解决了我们上面说的问题,但是在实际开发中,一个方法不可能就一条代码或是几条代码,比如说“Person”类里面的“say()”方法有里面有100条代码,如果我们想对这个方法覆盖保留原有的功能外加上一点点功能,就要把原有的100条代码重写一次, 再加上扩展的几条代码,这还算是好的,而有的情况,父类中的方法是看不见原代码的,这个时候你怎么去重写原有的代码呢?我们也有解决的办法,就是在子类这个方法中可以调用到父类中被覆盖的方法, 也就是把被覆盖的方法原有的功能拿过来再加上自己的一点功能,可以通过两种方法实现在子类的方法中调用父类被覆盖的方法:

一种是使用父类的“类名::“来调用父类中被覆盖的方法;

一种是使用“parent::”的方试来调用父类中被覆盖的方法;

代码

class Student extends Person

{

var $school; //学生所在学校的属性

//这个学生学习的方法

function study()

{

echo "我的名子叫:".$this->name." 我正在".$this->school." 学习";

}

//这个学性可以说话的方法, 说出自己所有的属性,覆盖了父类的同名方法

function say()

{

//使用父类的"类名::"来调用父类中被覆盖的方法;

// Person::say();

//或者使用"parent::"的方试来调用父类中被覆盖的方法;

parent::say();

//加上一点自己的功能

echo "我的年龄是:".$this->age."我在".$this->school."上学.";

}

}

现在用两种方式都可以访问到父类中被覆盖的方法,我们选那种方式最好呢?用户可能会发现自己写的代码访问了父类的变量和函数。如果子类非常精炼或者父类非常专业化的时候尤其是这样。 不要用代码中父类文字上的名字,应该用特殊的名字 parent,它指的就是子类在 extends 声明中所指的父类的名字。这样做可以避免在多个地方使用父类的名字。如果继承树在实现的过程中要修改,只要简单地修改类中 extends 声明的部分。

同样,构造方法在子类中如果没有声明的话,也可以使用父类中的构造方法,如果子类中重新定义了一个构造方法也会覆盖掉父类中的构造方法,如果想使用新的构造方法为所有属性赋值也可以用同样的方式。

代码

class Student extends Person

{

var $school; //学生所在学校的属性

function __construct($name, $sex, $age, $school)

{

//使用父类中的方法为原有的属性赋值

parent::__construct($name, $sex, $age);

$this->school=$school;

}

//这个学生学习的方法

function study()

{

echo "我的名子叫:".$this->name." 我正在".$this->school." 学习";

}

//这个人可以说话的方法, 说出自己的属性

function say()

{

parent::say();

//加上一点自己的功能

echo "我的年龄是:".$this->age."我在".$this->school."上学.";

}

}

如何用自定义函数文件对另一个php里的函数重写

举个例子。

test/b.php

namespace testb;

function test(){

return 'b.php';

}

test/c.php

namespace testc;

function test(){

return 'c.php';

}

test/a.php 来调用

include('b.php');

include('c.php');

echo \testb\test();

echo \testc\test();

关于php重写类函数的介绍到此就结束了,不知道本篇文章是否对您有帮助呢?如果你还想了解更多此类信息,记得收藏关注本站,我们会不定期更新哦。

查看更多关于php重写类函数 php函数重载的详细内容...

声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://www.haodehen.cn/did211424
更新时间:2023-05-03   阅读:21次

上一篇: 网站采集源码php php采集网页数据

下一篇:php截取数字 php截取字符

相关资讯

最新资料更新

  • 1.phpvc6vc9的简单介绍
  • 2.智能朗读系统php 智能ai朗读
  • 3.phprsa密钥拼接 rsa加密解密
  • 4.接口的继承php 接口的继承和实现
  • 5.php获取服务器环境 php获取服务器状态
  • 6.学校php培训机构 php培训学校是什么意思
  • 7.zendphp调试 调试教程
  • 8.apexphp辅助 apex wr辅助
  • 9.包含catflag.php的词条
  • 10.php开发宝典 php7开发宝典pdf下载
  • 11.无法使用curlphp 无法使用此地区的账号登陆
  • 12.php视频直播源码 php直播源码免费
  • 13.mk_dirphp mkdirphp
  • 14.php项目详解 php项目总结
  • 15.phpapp页面 php app
  • 16.php降低curl版本 php怎么升级版本
  • 17.erpphp源码下载 thinkphp erp源码
  • 18.php开启sslopen php开启gd库
  • 19.php正则引号 phpemail正则
  • 20.php汉字搜索 php 搜索字符串

CopyRight:2016-2025好得很程序员自学网 备案ICP:湘ICP备09009000号-16 http://www.haodehen.cn
本站资讯不构成任何建议,仅限于个人分享,参考须谨慎!
本网站对有关资料所引致的错误、不确或遗漏,概不负任何法律责任。
本网站刊载的所有内容(包括但不仅限文字、图片、LOGO、音频、视频、软件、程序等)版权归原作者所有。任何单位或个人认为本网站中的内容可能涉嫌侵犯其知识产权或存在不实内容时,请及时通知本站,予以删除。

网站内容来源于网络分享,如有侵权发邮箱到:kenbest@126.com,收到邮件我们会即时下线处理。
网站框架支持:HDHCMS   51LA统计 百度统计
Copyright © 2018-2025 「好得很程序员自学网」
[ SiteMap ]