摘要:是計算機指令中的一部分,用于指定要執行的操作,指令的格式和規范由處理器的指令規范指定。其實這個擴展可以做到更多,比如糾結性能問題,可以使用這個擴展盡可能的優化你的代碼,或者使用這個擴展排除一些非常隱性的錯誤。
Opcode
InstallationOpcode是計算機指令中的一部分,用于指定要執行的操作,指令的格式和規范由處理器的指令規范指定。
簡而言之,Opcode就是運行在Zend VM中的指令(或者成為字節碼 Byte Codes)
git clone https://github.com/derickr/vld.git vld # 也可以使用其他方式獲取,下面介紹 cd vld phpize ./configure --with-php-config=/usr/local/php7/bin/php-config --enable-vld # 注意替換自己的路徑 sudo make install sudo vim /usr/local/php7/etc/php.ini
Problem在 php.ini 增加 extension=vld.so , PHP7自己編譯的需要自己新建php.ini文件
!! 注意 php.ini 中 extension_dir="/usr/local/php7/lib/php/extensions/" 設置的位置PECL::Package::vld
Download and Installation Instructions
這是在SF的另一篇博文(面試類型)中出現的,找了一下,沒找到文章。特引用其中一個例子,講解VLD的使用
如果有哪位朋友找到了還請告訴我一聲,我會注上說明,謝謝!
看以下栗子
$apple = 1; if (-1) { $apple = 2; } echo $apple;
相信很多人看到的第一反應是輸出1,這不是很簡單么?然而并不是,輸出的是2(PHP 7.0.4 (cli)) CodePad
Why在安裝好vld擴展之后,我們馬上就可以知道是為什么,首先驗證下vld已經安裝
php -m | grep vld # 看到輸出一行 vld 就對了
我們把這個栗子寫到一個test.php(文件名隨意)文件中
執行以下命令
php -dvld.active=1 test.php # 參數表示激活vld擴展
輸出應該如下所示,
Finding entry points Branch analysis from position: 0 Jump found. Position 1 = 2, Position 2 = 3 Branch analysis from position: 2 Jump found. Position 1 = -2 Branch analysis from position: 3 filename: /home/shadowman/test/test.php function name: (null) number of ops: 6 compiled vars: !0 = $a line #* E I O op fetch ext return operands ------------------------------------------------------------------------------------- 3 0 E > ASSIGN !0, 1 5 1 > JMPZ -1, ->3 6 2 > ASSIGN !0, 2 9 3 > CONCAT ~3 !0, "%0A" 4 ECHO ~3 5 > RETURN 1 branch: # 0; line: 3- 5; sop: 0; eop: 1; out1: 2; out2: 3 branch: # 2; line: 6- 9; sop: 2; eop: 2; out1: 3 branch: # 3; line: 9- 9; sop: 3; eop: 5; out1: -2 path #1: 0, 2, 3, path #2: 0, 3, 2
重點內容為
Opcode Descriptions and Examples
number of ops: 6 # 表示有6個操作 compiled vars: !0 = $a # 編譯之后的變量, ![number] 表示定義的變量,~[number]表示臨時變量 line #* E I O op fetch ext return operands ------------------------------------------------------------------------------------- 3 0 E > ASSIGN !0, 1 # 以上表示將1這個字面值賦值給!0,即$a 5 1 > JMPZ -1, ->3 # 重點?。∫陨蠈τ?if (-1). opcode解釋為如果-1為0,則跳轉到3(Jump to the address if the value is zero) 6 2 > ASSIGN !0, 2 # 以上表示將2這個字面值賦值給!0,即$a 9 3 > CONCAT ~3 !0, "%0A" # 以上表示拼接 !0($a) 和 "%0A"( ) 賦值給一個臨時變量 4 ECHO ~3 # 以上表示輸出 !0($a) 5 > RETURN 1 # 以上表示返回
可以很簡單的得知,為什么這里會有這個奇葩的"錯誤"。
Conclusion其實vld這個擴展可以做到更多,比如糾結性能問題,可以使用這個擴展盡可能的優化你的PHP代碼,或者使用這個擴展排除一些非常隱性的錯誤。
如上!謝謝!
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/31957.html
查看生成的Opcode,vld擴展下載地址 http://pecl.php.net/package/vld rztar zxvf vld-0.13.0.tgz cd vld-0.13.0/usr/local/webserver/php/bin/phpize ./configure --with-php-config=/usr/local/webserver/php/bin/php-config m...
摘要:本文就改變性能分析的角度,并通過實例來分析出的性能方面需要注意和改進的點。如下是作為解釋性語言的執行過程。這里分別啟用和做實驗。 編者按】此前,閱讀過了很多關于 PHP 性能分析的文章,不過寫的都是一條一條的規則,而且,這些規則并沒有上下文,也沒有明確的實驗來體現出這些規則的優勢,同時討論的也側重于一些語法要點。本文就改變 PHP 性能分析的角度,并通過實例來分析出 PHP 的性能方面...
摘要:本文就改變性能分析的角度,并通過實例來分析出的性能方面需要注意和改進的點。如下是作為解釋性語言的執行過程。這里分別啟用和做實驗。 【編者按】此前,閱讀過了很多關于 PHP 性能分析的文章,不過寫的都是一條一條的規則,而且,這些規則并沒有上下文,也沒有明確的實驗來體現出這些規則的優勢,同時討論的也側重于一些語法要點。本文就改變 PHP 性能分析的角度,并通過實例來分析出 PHP 的性能方...
摘要:本文就改變性能分析的角度,并通過實例來分析出的性能方面需要注意和改進的點。如下是作為解釋性語言的執行過程。這里分別啟用和做實驗。 此前,閱讀過了很多關于 PHP 性能分析的文章,不過寫的都是一條一條的規則,而且,這些規則并沒有上下文,也沒有明確的實驗來體現出這些規則的優勢,同時討論的也側重于一些語法要點。本文就改變PHP 性能分析的角度,并通過實例來分析出 PHP 的性能方面需要注意和...
閱讀 1698·2021-10-28 09:32
閱讀 605·2021-09-24 09:47
閱讀 2920·2021-09-02 15:11
閱讀 2731·2021-08-09 13:46
閱讀 2884·2019-08-30 15:55
閱讀 1071·2019-08-30 15:54
閱讀 3299·2019-08-29 14:12
閱讀 805·2019-08-26 13:40