标签: php-opcode

PHP操作码如何与实际执行的二进制代码相关?

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 apc virtual-machine php-internals php-opcode

15
推荐指数
1
解决办法
1398
查看次数

什么是EXT_NOP和EXT_STMT,PHP操作码

我试图通过仅针对我的实现执行本机php函数来了解更深入的PHP内部信息。

但是在每个操作码转储中,我都会看到以下两个操作码:

EXT_NOPhttp : //php.net/manual/tr/internals2.opcodes.ext-nop.php

EXT_STMThttp : //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 xdebug opcode php-opcode

4
推荐指数
1
解决办法
292
查看次数

简写 if then else 在 php 中的性能/优化

说到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 shorthand-if zend-optimizer php-opcode

4
推荐指数
1
解决办法
1338
查看次数

PHP字符串文字和编译器优化

可能重复:
在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)

php optimization php-opcode

1
推荐指数
1
解决办法
203
查看次数