语言结构和“内置”函数在PHP中有什么区别?

11 浏览
0 Comments

语言结构和“内置”函数在PHP中有什么区别?

我知道includeissetrequireprintecho和其他一些都不是函数,而是语言结构。

其中一些语言结构需要括号,其他一些则不需要。

require 'file.php';
isset($x);

其中一些有返回值,其他一些则没有。

print 'foo'; //1
echo  'foo'; //没有返回值

那么语言结构和内置函数之间的内部区别是什么呢?

0
0 Comments

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编程语言非常重要。

0
0 Comments

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的海象运算符(也称为赋值表达式)这样的构造。

0
0 Comments

什么是语言构造和PHP中的“内置”函数之间的区别?

语言构造和“内置”函数之间的区别是什么?

PHP中的语言构造和“内置”函数有什么区别?

在PHP中,语言构造和“内置”函数是两个不同的概念。语言构造是语言的基本单位,它们不能被简化为其他语言构造,而是由解析器直接处理。相比之下,“内置”函数是由语言提供的函数,它们被映射和简化为一组语言构造,然后再进行解析。

解析器将语言构造视为语言的基本单元,可以直接处理它们。这意味着语言构造可以在语法中使用,而无需进一步的处理。另一方面,“内置”函数在解析之前被映射和简化为一组语言构造。这样做的原因可能是为了提高函数的调用速度,因为解析器在解析之前不需要对函数进行映射。

由于语言构造是语言的基本单位,它们不能被重新定义。这意味着无法重新定义像“echo”或“print”这样的语言构造。然而,可以通过编译或运行时来更改函数的映射,以替换自己的语言构造或表达式。

总结一下,语言构造是解析器能够理解和处理的基本单位,而“内置”函数是在解析之前被映射和简化为一组语言构造的函数。这两者在使用和处理上有一些差异,理解这些差异可以更好地理解PHP中的语言构造和“内置”函数的使用。

更多信息:

- Backus-Naur形式,用于定义形式语言的语法(yacc使用此形式)

0