php-src

DNUM, EXPONENT_DNUM

で、flexのマクロ定義を見てたら zend_language_scanner.l DNUM ([0-9]*[\.][0-9]+)|([0-9]+[\.][0-9]*) EXPONENT_DNUM (({LNUM}|{DNUM})[eE][+-]?{LNUM}) となっているのを知り、下のような書き方でも動くっていうのを知りました。 まだまだ知らないこと沢…

PHP5, PHP4 関数定義の違いあれこれ

zend_language_parser.y内の関数の引数定義の部分。php5.2.2とphp4.4.7で結構違う。php5.2.2 parameter_list: non_empty_parameter_list | /* empty */ ; non_empty_parameter_list: optional_class_type T_VARIABLE ... | optional_class_type '&' T_VARIAB…

謎の演算子

PHPへのオペレータ追加続き $ php -r '$users ||= "john"; echo $users[0];' johnおお!!!!!! var_dumpで確認 $ php -r '$users ||= "john"; var_dump($users); ' array(1) { [0]=> &string(4) "john" }え。文字列リテラルへの参照ってなに!? 数値を……

勘違いなjohnさん

どこで間違えたらこうなるんだ。w opcodeレベルでの動作の理解がまだまだです。ようやく週末。がんばろー。

[ PHPに独自のオペレータを追加する

一歩進んだ。Y!のPHPエンジニア問題の $users ||= ‘john’; やっぱりgdb便利ですねー。 zend_exedute.c #define _CONST_CODE 0 #define _TMP_CODE 1 #define _VAR_CODE 2 #define _UNUSED_CODE 3 #define _CV_CODE 4 zend_vm_executer.h void zend_init_opcod…