V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
feilengcui008
V2EX  ›  问与答

<?php echo '1'.print(3)+2

  •  
  •   feilengcui008 · 2014-12-05 22:09:13 +08:00 · 2271 次点击
    这是一个创建于 3643 天前的主题,其中的信息可能已经有所发展或是发生改变。
    输出结果及解释
    6 条回复    2014-12-06 01:15:52 +08:00
    heimonsy
        1
    heimonsy  
       2014-12-05 22:21:07 +08:00
    会解析成
    echo '1' . print 3 + 2

    参考php手册: http://php.net/manual/zh/function.print.php
    print 实际上不是一个函数(它是一个语言结构),因此你可以不必使用圆括号来括起它的参数列表
    Paranoid
        2
    Paranoid  
       2014-12-05 22:52:16 +08:00
    这种就是抖机灵

    会用在工程中么?
    leiliang
        3
    leiliang  
       2014-12-05 22:59:19 +08:00
    要看php引擎是怎么编译的以及对数据类型怎么转换的,这种东西,不深入到底层还真是说不清楚
    vibbow
        4
    vibbow  
       2014-12-06 00:05:05 +08:00
    运行结果居然是511?!
    gDD
        5
    gDD  
       2014-12-06 00:18:27 +08:00   ❤️ 2
    参考 @heimonsy 的链接,里面有这个一句:But since the parenthesis around the argument are not required, they are interpretet as part of the argument.

    也就是说,在这里[echo '1'.print(3)+2],print 后面的都被作为了 print 的参数,所以会被解析成

    echo '1' . (print 3 + 2)

    首先 print 部分被执行了,输出5
    由于print永远会返回1,这个1与字符串‘1’相加(.),成为了字符串‘11’
    这个字符串‘11‘被echo出来

    就是 @vibbow 的结果,显示为’511‘。
    yinxingren
        6
    yinxingren  
       2014-12-06 01:15:52 +08:00 via Android
    上次在回帖中看到@Sunyanzi 发了这道题,遂放本地调试了下学习。
    输出确是511
    int print(3+2) 这里打印5后还返回了1 .连接了echo的1和返回的1
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1259 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 18:12 · PVG 02:12 · LAX 10:12 · JFK 13:12
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.