关于PHP语言构造器介绍

PHP里有echo、print、die、require等几个特殊的关键字,虽然它们用起来像是函数,但实际上更类似于if、while这样控制语句,而不是一个函数。也就是说,当解释器遇到:

复制代码 代码如下:

print 'Hello world';

这样的一个表达式的时候,并不会把它转换成函数调用,而是直接映射到一系列预先定义好的操作。使用语言构成的时候可以加括号,也可以不加括号,但是使用函数的时候必须加括号。

你提到的“可变函数”,英文是”variable function”,变量函数的意思,翻译成“可变函数”也有点扭曲原义,把variable(变量)这个名词按形容词(可变)的含义来翻译了。PHP里 的Variable function是指如果在一个变量后面加上一对括号,那么解释器会试图寻找名字和这个变量的值一样的一个函数,如果找到了就执行它。例如,有一个函数 foo(),那么可以用下面这种方式调用这个函数:

复制代码 代码如下:

// 初始化一个字符串变量
$func = 'foo';

// 找到名字和这个字符串一样的函数,并且执行它
$func();

所以,你提到的这句话的含义就是,使用变量函数这种方式来调用一个语言构成是不允许的,例如下面这样:

复制代码 代码如下:

$func = 'print';

// 这样做会产生异常,因为print不是一个函数,而是语言的构成部分
$func('hello world');

执行这段代码,会产生一个异常,函数print没有定义。

时间: 2024-12-09 08:11:14

关于PHP语言构造器介绍的相关文章

关于PHP语言构造器介绍_php技巧

PHP里有echo.print.die.require等几个特殊的关键字,虽然它们用起来像是函数,但实际上更类似于if.while这样控制语句,而不是一个函数.也就是说,当解释器遇到: 复制代码 代码如下: print 'Hello world'; 这样的一个表达式的时候,并不会把它转换成函数调用,而是直接映射到一系列预先定义好的操作.使用语言构成的时候可以加括号,也可以不加括号,但是使用函数的时候必须加括号. 你提到的"可变函数",英文是"variable function

关于PHP语言构造器

你提到的"语言构造器",英文是"language construct",是语言构成的意思,翻译成语言构造器难免有点令人困惑.PHP里有echo.print.die.require等几个特殊的关键字,虽然它们用起来像是函数,但实际上更类似于if.while这样控制语句,而不是一个函数.也就是说,当解释器遇到: print 'Hello world'; 这样的一个表达式的时候,并不会把它转换成函数调用,而是直接映射到一系列预先定义好的操作.使用语言构成的时候可以加括号,

《C语言编程魔法书:基于C11标准》——1.3 主流C语言编译器介绍

1.3 主流C语言编译器介绍 对于当前主流桌面操作系统而言,可使用Visual C++.GCC以及LLVM Clang这三大编译器.其中,Visual C++(简称MSVC)只能用于Windows操作系统:其余两个,除了可用于Windows操作系统之外,主要用于Unix/Linux操作系统.像现在很多版本的Linux都默认使用GCC作为C语言编译器.而像FreeBSD.macOS等系统默认使用LLVM Clang编译器.由于当前LLVM项目主要在Apple的主推下发展的,所以在macOS中,Cl

PHP的语言构造器

isset和empty看起来像是函数,我们也经常把它当作函数一样使用,但是实际上,它们是语言构造器. php中的语言构造器就相当于C中的预定义宏的意思,它属于php语言内部定义的关键词,不可以被修改,也不可以被禁用. php中的函数就不一样了,它是函数,在执行的时候会被解析,然后传入参数计算. 所以函数的执行效率没有语言构造器高 比如我们判断一个array中是否包含一个key,使用isset(arr[arr[key]) 比array_key_exists(arr,arr,key)效率会高.  

PHP 什么是语言构造器 什么是可变函数

由于 isset 属于 php 中的语言结构,而 array_key_exists 是函数,所以 isset 更快.并且 isset 在其他语言中也存在,更具可读性. 顿时很是疑惑--什么,isset竟然不是函数?而至于处理效率isset更快,倒变得不重要了(至少我一直使用isset,几乎没有关注过array_key_exists,具体可以见文章) PHP.net中,也被分在Variable handling 函数,但是其实在中间有这样一段话: Note: 因为是一个语言构造器而不是一个函数,不

大数据处理语言U-SQL介绍

微软宣布了新的 Azure 数据湖(Azure Data Lake)服务,该服务被用于云分析,包括了一个超大规模信息库:一个在 YARN 上建立的新的的分析服务,该服务允许数据开发者和数据科学家分析全部的数据:还有 HDInsight,一个全面管理 Hadoop.Spark.Storm 和 HBase 的服务.Azure 数据湖分析包括 U-SQL,这个语言综合了 SQL 的优点与你自己所写代码的表现能力.U-SQL 的可扩展分布式查询功能让你可以有效地分析存储器或关联存储器(比如 AzureS

Java语言观察者模式介绍

简单地说,观察者模式定义了一个一对多的依赖关系,让一个或多个观察者对象监察一个主题对象.这样一个主题对象在状态上的变化能够通知所有的依赖于此对象的那些观察者对象,使这些观察者对象能够自动更新. 观察者模式的结构 观察者(Observer)模式是对象的行为型模式,又叫做发表-订阅(Publish/Subscribe)模式.模型-视图(Model/View)模式.源-收听者(Source/Listener)模式或从属者(Dependents)模式. 本模式的类图结构如下: 图1.观察者模式的静态结构

JAVA与模式 学习笔记(一) 统一的建模语言UML介绍(2

  三.类图        类图就是显示出类.接口以及它们静态结构和关系的图.类图的基本元素是类或者接口. 类的框可分为一下几层 类名 属性清单 方法清单 性质清单       如果一个类有内部成员类,那么它的类图就会有5层.在类图中,除了类名层不能省略必须显示外,其他几层在UML中都可以省略的.        第一层是类名,如果类名为正体字,表明类是具体的(Concrete,即可以实例化的),变量名如果是斜体的,表明类是抽象的.         第二层是属性层.左面如果有+号,表明它是publ

Spring3 表达式语言(SpEL)介绍

转载自:http://iyiguo.net/blog/2011/06/19/spring-expression-language/ 下一版本 项目需要使用到SpEL ,做一个保存.