V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
xiasix
V2EX  ›  程序员

so php 单引号快还是双引号快?

  •  
  •   xiasix · Sep 28, 2013 · 5518 views
    This topic created in 4606 days ago, the information mentioned may be changed or developed.
    http://www.metamorphosite.com/php-benchmarks-loops-arrays
    单纯的字符串的时候 他说是双引号快点
    so 自己写了个测了一下,php5.5 mac系统 终端下运行
    <?php
    $t1 = microtime(true);
    $i = 1;

    while ($i < 1000000) {
    $text = 'das;lfkjasd;lfkjads;lfkjasdl;fkjasdgnafdgljadhsfl;kadsfmasdl;gjkasdfio;mads;klgads;lfgkjads;fkljagl;k';

    ++$i;
    }

    $t2 = microtime(true);
    echo (($t2 - $t1) * 1000) . 'ms' . PHP_EOL;
    $i = 1;
    while ($i < 1000000) {
    $text = "das;lfkjasd;lfkjads;lfkjasdl;fkjasdgnafdgljadhsfl;kadsfmasdl;gjkasdfio;mads;klgads;lfgkjads;fkljagl;k";

    ++$i;
    }

    $t3 = microtime(true);
    echo (($t3 - $t2) * 1000) . 'ms'.PHP_EOL;
    结果
    bogon:~ kele$ php www/1.php
    86.992979049683ms
    87.911128997803ms
    bogon:~ kele$ php www/1.php
    87.116956710815ms
    88.299036026001ms
    bogon:~ kele$ php www/1.php
    89.183807373047ms
    87.899208068848ms
    bogon:~ kele$ php www/1.php
    87.803840637207ms
    88.411092758179ms
    bogon:~ kele$ php www/1.php
    87.093114852905ms
    88.102102279663ms
    bogon:~ kele$ php www/1.php
    88.034868240356ms
    88.240146636963ms
    bogon:~ kele$ php www/1.php
    88.271856307983ms
    88.357210159302ms
    bogon:~ kele$ php www/1.php
    87.208032608032ms
    86.41791343689ms
    22 replies    1970-01-01 08:00:00 +08:00
    pathletboy
        1
    pathletboy  
       Sep 28, 2013
    这种测试不准的,因为你的线程可能会被切换走,导致运行时间增加,特别是你这种时间越短越不准。
    shiny
        2
    shiny  
    PRO
       Sep 28, 2013
    它也没说所有情况下单引号都快啊:
    Double quotes is 2.9% faster than Single quotes by an average of 0.00024834399999999µs.
    Single quotes concatenation is 5.44% faster than Double quotes concatenation by an average of 0.0005676475789474µs.

    不同的地方是双引号还要解析字符串吧。
    在我看来在 php 里比这种快慢是非常非常无聊的。
    skydiver
        3
    skydiver  
       Sep 28, 2013   ❤️ 1
    纠结这些细节没什么意义..来一个数据库IO,这些省出来的时间全不值一提。
    yakczh
        4
    yakczh  
       Sep 28, 2013
    php慢不是因为拼字符串,而是很多框架引用一大堆没用的类,引起的额外的io开销,每次请求都要调用stat都检查每个文件是不是有更新 ,导致单文件和框架会有70%的性能差距
    yakczh
        5
    yakczh  
       Sep 28, 2013
    累计百万的请求省出来1毫秒的优势,小伙伴们都惊呆了
    yangqi
        6
    yangqi  
       Sep 28, 2013
    都5年前的文章了, 别太当真了.

    不信你把上下两次比较都用同样的,单引号或者双引号. 最后结果也是不同的, 所以结果你明白的
    xiasix
        7
    xiasix  
    OP
       Sep 28, 2013
    @yakczh 测试,测试 你和你的小伙伴们懂么
    xiasix
        8
    xiasix  
    OP
       Sep 28, 2013
    @skydiver 只是想知道以后想代码申明字符串的时候 是 $a="nihao"; 还是$a='nihao'; 而已
    zhujinliang
        9
    zhujinliang  
       Sep 28, 2013
    双引号可以处理嵌入变量,拼字符串时会很便利
    用到这种特性时就写双引号,用不到时就写单引号
    msg7086
        10
    msg7086  
       Sep 28, 2013
    @xiasix 从语言源码角度来说,单引号是字符串立即量,双引号则会解析变量引用,所以单引号要比双引号快。
    实际则是两者速度非常接近,就算你把整个页面所有的单引号都改成双引号,对执行效率的影响还不及气温带来的速度变化。
    ejin
        11
    ejin  
       Sep 28, 2013
    100万次才这么点区别么……
    yxzblue
        12
    yxzblue  
       Sep 28, 2013
    看来,大伙讨论得够多了。我插句,按文档来吧
    yakczh
        13
    yakczh  
       Sep 28, 2013
    别搞这些hellowold式的测试了,测试下不同框架数据库两个表连接查询的性能对比才有实际意义
    taogogo
        14
    taogogo  
       Sep 28, 2013
    只能理论上来说,单引号快,其实是无所谓的,代码好看就好
    zhujinliang
        15
    zhujinliang  
       Sep 28, 2013
    @msg7086 这种解析不应该是编译期做的事么,理论上两种写法编译后应该是一样的,只是编译过程中处理方式不一样会有效率差别
    zouchao
        16
    zouchao  
       Sep 28, 2013
    这个时间的差异,觉得没有太大的意思!
    nine
        17
    nine  
       Sep 28, 2013
    <?php
    $t1 = microtime(true);
    $i = 1;

    while ($i < 1000000) {
    $text = 'das;lfkjasd;lfkjads;lfkjasdl;fkjasdgnafdgljadhsfl;kadsfmasdl;gjkasdfio;mads;klgads;lfgkjads;fkljagl;k';

    ++$i;
    }

    $t2 = microtime(true);
    echo (($t2 - $t1) * 1000) . 'ms' . PHP_EOL;
    $i = 1;
    while ($i < 1000000) {
    $text = "{$i}das;lfkjasd;lfkjads;lfkjasdl;fkjasdgnafdgljadhsfl;kadsfmasdl;gjkasdfio;mads;klgads;lfgkjads;fkljagl;k";

    ++$i;
    }

    $t3 = microtime(true);
    echo (($t3 - $t2) * 1000) . 'ms'.PHP_EOL;

    ?>


    给你改了一点点 LZ 运行这段代码试试
    xlmo
        18
    xlmo  
       Sep 28, 2013
    用双引号还是单引号除了功能区别外主要还是习惯上的区别。性能上的区别微乎其微,没有必要纠结在这上面。
    比如对于有变量的字符串我用双引号,没有变量的字符串我用单引号。
    zencoding
        19
    zencoding  
       Sep 28, 2013
    把单引号作为习惯即可,没必要吹毛求疵
    msg7086
        20
    msg7086  
       Sep 29, 2013
    @zhujinliang 好吧,的确有这个可能,内嵌变量可以在编译阶段重写成字符串拼接。
    DKR
        21
    DKR  
       Sep 29, 2013
    doublleft
        22
    doublleft  
       Oct 1, 2013
    优先使用单引号
    $var = 'hello' . 'myname' . 'is' . name(); //这样就会太尴尬了
    不如就
    $var = "hello, myname is : name() "; //多了然
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   4169 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 151ms · UTC 05:12 · PVG 13:12 · LAX 22:12 · JFK 01:12
    ♥ Do have faith in what you're doing.