首先,我知道这个问题在这里不止一次出现:
但是我修复所有 E_NOTICE 的次数越多(正如人们所说的那样),我越注意到:
- 我正在微优化
- 我实际上正在编写更多代码并使我的代码更难维护和更慢
举个例子:
假设您使用 MongoDB PHP 驱动程序,并且您有一个MongoDate
在类中命名的类 var 中的对象,ts
该类表示数据库中集合中的单行。现在你像这样访问这个变量:$obj->ts->sec
但是 PHP 抛出一个 fit (E_NOTICE) 因为ts
在这种情况下它本身没有定义为一个对象,因为这个特定的行没有一个ts
字段。所以你认为这没问题,这是期望的行为,如果它没有设置返回 null 并且我会在解释器自己的机器人工作之外自己处理它(因为你将它包装在一个date()
函数中,1970
如果 var 是null
或none-object
)。
但是现在要修复那个 E_NOTICE,因为另一个开发人员真的希望我这样做,因为拥有任何 E_NOTICE 是非常糟糕的,并且它会使代码变慢而不是根据错误来执行它。$obj
因此,我在名为的类中创建了一个新函数,getTs
并给它 3 行,实际上什么都不做,只是检查ts
var 是否是一个MongoDate
对象,如果是则返回它......
为什么?PHP 不能在其更快的解释器中为我做到这一点,而不是在应用程序本身的运行时中做到这一点吗?我的意思是我必须在我的代码中添加无用的颠簸的每个地方,几乎是空函数来检测我实际上只是用 PHP 自己处理的变量,当我真正需要时返回null
或检查它们instanceof
(当它对操作和所述函数的行为)并且不要让我开始使用isset()
s 我已经添加了大约 300 行isset()
s,它已经失控了。我当然必须实现这个getTs
功能,因为你不能这样做:
class obj{
public $ts = new MongoDate();
}
我要么必须将其存储ts
在其中__constructor
(我对此也不太满意,我正在使用很多魔法),要么使用一个函数来检测它是否已设置(我现在这样做)。
我的意思是我明白为什么我应该修复:
- 未定义的变量
- 分配未设置变量 (
null
vars)的属性 - 不断的错误等
但是,如果您已经测试过您的代码并且您知道它是安全的并且只会按照您希望的方式工作,那么修复所有的undefined index
ornone-object
错误有什么意义呢?在你的代码中添加一堆isset()
s 和 2 行函数实际上不是微优化吗?
在使我的一半站点符合 E_NOTICE 后,我注意到实际上它现在使用了更多的 CPU、内存和时间……那么处理每个 E_NOTICE 错误而不仅仅是那些错误的真正意义何在?
谢谢你的想法,