test.php为纯文本:
<?php
$x = "a";
echo $x;
Run Code Online (Sandbox Code Playgroud)
test.php作为操作码:
debian:~ php -d vld.active=1 -d vld.execute=0 -f test.php
Finding entry points
Branch analysis from position: 0
Return found
filename: /root/test.php
function name: (null)
number of ops: 5
compiled vars: !0 = $x
line # * op fetch ext return operands
---------------------------------------------------------------------------------
2 0 > EXT_STMT
1 ASSIGN !0, 'a'
3 2 EXT_STMT
3 ECHO !0
4 4 > RETURN 1
branch: # 0; line: 2- 4; sop: 0; eop: 4
path #1: …Run Code Online (Sandbox Code Playgroud) 我试图通过仅针对我的实现执行本机php函数来了解更深入的PHP内部信息。
但是在每个操作码转储中,我都会看到以下两个操作码:
EXT_NOP :http : //php.net/manual/tr/internals2.opcodes.ext-nop.php
EXT_STMT:http : //php.net/manual/tr/internals2.opcodes.ext-stmt.php
如您在文档中所见,没有详细的解释。
即使在文档中给出的以下示例中,我的转储也不同于文档的特殊化。我真的很想知道为什么每个垃圾场都有这两个摊位吗?它们的功能是什么?
<?php
/*
* no operation
* opcode number: 0
*/
function A(){};
?>
Run Code Online (Sandbox Code Playgroud)
环保化:
LXC
Linux web 3.16.0-4-amd64 #1 SMP Debian 3.16.7-ckt11-1+deb8u5 (2015-10-09) x86_64 GNU/Linux
PHP 5.6.15-1~dotdeb+7.1 (cli) (built: Nov 3 2015 16:29:58)
Copyright (c) 1997-2015 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2015 Zend Technologies
with Zend OPcache v7.0.6-dev, Copyright (c) 1999-2015, by Zend Technologies
with Xdebug v2.3.3, Copyright (c) 2002-2015, by …Run Code Online (Sandbox Code Playgroud) 说到PHP,我想问一下这两者在性能上有没有区别:
$name=($IsBoy)?"George":"Mary";
Run Code Online (Sandbox Code Playgroud)
对比
if($IsBoy)
{
$name="George";
}
else
{
$name="Mary";
}
Run Code Online (Sandbox Code Playgroud)
这两个会导致不同的操作码吗?
如果是,性能上会有什么理论上的差异吗?(当然忽略这两个需要读/编译/解释的时间)
如果是,那么像 zend 优化器这样的优化器是否会利用这一点并自动进行任何重新安排?
ps 如果您认为我的“全长手” if-then-else 代码太复杂,请提供一个最基本的代码示例并对此进行回答。
更新:
我希望这个问题非常清楚,但似乎人们没有得到这个信息。这个问题是关于性能上的理论(......但真实和可测量的)差异(这就是我在理论中应用粗体和斜体的原因)。请不要回答说哪种编程风格更具可读性,而且这太吹毛求疵而不必担心性能。
ps 2:通过强调“理论”这个词,我试图避免“别担心它不值得麻烦,它只是几纳秒”类型的答案。
可能重复:
在php中,单引号与双引号是否有性能优势?
我想知道如果PHP代码中使用时,需要一个性能命中"定义字符串,当s 不包含变量相比,'在不进行额外的解析.
例如,PHP将尝试解析由"但未定义的字符串内的变量'.
$myString = "Greetings earthlings!";
echo '$myString'; //literally outputs the string '$myString'
echo "$myString"; //literally outputs the string "Greetings earthlings"
Run Code Online (Sandbox Code Playgroud)
所以我的问题是,我一直在编写这样的代码:
echo "Greetings earthlings";
Run Code Online (Sandbox Code Playgroud)
我一直在浪费周期吗?或者是PHP智能/优化的不够了解我真正的意思是:
echo 'Greetings earthlings';
Run Code Online (Sandbox Code Playgroud)
?