首先我知道这个问题已经围绕不止一次在这里:E_NOTICE:修复每一个问题真的有用吗?
但更多的,我解决所有E_NOTICEs(因为有人说你应该)越我注意到:
- 我微优化
- 其实我做更多的代码,使我的代码难于十个分量和慢
拿一个例子:
说使用MongoDB的PHP驱动你的,你必须在一个名为ts
内一类变种一个MongoDate
对象一个表示数据库集合中单个行的类。现在你访问这个变量,如:$obj->ts->sec
但PHP抛出一个合适的(E_NOTICE),因为在这种情况下ts
没有被定义为一个对象本身,因为这个特定的行没有ts
字段。所以你认为这是好的,如果它没有设置返回null,这是我们期望的行为,并且我会在解释器自己的机器人工作之外自己处理它(因为如果var是功能,则返回1970
null
或none-object
)。
但现在要修复E_NOTICE作为另一个开发人员真的希望我,因为有任何E_NOTICEs是terribad,并且它使代码变得更慢,不根据错误执行它。所以我做的$obj
类的新功能叫getTs
,我给它3条线路,从字面上做什么,但检查ts
var是一个MongoDate
对象并返回它,如果它是...
为什么?在应用程序本身的运行时间内,PHP不能在它的快速解释器中为我完成这项工作吗?我的意思是每一处我不得不为我的代码添加无用的凹凸,几乎空的函数来检测变量,我实际上只是用PHP自己处理的能力来返回null
或检查他们的instanceof
当我真的需要时(当它是至关重要的操作和行为的功能),并没有让我开始在isset()
s我已经添加了约300行isset()
s,它已经失控。我当然得让这个getTs
功能,因为你不能做的:
class obj{
public $ts = new MongoDate();
}
我要么必须存储__constructor
内的ts
(这我不是太高兴要么,我使用了很多)或者使用函数来检测它是否已设置(我现在所做的)。
我的意思我明白为什么我应该修正:
- 未定义瓦尔
- 分配未设置瓦尔的性质(
null
增值经销商) - 恒错误等
但是,如果你已经测试你的代码,你知道它是安全的,只会按照你想要的方式工作,修复所有的undefined index
或none-object
er RORS?是不是加了一堆isset()
s和2行函数来实际对你的代码进行微优化?
我已经做了一半的网站E_NOTICE兼容,实际上它使用更多的CPU,内存和现在时间后发现......所以真的有什么处理每一个E_NOTICE错误点,而不是仅仅是错误的呢?
感谢您的想法,
你不应该。相反,你应该处理异常。但是...欢迎来到PHP! – 2012-07-16 18:34:44
@ IgnacioVazquez-Abrams事实上,PHP应该是一种动态语言,但是修复所有这些'E_NOTICES'我认为至少有1000个人认为不要在他们的市场营销中宣传动态,但更多的是...... – Sammaye 2012-07-16 18:44:25
你'我们会发现PHP是90%的营销,9%的努力和1%的疯狂。 – 2012-07-16 18:46:38