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

isset($v) and print('true') or print('false'); 这样的写法对吗?

  •  
  •   Jat001 · 2013-11-12 21:01:19 +08:00 · 3161 次点击
    这是一个创建于 4023 天前的主题,其中的信息可能已经有所发展或是发生改变。

    if (isset($v)) print('true');
    else print('false');
    的结果一致,但不知道对不对,没见过类似的例子。
    9 条回复    1970-01-01 08:00:00 +08:00
    jybox
        1
    jybox  
       2013-11-12 21:47:48 +08:00
    and 优先级比 or 高,然后按照短路求值的规则,两种写法确实等价。
    用这种方式要注意第二个部分的表达式必须要为 ture 才行。

    这种写法因为太反人类确实比较少见,不过下面这种就比较常见了:

    mysql_query($query) or die(mysql_error());
    dorentus
        2
    dorentus  
       2013-11-12 21:57:38 +08:00
    单层双分支的话,还是用 isset($v) ? print('true') : print('false'); 吧。
    dorentus
        3
    dorentus  
       2013-11-12 21:58:05 +08:00
    print($isset($v) ? 'true' : 'false');
    Jat001
        4
    Jat001  
    OP
       2013-11-12 22:13:37 +08:00   ❤️ 1
    @jybox print() 的返回值是 1,exit() 没有返回值,但我试了 isset($v) and exit('true') or exit('false'); true 和 false 都能返回。
    raincious
        5
    raincious  
       2013-11-12 22:17:59 +08:00
    楼主不要这样写,这样会增加代码阅读的复杂程度,代码审核的同学不太方便。
    Jat001
        6
    Jat001  
    OP
       2013-11-12 22:33:29 +08:00
    @raincious 这才叫不方便!
    raincious
        7
    raincious  
       2013-11-12 22:53:21 +08:00
    @Jat001 这……是有人删除了\r和\n么?Wordpress的模板系统这么一看是在是太丧心病狂了啊。
    shiny
        8
    shiny  
       2013-11-12 22:57:13 +08:00
    一样的,不过是典型的不友善的写法,代码主要是为了写给人看的,只是顺便也能用机器执行而已。
    Discuz 里有差不多的东西,不过他们的源码教坏了很多 php 新手。
    ichou
        9
    ichou  
       2013-11-13 21:49:56 +08:00
    短路写法而已。。短路比起if其实优点蛮多的,但是你这种链式短路真心不推荐。。
    最简单原因:丑
    还是用三目运算吧
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5615 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 08:37 · PVG 16:37 · LAX 00:37 · JFK 03:37
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.