您好,匿名用户
随意问技术百科期待您的加入

php中的require到底是函数还是语法

+2 投票

我发现两种用法都可以require('functions.php')require 'functions.php',那么它在php中到底是语法还是函数呢?我们能否在自己写php插件时也实现这样的用法?也就是可以这样用my_custom 'parms'

用户头像 提问 2013年 1月19日 @ Kennen 上等兵 (442 威望)
分享到:

1个回答

+1 投票
 
最佳答案

语法
Zend/zend_language_scanner.l

<ST_IN_SCRIPTING>"eval" {
        return T_EVAL;
}

<ST_IN_SCRIPTING>"include" {
        return T_INCLUDE;
}

<ST_IN_SCRIPTING>"include_once" {
        return T_INCLUDE_ONCE;
}

<ST_IN_SCRIPTING>"require" {
        return T_REQUIRE;
}

<ST_IN_SCRIPTING>"require_once" {
        return T_REQUIRE_ONCE;
}

Zend/zend_language_parser.y

internal_functions_in_yacc:
                T_ISSET '(' isset_variables ')' { $$ = $3; }
        |       T_EMPTY '(' variable ')'        { zend_do_isset_or_isempty(ZEND_ISEMPTY, &$$, &$3 TSRMLS_CC); }
        |       T_INCLUDE expr                  { zend_do_include_or_eval(ZEND_INCLUDE, &$$, &$2 TSRMLS_CC); }
        |       T_INCLUDE_ONCE expr     { zend_do_include_or_eval(ZEND_INCLUDE_ONCE, &$$, &$2 TSRMLS_CC); }
        |       T_EVAL '(' expr ')'     { zend_do_include_or_eval(ZEND_EVAL, &$$, &$3 TSRMLS_CC); }
        |       T_REQUIRE expr                  { zend_do_include_or_eval(ZEND_REQUIRE, &$$, &$2 TSRMLS_CC); }
        |       T_REQUIRE_ONCE expr             { zend_do_include_or_eval(ZEND_REQUIRE_ONCE, &$$, &$2 TSRMLS_CC); }
;

Zend/zend_compile.c

void zend_do_include_or_eval(int type, znode *result, const znode *op1 TSRMLS_DC) 
{
        zend_do_extended_fcall_begin(TSRMLS_C);
        {
                zend_op *opline = get_next_op(CG(active_op_array) TSRMLS_CC);

                opline->opcode = ZEND_INCLUDE_OR_EVAL;
                opline->result_type = IS_VAR;
                opline->result.var = get_temporary_variable(CG(active_op_array));
                SET_NODE(opline->op1, op1);
                SET_UNUSED(opline->op2);
                opline->extended_value = type;
                GET_NODE(result, opline->result);
        }
        zend_do_extended_fcall_end(TSRMLS_C);
}
用户头像 回复 2013年 1月19日 @ Alistar 上等兵 (326 威望)
选中 2013年 1月19日 @Saber
提一个问题:

相关问题

0 投票
1 回复 43 阅读
0 投票
1 回复 26 阅读
用户头像 提问 2013年 12月19日 @ Zeus 上等兵 (193 威望)
0 投票
1 回复 40 阅读
0 投票
1 回复 28 阅读
用户头像 提问 2013年 11月22日 @ Nasus 上等兵 (329 威望)
0 投票
1 回复 56 阅读

欢迎来到随意问技术百科, 这是一个面向专业开发者的IT问答网站,提供途径助开发者查找IT技术方案,解决程序bug和网站运维难题等。
温馨提示:本网站禁止用户发布与IT技术无关的、粗浅的、毫无意义的或者违法国家法规的等不合理内容,谢谢支持。

欢迎访问随意问技术百科,为了给您提供更好的服务,请及时反馈您的意见。
...