php中的require到底是函数还是语法
程序员文章站
2024-01-12 22:46:46
...
我发现两种用法都可以
require('functions.php')
和require 'functions.php'
,那么它在php中到底是语法还是函数呢?我们能否在自己写php插件时也实现这样的用法?也就是可以这样用my_custom 'parms'
。
回复内容:
我发现两种用法都可以require('functions.php')
和require 'functions.php'
,那么它在php中到底是语法还是函数呢?我们能否在自己写php插件时也实现这样的用法?也就是可以这样用my_custom 'parms'
。
语法
Zend/zend_language_scanner.l
"eval" { return T_EVAL; } "include" { return T_INCLUDE; } "include_once" { return T_INCLUDE_ONCE; } "require" { return T_REQUIRE; } "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); }
require
是 PHP 中的关键字。
f()
这样的用法并不意味着f
是函数。例如,print('hi'
也可以,但是 print
并非函数。
推荐阅读
-
php中的require到底是函数还是语法
-
php中echo()和print()、require()和include()等易混淆函数的区别_PHP
-
php中echo()和print()、require()和include()等易混淆函数的区别
-
php中echo()和print()、require()和include()等易混淆函数的区别
-
php中echo()和print()、require()和include()等易混淆函数的区别
-
php 中require和include引用url和 php的文件编码转换函数问题
-
php 中require和include引用url和 php的文件编码转换函数问题_PHP教程
-
php使用amf3与flex通讯,所有内容都要写在类和类的函数中么,require(/includes/sq_init.php)不支持么?全局变量也不可以用?
-
php中echo()和print()、require()和include()等易混淆函数的区别_PHP
-
php使用amf3与flex通讯,所有内容都要写在类和类的函数中么,require(/includes/sq_init.php)不支持么?全局变量也不可以用?