色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

php tokengetall

魏麗春1年前8瀏覽0評論
介紹php中的token_get_all函數
對于一名php開發者來說,一定不會陌生php中的token_get_all函數。這個函數可以將php代碼拆分成一個個的php詞法單元(token),并返回它們的數組。那么這些詞法單元有什么用呢?下面我們就具體分析。
php詞法單元的含義
在php中,我們使用編譯器將我們的php代碼編譯成二進制代碼。在這個編譯過程中,php代碼會被切割成一個個的php詞法單元。例如下面這段php代碼:
echo "hello, world!";

會被切割成下列tokens:
array(
[0] => array(
[0] => T_ECHO
[1] => echo
)
[1] => ' '
[2] => array(
[0] => T_CONSTANT_ENCAPSED_STRING
[1] => "hello, world!"
)
[3] => ';'
)

從上面的結果可以看出,一個php詞法單元是由一個數組來表示的。這個數組的第一項是一個代表該詞法單元類型的常量,比如T_ECHO、T_CONSTANT_ENCAPSED_STRING等等。第二項則是該詞法單元的實際內容,可以是一個數字、字符串或者變量名等等。
應用場景舉例
詞法單元在編寫一些php擴展時特別有用,直接操作php代碼是不夠安全和高效的。如果需要在php代碼中嵌入一些C代碼,直接將C代碼嵌入其中在編譯時會有大量的限制,為了避免這些限制,我們需要將C代碼嵌入php的語法中,一種方式就是使用php詞法單元。
例如下面這段php代碼:
function print_sum($a, $b) {
$sum = $a + $b;
echo $sum;
}
print_sum(1, 2);

可以使用php詞法單元來解析上述代碼并修改其中的echo語句:
$tokens = token_get_all(file_get_contents('test.php'));
$changed_code = '';
$echo_changed = false;
foreach ($tokens as $token) {
if (is_array($token)) {
if ($token[0] == T_ECHO) {
$changed_code .= 'print(';
$echo_changed = true;
} else {
$changed_code .= $token[1];
}
} else {
if ($echo_changed && $token == ';') {
$changed_code .= ')';
$echo_changed = false;
} else {
$changed_code .= $token;
}
}
}
print($changed_code);

運行以上代碼,輸出結果為:
function print_sum($a, $b) {
$sum = $a + $b;
print($sum);
}
print_sum(1, 2);

可以看到,我們使用了php詞法單元將原來的echo語句修改成了print函數。
結語
總結一下,php詞法單元在很多場合下都是非常有用的,尤其在一些擴展的開發中。掌握這個函數的使用方法十分重要,建議大家多多嘗試。