首页 > PHP > 使用PHP opcodes看$php与”$php”的区别

使用PHP opcodes看$php与”$php”的区别

使用PHP opcodes看$php与”$php”的区别

# 首先下载最新版vld扩展:
wget http://pecl.php.net/get/vld-0.11.2.tgz
tar zxvf vld-0.11.2.tgz
cd vld-0.11.2/
phpize5
./configure
make
sudo make install
# Installing shared extensions:     /usr/lib/php5/20100525+lfs/

修改cli的配置文件激活vld扩展
/etc/php5/cli/php.ini
添加一行
extension=vld.so

测试开始

qiufeng@ubuntu:~$ php -dvld.active=1 -r 'echo @$php;'
Finding entry points
Branch analysis from position: 0
Return found
filename:       Command line code
function name:  (null)
number of ops:  5
compiled vars:  none
line     # *  op                           fetch          ext  return  operands
---------------------------------------------------------------------------------
   1     0  >   BEGIN_SILENCE                                    ~0      
         1      FETCH_R                      local               $1      'php'
         2      END_SILENCE                                              ~0
         3      ECHO                                                     $1
         4    > RETURN                                                   null

branch: #  0; line:     1-    1; sop:     0; eop:     4
path #1: 0,

BEGIN_SILENCE 屏蔽错误消息代码片段的起始符
FETCH_R 获取变量名
END_SILENCE 屏蔽错误消息代码片段的结束符
ECHO 打印文本
RETURN 来自函数中的返回值

qiufeng@ubuntu:~$ php -dvld.active=1 -r 'echo @"$php";'
Finding entry points
Branch analysis from position: 0
Return found
filename:       Command line code
function name:  (null)
number of ops:  6
compiled vars:  none
line     # *  op                           fetch          ext  return  operands
---------------------------------------------------------------------------------
   1     0  >   BEGIN_SILENCE                                    ~0      
         1      FETCH_R                      local               $1      'php'
         2      ADD_VAR                                          ~2      $1
         3      END_SILENCE                                              ~0
         4      ECHO                                                     ~2
         5    > RETURN                                                   null

branch: #  0; line:     1-    1; sop:     0; eop:     5
path #1: 0, 

多了ADD_VAR,这是一个赋值语句。 由于使用了”$php”语法,需要添加一个临时变量来存储结果。

详细可参考:http://www.php.net/manual/en/internals2.opcodes.php

分类: PHP 标签: ,
  1. 本文目前尚无任何评论.
  1. 本文目前尚无任何 trackbacks 和 pingbacks.