我只是想优化我的代码。
我需要使用数据库中的数据预填充表单,我需要检查变量是否存在以填充文本框(我不喜欢隐藏@
错误)。
表单非常长,然后我需要多次检查变量是否存在。
以下两个中哪个更快?
if (isset ($item))
if ($item_exists==true)
甚至
if ($item_exists===true)
答案 0 :(得分:26)
使用for
循环重复10000000次相同的脚本:
if (isset ($item))
2.25843787193 if ($item_exists==true)
6.25483512878 if ($item_exists===true)
5.99481105804 所以我可以告诉isset
肯定会更快。
答案 1 :(得分:11)
在这种情况下,您不应该首先询问性能,而应该询问正确性。因为isset
的行为不像布尔转换并且与 true 比较(参见type comparison table)。特别是值""
(空字符串),array()
(空数组),false
,0
和"0"
(0
作为字符串)处理方式不同。
答案 2 :(得分:7)
我确信性能存在差异;我确定它已在某处进行了基准测试;但我也确定它对于现实世界的目的来说根本不重要。任何可实现的增益都在这里以毫秒为单位,更重要的是代码的可读性,以及避免警告(无论是否输出,都会产生性能)。
如果您无法确定在访问它时设置了它,则可能需要isset
。如果===
总是一个布尔值,则不需要类型安全比较$item_exists
,但它也不会有害。因此,根据您的情况,您可能需要
if ((isset($item)) and ($item_exists === true))
答案 3 :(得分:1)
要回答,最有可能是isset()和“===”将是最快的,因为他们只检查一个条件,其中==检查多个条件并且更慢。我没有正式测试过这个,但我认为是对的。 @Pekka也是正确的,如果你想要优化,这些真的不会在你做的地方。因为它可能需要数千次调用才能注意到几毫秒的差异。
答案 4 :(得分:-1)
只有一种方法可以优化代码,称为“分析”。首先你必须知道代码的哪个部分需要优化。然后才运行测试,找到解决方案等。
Marcx的答案中的“盘旋”方法也很糟糕。如果您想测试任何代码是否真正有所不同,请使用Apache基准实用程序从浏览器的角度对其进行测试。
答案 5 :(得分:-1)
我会建议以下替代方案:
if (@$item)
if (@$item_exists)