V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
benmaowang
V2EX  ›  程序员

PHP 怎么高效地判断一个变量是否有“可用”的值?

  •  
  •   benmaowang · 2015-09-30 13:47:02 +08:00 · 3708 次点击
    这是一个创建于 3152 天前的主题,其中的信息可能已经有所发展或是发生改变。
    对于一个给定的变量,怎么判断这个变量不是 [NULL ,未定义,定义但没赋值,空字符串,空数组]?
    我想了下,判断出来当然是可以的,但对这个世界上最好的语言来说太啰嗦了。
    那么有没有优雅的方法呢?
    18 条回复    2015-10-01 04:07:53 +08:00
    linauror
        1
    linauror  
       2015-09-30 13:54:54 +08:00
    $a = array(); // 可定义为 null,空字符串,空数组等
    if ($a) {
    echo 'success';
    }

    就一个 if ,够优雅吧
    abelyao
        2
    abelyao  
       2015-09-30 14:06:27 +08:00 via iPhone
    @linauror
    如果 $a = false 那么这里也不通过,但很多时候 false 是一个状态,并非无用值或空值。
    soudesuka
        3
    soudesuka  
       2015-09-30 14:06:45 +08:00
    isset($var) && $var
    wesley
        4
    wesley  
       2015-09-30 14:16:28 +08:00
    答案在这里:
    if ( empty($var)) {
    }
    linauror
        5
    linauror  
       2015-09-30 14:17:23 +08:00
    if ($a || $a === false || $a === 0)
    好像没那么优雅了,考虑到 false 和 0 的话
    flydogs
        6
    flydogs  
       2015-09-30 14:20:22 +08:00
    "有用"还是“没有用”,这个要看实际情况的
    null ,空,空数组等等 有些情况也是有用的。

    所以还是乖乖自己写个 function 在里面列举一下,其他地方调用吧。
    realpg
        7
    realpg  
       2015-09-30 14:23:01 +08:00
    empty
    moro
        8
    moro  
       2015-09-30 14:23:46 +08:00
    empty +1
    phithon
        9
    phithon  
       2015-09-30 14:26:45 +08:00
    empty +2
    linauror
        10
    linauror  
       2015-09-30 14:27:31 +08:00
    empty 也并没有排除掉 0 和 false
    iyaozhen
        11
    iyaozhen  
       2015-09-30 14:38:40 +08:00
    这个还是看需求吧。你要干什么?
    zonghua
        12
    zonghua  
       2015-09-30 15:09:15 +08:00
    面向过程的 PHP 。。。
    anubiskong
        13
    anubiskong  
       2015-09-30 15:36:36 +08:00
    换语言^_^
    php230
        14
    php230  
       2015-09-30 16:27:10 +08:00
    就一个 if ,够优雅吧
    nanwangnongfu
        15
    nanwangnongfu  
       2015-09-30 16:35:09 +08:00
    在全局变量$GLOBALs 数组里查找,如果存在说明注册了
    zjqzxc
        16
    zjqzxc  
       2015-09-30 20:35:44 +08:00
    php 作为最好的语言,当然一个 if($a)就搞定啦。
    不过,考虑到 undefine 这种情况,建议独立检查 isset 。

    话说,楼主变量使用前不声明么,干嘛要考虑未定义呢。。如果是函数返回值返回空、 0 、 false 、空数组都有可能,未定义就不太好了吧。
    综上,变量先声明再使用 if 。
    zhujunsan
        17
    zhujunsan  
       2015-09-30 22:46:53 +08:00 via Android
    http://php.net/manual/zh/types.comparisons.php
    附上 PHP 真值表,楼主挑合适的用
    xifangczy
        18
    xifangczy  
       2015-10-01 04:07:53 +08:00
    @linauror empty 连 '0' 都会看错空
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2246 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 01:17 · PVG 09:17 · LAX 18:17 · JFK 21:17
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.