在php交互环境中,如果已经有这样的定义:
<code>function a(){ return 'a'; } </code>
现在我发现原来的写错了,需要改动
<code> function a(){ return 'b'; } </code>
这个时候会报错, Fatal error: Cannot redeclare
如果你定义
<code>$b=1;</code>
再修改一次
<code>$b=2;</code>
php绝不会报错说,b已经被定义了,不可以再次redeclare
请问,把函数设计成不可以redeclare,道理何在?
我看了各位的答复,这个问题实际上是很普遍的,它会带来调试上的麻烦,我不知道各位如何在真实的项目环境中是如何解决的。
清让我们考虑项目场景,你写了一个函数来完成一项功能,一般不会一次就把这个函数写完美了,你需要测试吧。
我们导入它,require('myfun.php'),使用了后,发现要修改,你的打开myfun.php,进行修改,保存修改后,你的关闭上次的php -a环境,重新php -a ,然后再导入require('myfun.php')。
如果不关闭(或者说退出)php -a环境,再次导入修改后的myfun.php,会立即报错:Fatal error: Cannot redeclare。
php语言的这个特性导致调试麻烦,各位有无快捷的方法?
在php交互环境中,如果已经有这样的定义:
<code>function a(){ return 'a'; } </code>
现在我发现原来的写错了,需要改动
<code> function a(){ return 'b'; } </code>
这个时候会报错, Fatal error: Cannot redeclare
如果你定义
<code>$b=1;</code>
再修改一次
<code>$b=2;</code>
php绝不会报错说,b已经被定义了,不可以再次redeclare
请问,把函数设计成不可以redeclare,道理何在?
我看了各位的答复,这个问题实际上是很普遍的,它会带来调试上的麻烦,我不知道各位如何在真实的项目环境中是如何解决的。
清让我们考虑项目场景,你写了一个函数来完成一项功能,一般不会一次就把这个函数写完美了,你需要测试吧。
我们导入它,require('myfun.php'),使用了后,发现要修改,你的打开myfun.php,进行修改,保存修改后,你的关闭上次的php -a环境,重新php -a ,然后再导入require('myfun.php')。
如果不关闭(或者说退出)php -a环境,再次导入修改后的myfun.php,会立即报错:Fatal error: Cannot redeclare。
php语言的这个特性导致调试麻烦,各位有无快捷的方法?
能不能改下格式先?
对于弱类型语言来说,PHP函数重载,并不像一般的OOP那样。
因为函数重载必须满足两个条件:
1、函数参数的个数不一样。
2、参数的类型不一样。
这两点,PHP都没有办法满足,您可以对函数多添加参数,只是相当于多传了个临时变量。而弱类型本来就不区分,所以无法通过这些来实现。
http://blog.csdn.net/smartyid...
函数不能重复定义 -- 这点确实和js不一样。 js里面的函数其实就是一个变量,所以可以重新赋值。但是在php中,函数并不是相当于变量,而是一个符号或者一个常量。大概因为重复定义会容易引起误解所以不让重复定义。
...这是过程式的代码 没有重载概念吧。。
第一个方法加上
if ( ! function_exists('a')) {
<code>function a(){ return 'a'; }</code>
}
然后把第二个方法的引入写在第一个之前,貌似只能这样
谢邀。
我没有更便捷的方法,主要是很少有人用交互方式测试吧?退出php -a环境重新进又不麻烦...
很简单的测试模拟运行一下就行了,比如你可以用 https://glot.io/
这个真的不需要纠结,而且也不用去从这个层面去纠结语言是否给重载函数
你是特别喜欢php -a这个shell环境还是什么?
这种问题解决方案其实很多,最简单的比如你觉得这个环境调试不方便,那就编辑一个x.php文件,然后php x.php就一次性把你修改的代码结果输出了,也就起到了调试作用。
如果真的想用高级一点的debug方法还可以尝试xdebug
首先,绝大部分的语言都不支持的方法重定义,PHP自然也不例外。
其次,你的调试方法真的很奇怪,第一次见人用php -a来调试的,PHP有各种调试工具,也不差单元测试,你使用的php -a都不能算是调试。