gpt4 book ai didi

isset - PHP : suppress warnings with '@' or run extra checks with isset()? 哪个更好

转载 作者:可可西里 更新时间:2023-10-31 23:02:22 26 4
gpt4 key购买 nike

例如,如果我实现一些简单的对象缓存,哪种方法更快?

1. return isset($cache[$cls]) ? $cache[$cls] : $cache[$cls] = new $cls;

2. return @$cache[$cls] ?: $cache[$cls] = new $cls;

我在某处读到 @ 需要很长时间才能执行(我想知道为什么),尤其是当警告/通知实际上被发出和抑制时。 isset() 另一方面意味着额外的散列查找。那么哪个更好,为什么?

我确实希望在开发和生产服务器上全局保持 E_NOTICE。

最佳答案

我不会担心哪种方法更快。那是一个微优化。我会更担心哪个代码更易读,编码实践更好。

与第二个选项相比,我当然更喜欢您的第一个选项,因为您的意图更加清晰。此外,最好通过始终显式测试变量来避免边缘条件问题,以确保您得到您期望得到的结果。例如,如果 $cache[$cls] 中存储的类不是 $cls 类型怎么办?

就个人而言,如果我通常不希望 $cache 上的索引被取消设置,那么我也会将错误处理放在那里而不是使用三元操作。如果我可以合理地预期该索引会定期取消设置,那么我会让类 $cls 表现得像一个单例,并让你的代码类似于

return $cls::get_instance();

关于isset - PHP : suppress warnings with '@' or run extra checks with isset()? 哪个更好,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12733666/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com