语言结构和“内置”函数在PHP中有什么区别?
PHP是一种非常流行的编程语言,具有丰富的内置函数和语言构造。然而,有些人可能会对语言构造和内置函数之间的区别感到困惑。解决这个问题的关键在于深入了解PHP解析器是如何处理不同类型的语句的。
通过阅读PHP的源代码,我发现PHP解析器会将一些语句解析为特殊情况。这些特殊情况是由yacc文件(Zend/zend_language_parser.y)定义的。这意味着这些语句不是普通的代码,而是解析器对特定语法的处理结果。
除此之外,我认为语言构造和内置函数之间没有其他区别。它们都可以在代码中使用,并且具有相似的功能。例如,语言结构和内置函数都可以用于控制流程、处理变量、执行数学运算等等。
为了更好地理解语言构造和内置函数之间的区别,我们可以看一些具体的例子。比如,下面是一个使用语言构造的例子:
if ($a == $b) { echo "a equals b"; }
这是一个简单的条件语句,它使用了if语言构造。当条件满足时,它会执行echo语句并输出"a equals b"。
现在,让我们看一个使用内置函数的例子:
$result = strlen("Hello World"); echo $result;
这个例子使用了内置函数strlen来计算字符串"Hello World"的长度,并将结果赋值给变量$result。然后,它使用echo语句将结果输出。
从这些例子中可以看出,语言构造和内置函数在语法上有一些区别。语言构造通常以关键字的形式出现,并且在语法中有特定的位置和用法。而内置函数则以函数名的形式出现,并且可以在任何适当的位置使用。
总结起来,语言构造和内置函数是PHP中的两种不同的代码元素。语言构造是由解析器处理的特殊情况,而内置函数是提供给开发者使用的常见功能。了解它们之间的区别对于正确理解和使用PHP编程语言非常重要。
PHP中语言构造和“内建”函数之间的区别是什么?
语言构造是由语言本身提供的(比如“if”,“while”等指令);因此它们的名字就是这样。
由此产生的一个结果是,它们比预定义或用户定义的函数更快地被调用(或者我听说/读过几次)。
我不知道它是如何实现的,但它们可以做的一件事(因为它们直接集成到语言中)是“绕过”某种错误处理机制。例如,可以在不存在的变量上使用isset()而不会引发任何通知、警告或错误。
function test($param) {} if (test($a)) { // Notice: Undefined variable: a } if (isset($b)) { // No notice }
*请注意,并非所有语言的构造都是这样的。
函数和语言构造之间的另一个区别是,其中一些可以在没有括号的情况下调用,就像关键字一样。
例如:
echo 'test'; // language construct => OK function my_function($param) {} my_function 'test'; // function => Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING
*这里也不是所有语言构造都是这样的。
我想没有办法“禁用”语言构造,因为它们是语言本身的一部分。另一方面,许多“内建”PHP函数实际上并不是内建的,因为它们由扩展提供,所以它们始终处于活动状态(但并不是所有的函数都是如此)。
另一个区别是语言构造不能用作“函数指针”(我的意思是回调函数,例如):
$a = array(10, 20); function test($param) {echo $param . '';} array_map('test', $a); // OK (function) array_map('echo', $a); // Warning: array_map() expects parameter 1 to be a valid callback, function 'echo' not found or invalid function name
我现在脑海中没有其他想法...而且我对PHP的内部了解不多...所以就这样吧^^
如果你在这里得不到太多答案,也许你可以向邮件列表internals提问(参见http://www.php.net/mailing-lists.php),那里有许多PHP核心开发者;他们可能是唯一了解这些东西的人^^
作为参考:PHP中的关键字和语言构造列表
通过按引用接受未设置的变量的函数,您可以避免生成通知。这不仅限于像isset()这样的语言构造。
所以,用户定义的函数不是语言构造...但是函数本身的语言特性是否是构造?我是否错误地认为“构造”是语言的内置构建块,可能(或可能不)在其他语言中可用。例如,大多数语言都会有条件表达式构造,但并不是所有语言都可能有像Python的海象运算符(也称为赋值表达式)这样的构造。
什么是语言构造和PHP中的“内置”函数之间的区别?
语言构造和“内置”函数之间的区别是什么?
PHP中的语言构造和“内置”函数有什么区别?
在PHP中,语言构造和“内置”函数是两个不同的概念。语言构造是语言的基本单位,它们不能被简化为其他语言构造,而是由解析器直接处理。相比之下,“内置”函数是由语言提供的函数,它们被映射和简化为一组语言构造,然后再进行解析。
解析器将语言构造视为语言的基本单元,可以直接处理它们。这意味着语言构造可以在语法中使用,而无需进一步的处理。另一方面,“内置”函数在解析之前被映射和简化为一组语言构造。这样做的原因可能是为了提高函数的调用速度,因为解析器在解析之前不需要对函数进行映射。
由于语言构造是语言的基本单位,它们不能被重新定义。这意味着无法重新定义像“echo”或“print”这样的语言构造。然而,可以通过编译或运行时来更改函数的映射,以替换自己的语言构造或表达式。
总结一下,语言构造是解析器能够理解和处理的基本单位,而“内置”函数是在解析之前被映射和简化为一组语言构造的函数。这两者在使用和处理上有一些差异,理解这些差异可以更好地理解PHP中的语言构造和“内置”函数的使用。
更多信息:
- Backus-Naur形式,用于定义形式语言的语法(yacc使用此形式)