PHP5.1.4源代码深入解析 博客分类: 『技术文摘』 ZendPHPMySQLEXTCVS
作者:PHPchina
T_IF '(' expr ')' ':' {
zend_do_if_cond(&$3, &$4 TSRMLS_CC);
} inner_statement_list {
zend_do_if_after_statement(&$4, 1 TSRMLS_CC);
} new_elseif_list new_else_single T_ENDIF ';' {
zend_do_if_end(TSRMLS_C);
}
if 后面必须存在(),圆括弧里面是表达式 expr 表达式在734行被定义:
expr:
r_variable { $$ = $1; }
expr_without_variable { $$ = $1; }
;
if 后面可以跟 elseif 语句及 else 语句。
从语法树里面我们看出 if () 后面是可以跟 : 的,这一般很少被使用吧。
6. 优先级和左右结合性
一般情况下.y文件中最先定义的操作符优先级相对低,并且可以使用%left、%right 进行描述左右结合性,例如:
%left '+' '-' '.'
%left '*' '/' '%'
%right '!'
这说明'!'在 PHP 语法中是右结合的, '*' '/' '%' '+' '-' '.' 是左结合的,并且'!'的优先级更高
例如语法 !$a + $b 要先计算 !$a 在进行加法操作%left ',' 被放在最上面定义,说明他的优先级最低,因为我们知道','可以等同一个语句。
7. php.ini的解析
1. 如果规定数值正负?
<INITIAL>[ ]*("true" "on" "yes")[ ]* {
ini_lval->value.str.val = zend_strndup("1", 1);
ini_lval->value.str.len = 1;
ini_lval->type = IS_STRING;
return CFG_TRUE;
}
<INITIAL>[ ]*("false" "off" "no" "none")[ ]* {
ini_lval->value.str.val = zend_strndup("", 0);
ini_lval->value.str.len = 0;
ini_lval->type = IS_STRING;
return CFG_FALSE;
}
12. 从 CVS 获取 PHP 源代码
1. 安装 CVS 版本工具,例如 TortoiseCVS。
2. cvs -d :pserver:cvsread@cvs.php.net:/repository checkout php-src 具体的CVS使用办法请参考 CVS 手册及其它著作。
PHP.ini 文件的默认配置,定义在 ./main/main.c 342行
-- ./main/main.c -- 342:
/* {{{ PHP_INI
*/
PHP_INI_BEGIN()
PHP_INI_ENTRY_EX("define_syslog_variables", "0", PHP_INI_ALL, NULL,
php_ini_boolean_displayer_cb)
PHP_INI_ENTRY_EX("highlight.bg", HL_BG_COLOR, PHP_INI_ALL, NULL,
php_ini_color_displayer_cb)
PHP_INI_ENTRY_EX("highlight.comment", HL_COMMENT_COLOR, PHP_INI_ALL, NULL,
php_ini_color_displayer_cb)
PHP_INI_ENTRY_EX("highlight.default", HL_DEFAULT_COLOR, PHP_INI_ALL, NULL,
php_ini_color_displayer_cb)
PHP_INI_ENTRY_EX("highlight.html", HL_HTML_COLOR, PHP_INI_ALL, NULL,
php_ini_color_displayer_cb)
PHP_INI_ENTRY_EX("highlight.keyword", HL_KEYWORD_COLOR, PHP_INI_ALL, NULL,
php_ini_color_displayer_cb)
PHP_INI_ENTRY_EX("highlight.string", HL_STRING_COLOR, PHP_INI_ALL, NULL,
php_ini_color_displayer_cb)
more lines ... ...
PHP_INI_END()
/* }}} */
-- ./main/main.c --
在最新版本的PHP中 memory_limit 由原来的 8M 修改成了 16M