PHP面向对象继承的详细解释(优化和减少代码重复)

PHP面向对象继承的详细解释(优化和减少代码重复)
本文演示了PHP面向对象的继承用法:

继承

先看两门课。
< PHP
类cdproduct {
公共playlength美元; / /播放时间
公开产权;
公共producermainname美元;
公共producerfirstname美元;
公共价格;
功能__construct美元美元(标题名,
mainname美元,美元价格,
playlength美元){
此$ = title;
美元-> producerfirstname = $名;
美元-> producermainname = $ mainname;
美元=价格=价格;
美元-> playlength = $ playlength;
}
功能getplaylength(){
返回playlength美元->;
}
功能getsummaryline(){
基地={美元美元->标题}({美元-> producermainname },);
基地= {美元美元-> producerfirstname });
$基地:播放时间- {美元-> playlength } ;
返回$基础;
}
功能getproducer(){
返回{美元-> producerfirstname }。
{美元-> producermainname };
}
}
类bookproduct {
公共numpages美元; / /看网页
公开产权;
公共producermainname美元;
公共producerfirstname美元;
公共价格;
功能__construct美元美元(标题名,
mainname美元,美元价格,
numpages美元){
此$ = title;
美元-> producerfirstname = $名;
美元-> producermainname = $ mainname;
美元=价格=价格;
美元-> numpages = $ numpages;
}
功能getnumberofpages(){
返回numpages美元->;
}
功能getsummaryline(){
基地={美元美元->标题}({美元-> producermainname },);
基地= {美元美元-> producerfirstname });
为基础:页面计数{美元-> numpages } ;
返回$基础;
}
功能getproducer(){
返回{美元-> producerfirstname }。
{美元-> producermainname };
}
}
产品=新cdproduct美元(CD1
打印产品-> getsummaryline(美元);
打印
产品=新bookproduct美元(1
打印产品-> getsummaryline(美元);
打印;
>

输出:

CD1(bobbleson,鲍伯):比赛时间50

第一册(哈勒尔森、Harry):页数30

回顾:这两个类,代码重复性太高,相同,并且有差异。最好使用继承来简化过程。

使用继承处理
< PHP
类shopproduct {
公共numpages美元;
公共playlength美元;
公开产权;
公共producermainname美元;
公共producerfirstname美元;
公共价格;
功能__construct美元美元(标题名,
mainname美元,美元价格,
numpages = 0美元美元,playlength = 0){
此$ = title;
美元-> producerfirstname = $名;
美元-> producermainname = $ mainname;
美元=价格=价格;
美元-> numpages = $ numpages;
美元-> playlength = $ playlength;
}
功能getproducer(){
返回{美元-> producerfirstname }。
{美元-> producermainname };
}
功能getsummaryline(){
基地=美元美元->标题({美元-> producermainname },);
基地= {美元美元-> producerfirstname });
返回$基础;
}
}
类cdproduct延伸shopproduct {
功能(getplaylength){ / /增加自己的方式
返回playlength美元->;
}
功能(getsummaryline){父类方法 / /转化
基地={美元美元->标题}({美元-> producermainname },);
基地= {美元美元-> producerfirstname });
$基地:播放时间- {美元-> playlength } ;
返回$基础;
}
}
类bookproduct延伸shopproduct {
功能getnumberofpages(){
返回numpages美元->;
}
功能getsummaryline(){
基地={美元美元->标题}({美元-> producermainname },);
基地= {美元美元-> producerfirstname });
为基础:页面计数{美元-> numpages } ;
返回$基础;
}
}
产品=新cdproduct美元(CD1
打印产品-> getsummaryline(美元);
打印;
产品=新bookproduct美元(1
打印产品-> getsummaryline(美元);
打印;
>

输出:

CD1(bobbleson,鲍伯):比赛时间50

第一册(哈勒尔森、Harry):页数30

点评:继承治疗是很好的解决差异性、兼容性的问题。

进一步优化
< PHP
类shopproduct {
进出公共财产
公开产权;
公共producermainname美元;
公共producerfirstname美元;
公共价格;
功能__construct美元美元(标题名,
mainname美元,美元价格){
此$ = title;
美元-> producerfirstname = $名;
美元-> producermainname = $ mainname;
美元=价格=价格;
}
功能getproducer(){
返回{美元-> producerfirstname }。
{美元-> producermainname };
}
功能getsummaryline(){
基地={美元美元->标题}({美元-> producermainname },);
基地= {美元美元-> producerfirstname });
返回$基础;
}
}
类cdproduct延伸shopproduct {
自己的唯一属性
公共playlength美元;
功能__construct美元美元(标题名,
mainname美元美元美元,价格,playlength){
家长::__construct美元美元(标题名,
mainname美元,美元价格); / /继承父类的构造函数
美元-> playlength = $ playlength; / /属性自己专有的
}
功能getplaylength(){
返回playlength美元->;
}
功能getsummaryline(){
基地={美元美元->标题}({美元-> producermainname },);
基地= {美元美元-> producerfirstname });
$基地:播放时间- {美元-> playlength } ;
返回$基础;
}
}
类bookproduct延伸shopproduct {
公共numpages美元;
功能__construct美元美元(标题名,
mainname美元美元美元,价格,numpages){
家长::__construct美元美元(标题名,
mainname美元,美元价格);
美元-> numpages = $ numpages;
}
功能getnumberofpages(){
返回numpages美元->;
}
功能getsummaryline(){
基地=美元美元->标题(美元-> producermainname,);
基地美元美元-> producerfirstname);
基地:页面计数美元美元-> numpages ;
返回$基础;
}
}
产品=新cdproduct美元(CD1
打印产品-> getsummaryline(美元);
打印;
产品=新bookproduct美元(1
打印产品-> getsummaryline(美元);
打印;
>

输出:

CD1(bobbleson,鲍伯):比赛时间50

第一册(哈勒尔森、Harry):页数30

复习:常见的属性是在父类中,将其他个性属性放在自己的类中,并设置自己的构建方法,继承父类的构造方法。

父类的进一步继承
< PHP
类shopproduct {
公开产权;
公共producermainname美元;
公共producerfirstname美元;
公共价格;
功能__construct美元美元(标题名,
mainname美元,美元价格){
此$ = title;
美元-> producerfirstname = $名;
美元-> producermainname = $ mainname;
美元=价格=价格;
}
功能getproducer(){
返回{美元-> producerfirstname }。
{美元-> producermainname };
}
功能getsummaryline(){
基地={美元美元->标题}({美元-> producermainname },);
基地= {美元美元-> producerfirstname });
返回$基础;
}
}
类cdproduct延伸shopproduct {
公共playlength美元;
功能__construct美元美元(标题名,
mainname美元美元美元,价格,playlength){
家长::__construct美元美元(标题名,
mainname美元,美元价格);
美元-> playlength = $ playlength;
}
功能getplaylength(){
返回playlength美元->;
}
功能getsummaryline(){
母::getsummaryline美元基数=();
$基地:播放时间- {美元-> playlength } ;
返回$基础;
}
}
类bookproduct延伸shopproduct {
公共numpages美元;
功能__construct美元美元(标题名,
mainname美元美元美元,价格,numpages){
家长::__construct美元美元(标题名,
mainname美元,美元价格);
美元-> numpages = $ numpages;
}
功能getnumberofpages(){
返回numpages美元->;
}
功能getsummaryline(){
母::getsummaryline美元基数=();
为基础:页面计数{美元-> numpages } ;
返回$基础;
}
}
产品=新cdproduct美元(CD1
打印产品-> getsummaryline(美元);
打印;
产品=新bookproduct美元(1
打印产品-> getsummaryline(美元);
打印;
>

输出:

CD1(bobbleson,鲍伯):比赛时间50

第一册(哈勒尔森、Harry):页数30

点评:同样的结果,优化和优化可以优化。这是继承父类的方法。家长::getsummaryline()。但这是用的比较少。

继续添加一些有趣的内容
< PHP
类shopproduct {
私人产权;
私人折扣= 0;
私人producermainname美元;
私人producerfirstname美元;
保护价;
功能__construct美元美元(标题名,
mainname美元,美元价格){
此$ = title;
美元-> producerfirstname = $名;
美元-> producermainname = $ mainname;
美元=价格=价格;
}
功能setdiscount($num){
这个折扣;
}
功能getPrice(){
退货(此价格>价格-折扣);
}
功能getproducer(){
返回{美元-> producerfirstname }。
{美元-> producermainname };
}
功能getsummaryline(){
基地={美元美元->标题}({美元-> producermainname },);
基地= {美元美元-> producerfirstname });
返回$基础;
}
}
类cdproduct延伸shopproduct {
公共playlength美元;
功能__construct美元美元(标题名,
mainname美元美元美元,价格,playlength){
家长::__construct美元美元(标题名,
mainname美元,美元价格);
美元-> playlength = $ playlength;
}
功能getplaylength(){
返回playlength美元->;
}
功能getsummaryline(){
母::getsummaryline美元基数=();
$基地:播放时间- {美元-> playlength } ;
返回$基础;
}
}
类bookproduct延伸shopproduct {
公共numpages美元;
功能__construct美元美元(标题名,
mainname美元美元美元,价格,numpages){
家长::__construct美元美元(标题名,
mainname美元,美元价格);
美元-> numpages = $ numpages;
}
功能getPrice(){
返回这个价格;
}
功能getnumberofpages(){
返回numpages美元->;
}
功能getsummaryline(){
母::getsummaryline美元基数=();
为基础:页面计数{美元-> numpages } ;
返回$基础;
}
}
产品=新cdproduct美元(CD1
$产品-> setdiscount(3);
打印产品-> getsummaryline(美元);
打印;
打印价格:{ $产品-> getPrice()} ;
产品=新bookproduct美元(1
$产品-> setdiscount(3); / /折扣书是无效的
打印产品-> getsummaryline(美元);
打印;
打印价格:{ $产品-> getPrice()} ;
>

输出:

CD1(bobbleson,鲍伯):比赛时间50

价格:1

第一册(哈勒尔森、Harry):页数30

价格:4

点评:家长说一个折扣,这本书继承后的getPrice方法进行了改进,所以折扣不适用于书。

私有化的属性,设置和通过方法获得
< PHP
类shopproduct {
私有化,通过设定和收购的方法
私人产权;
私人producermainname美元;
私人producerfirstname美元;
保护价;
私人折扣= 0;
公共功能__construct美元美元(标题名,
mainname美元,美元价格){
此$ = title;
美元-> producerfirstname = $名;
美元-> producermainname = $ mainname;
美元=价格=价格;
}
公共功能getproducerfirstname(){
返回producerfirstname美元->;
}
公共功能getproducermainname(){
返回producermainname美元->;
}
公共功能setdiscount($num){
这个折扣;
}
公共功能getdiscount(){
退货折扣;
}
公共职能和(){
返回$ >标题;
}
公共职能getPrice(){
退货(此价格>价格-折扣);
}
公共功能getproducer(){
返回{美元-> producerfirstname }。
{美元-> producermainname };
}
公共功能getsummaryline(){
基地={美元美元->标题}({美元-> producermainname },);
基地= {美元美元-> producerfirstname });
返回$基础;
}
}
类cdproduct延伸shopproduct {
私人playlength = 0美元;
公共功能__construct美元美元(标题名,
mainname美元美元美元,价格,playlength){
家长::__construct美元美元(标题名,
mainname美元,美元价格);
美元-> playlength = $ playlength;
}
公共功能getplaylength(){
返回playlength美元->;
}
公共功能getsummaryline(){
母::getsummaryline美元基数=();
$基地:播放时间- {美元-> playlength } ;
返回$基础;
}
}
类bookproduct延伸shopproduct {
私人numpages = 0美元;
公共功能__construct美元美元(标题名,
mainname美元美元美元,价格,numpages){
家长::__construct美元美元(标题名,
mainname美元,美元价格);
美元-> numpages = $ numpages;
}
公共功能getnumberofpages(){
返回numpages美元->;
}
公共功能getsummaryline(){
母::getsummaryline美元基数=();
为基础:页面计数{美元-> numpages } ;
返回$基础;
}
公共职能getPrice(){
返回这个价格;
}
}
产品=新cdproduct美元(CD1
打印产品-> getsummaryline(美元)。;
产品=新bookproduct美元(1
打印产品-> getsummaryline(美元)。;
>

输出:

CD1(bobbleson,鲍伯):比赛时间50

第一册(哈勒尔森、Harry):页数30

评论:这将进一步私有化,得到它的唯一方法就是得到它,这保证了安全性。

更多有关PHP相关内容的感兴趣的读者可以查看主题:PHP面向对象编程教程

希望本文能对PHP程序设计有所帮助。
免责声明:本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕。
相关文章
返回顶部