For*_*ien 23 php isset is-empty
注意 - 我几乎都知道empty()和isset(),我要问的是使用它们的最合适/最有效的方法.
我刚刚在php.net上看到这句话的empty()
参考:
如果变量不存在,则不会生成警告.这意味着 empty()基本上是!isset($ var)||的简洁等价物 $ var == false.
但同样,因为我现在主要在其他人的应用程序(独立项目,使用cms或甚至框架的网站)上工作很多次我见过人们写作:
if (isset ($var) && $var != '')
// or
if (isset ($var) && !empty($var))
Run Code Online (Sandbox Code Playgroud)
(主要使用$ _GET和$ _POST变量,但不仅如此)
据我了解手册,下面的代码段是等效的:
if (!empty($var))
Run Code Online (Sandbox Code Playgroud)
或者我错过了什么?技术上什么是检查变量存在的最佳方法?
我知道两个功能,他们的目的地.我只想知道是否empty()
需要检查是否为变量集和给定值.我知道它有效,但它是100%正确和安全吗?
exu*_*sum 19
生成的操作码 isset($var) && !empty($var)
line # * op fetch ext return operands
---------------------------------------------------------------------------------
3 0 > EXT_STMT
1 ISSET_ISEMPTY_VAR 12800000 ~0 !0
2 > JMPZ_EX ~0 ~0, ->6
3 > ISSET_ISEMPTY_VAR 11800000 ~1 !0
4 BOOL_NOT ~2 ~1
5 BOOL ~0 ~2
6 > FREE ~0
4 7 > RETURN 1
Run Code Online (Sandbox Code Playgroud)
从 !empty($var)
line # * op fetch ext return operands
---------------------------------------------------------------------------------
3 0 > EXT_STMT
1 ISSET_ISEMPTY_VAR 11800000 ~0 !0
2 BOOL_NOT ~1 ~0
3 FREE ~1
4 4 > RETURN 1
Run Code Online (Sandbox Code Playgroud)
所以是的它确实重复ISSET_ISEMPTY_VAR
但是!$empty
.它取决于传递的值,但它不存在顶部方式是一个操作码较少BOOL_NOT
.但如果确实存在,那么底层的方式就更快了.
虽然这不太可能成为任何应用程序的瓶颈
Nie*_*sol 14
empty
是足够的,但要注意其后果.
如果$var
是一0
,'0'
,false
,''
,[]
,null
(也许还有其他一些我忘了),那么它将被视为isset
肯定,但它也将是empty
.请注意,字符串'0'
是一个特殊的问题.
我个人只用isset
.如果一个值需要为非empty
,那么我将单独检查它并抛出一个错误(由适当的错误处理块捕获)以给用户一个简单,精确的"这个值是必需的"错误.
归档时间: |
|
查看次数: |
2941 次 |
最近记录: |