当前位置: 首页 > 面试题库 >

在PHP中有单引号还是双引号有性能优势吗?

汝岳
2023-03-14
问题内容

(假设php5)考虑

<?php

    $foo = 'some words';

    //case 1
    print "these are $foo";

    //case 2
    print "these are {$foo}";

    //case 3
    print 'these are ' . $foo;
?>

1和2之间有很大的区别吗?

如果不是,那介于1/2和3之间呢?


问题答案:

好吧,就像所有“现实生活中可能更快”的问题一样,您无法击败现实生活中的考验。

function timeFunc($function, $runs)
{
  $times = array();

  for ($i = 0; $i < $runs; $i++)
  {
    $time = microtime();
    call_user_func($function);
    $times[$i] = microtime() - $time;
  }

  return array_sum($times) / $runs;
}

function Method1()
{ 
  $foo = 'some words';
  for ($i = 0; $i < 10000; $i++)
    $t = "these are $foo";
}

function Method2()
{
  $foo = 'some words';
  for ($i = 0; $i < 10000; $i++)
    $t = "these are {$foo}";
}

function Method3()
 {
  $foo = 'some words';
  for ($i = 0; $i < 10000; $i++)
    $t = "these are " . $foo;
}

print timeFunc('Method1', 10) . "\n";
print timeFunc('Method2', 10) . "\n";
print timeFunc('Method3', 10) . "\n";

进行几次运行以分页显示所有内容,然后…

0.0035568

0.0035388

0.0025394

因此,正如预期的那样,插值实际上是相同的(噪声级别差异,可能是由于插值引擎需要处理的额外字符)。直接串联的速度约为速度的66%,这并不是很大的冲击。插值分析器将查找,无所事事,然后以简单的内部字符串concat完成。即使concat非常昂贵,在
完成 所有工作以解析出变量并修剪/复制原始字符串 之后 ,插值器仍将必须这样做。

Somnath更新:

我将Method4()添加到上述实时逻辑中。

function Method4()
 {
  $foo = 'some words';
  for ($i = 0; $i < 10000; $i++)
    $t = 'these are ' . $foo;
}

print timeFunc('Method4', 10) . "\n";

Results were:

0.0014739
0.0015574
0.0011955
0.001169

当您只声明一个字符串而又不需要解析该字符串时,为什么还要混淆PHP调试器来解析。我希望你明白我的意思。



 类似资料:
  • 问题内容: 像这样将变量(例如)连接到现有字符串(例如)中是否更好: 或将变量嵌入到字符串中,如下所示: 还是使用像这样的函数更好: 就处理器时间/效率而言,哪个更好? 问题答案: 进行测试的每个人都得出结论,使用单引号在性能上略有提高。最后,单引号仅导致串联,而双引号则迫使解释器解析变量的完整字符串。 但是,这样做对于最终版本的PHP来说增加的负担很小,以致在大多数情况下,结论是这并不重要。 因

  • 问题内容: 手动编写HTML时,我总是使用单引号。我使用很多渲染的HTML,这些HTML总是使用双引号。这使我可以确定HTML是手工编写的还是生成的。这是一个好主意吗? 两者有什么区别?我知道它们都可以工作,并且得到所有现代浏览器的支持,但是在不同情况下,一个实际上比另一个更好吗? 问题答案: W3组织说: 默认情况下,SGML要求使用双引号(ASCII十进制34)或单引号(ASCII十进制39)

  • 问题内容: 这实际上有什么区别? 这工作正常: 但以下操作无效: 这是为什么? 问题答案: 那是因为双引号被认为是标准的,而单引号却没有。这并不是真正针对JQuery,而是关于JSON标准。因此,无论使用JS工具包,您都应该期待相同的行为。 值可以是带双引号的字符串,也可以是数字,也可以是true或false或null,或者是对象或数组。这些结构可以嵌套。

  • 我是gradle的新手,目前只是试图遵循教程,有很多次我看到单引号和双引号混杂在一起。我只是想知道是否有一个不同的时间应该使用一套比另一个。这方面的一个例子是教程的第6.12节--默认任务: 所以,我只想知道我是否应该注意这些差异,或者它们是否可以相互改变,我可以使用单引号或双引号时打印字符串在Gradle。

  • 问题内容: 我有些困惑,为什么我在PHP中看到一些代码,这些代码的字符串用单引号引起来,有时用双引号引起来。 我只是在.NET或C语言中知道,如果用单引号引起来,则意味着它是一个字符,而不是字符串。 问题答案: PHP字符串不仅可以通过 _两种_方式指定,还可以通过 四种 方式指定。 用单引号引起来的字符串几乎可以完全“按原样”显示事物。变量和大多数转义序列将不被解释。唯一的例外是,要显示文字单引

  • 本文向大家介绍浅谈PHP中单引号和双引号到底有啥区别呢?,包括了浅谈PHP中单引号和双引号到底有啥区别呢?的使用技巧和注意事项,需要的朋友参考一下 在PHP中,字符串的定义可以使用英文单引号' ',也可以使用英文双引号" "。 但是必须使用同一种单或双引号来定义字符串,如:'Hello World"和"Hello World'为非法的字符串定义。 单引号和双引号到底有啥区别呢? PHP允许我们在双