• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

php中不同方法中同名方法的处理

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

近日查看codeigniter源码,发现其helper类可以自定义方法,从而对系统helper方法进行扩展或重写。

CI  herper类介绍http://codeigniter.org.cn/user_guide/general/helpers.html

对于类可以继承实现方法的重写或扩展,对于方法可以吗?于是做了一下尝试


创建两个引用文件,里面有一个同名方法。

include1.php

function testfun() {
	echo 'this is function 1';
}

include2.php

function testfun() {
	echo 'this is function 2';
}

调用脚本test.php
include './include2.php';
include './include1.php';
testfun ();

执行test.php时候系统报错:Fatal error: Cannot redeclare testfun() 

看来在引用多个脚本文件时候不能包含同名方法。否则在调用时候,php分不清执行哪个定义方法。

如果引用脚本都是类就不存在此问题,因为调用方法需要实例化类。

后来查看ci的实现原理,每个方法最外层嵌套 function_exists函数

这样两文件变为

include1.php

if (!function_exists ( 'testfun' )) {
	function testfun() {
		echo 'this is function 1';
	}
}

include2.php

if (! function_exists ( 'testfun' )) {
	function testfun() {
		echo 'this is function 2';
	}
}
这样再调用test.php时候,会输出  this is function 1.如此实现了方法的重写。

但是需要注意几点

1.注意引用的顺序,先引用的为准

2.引用过多文件时,不会出现方法覆盖,可能达不到想要的效果

   如果需要这种方法重写的话,需要清楚所引用的文件,ci中用框架规范了使用方法。




鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
phparray_push()发布时间:2022-07-10
下一篇:
腾讯云服务器php+mysq+nginx配置出现的问题及解决方法(亲测)发布时间:2022-07-10
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap