1.但只有以下类型的代码受命名空间的影响,它们是:类(包括抽象类和traits)、接口、函数和常量。
2.如果一个文件中包含命名空间,它必须在其它所有代码之前声明命名空间,除了一个以外:declare关键字。
3。与PHP其它的语言特征不同,同一个命名空间可以定义在多个文件中,即允许将同一个命名空间的内容分割存放在不同的文件中。
4.__NAMESPACE__和namespace
PHP支持两种抽象的访问当前命名空间内部元素的方法,__NAMESPACE__魔术常量和namespace关键字。
常量__NAMESPACE__的值是包含当前命名空间名称的字符串。在全局的,不包括在任何命名空间中的代码,它包含一个空的字符串。
关键字namespace可用来显式访问当前命名空间或子命名空间中的元素。它等价于类中的self操作符。
5.所有支持命名空间的PHP版本支持三种别名或导入方式:为类名称使用别名、为接口使用别名或为命名空间名称使用别名。
别名是通过操作符use来实现的。为了简化操作,PHP还支持在一行中使用多个use语句。
6.全局空间
如果没有定义任何命名空间,所有的类与函数的定义都是在全局空间,与 PHP 引入命名空间概念前一样。在名称前加上前缀\表示该名称是全局空间中的名称,即使该名称位于其它的命名空间中时也是如此。
7.生成器
使用yield生成需要的值。
当一个生成器被调用的时候,它返回一个可以被遍历的对象.当你遍历这个对象的时候(例如通过一个foreach循环),PHP 将会在每次需要值的时候调用生成器函数,并在产生一个值之后保存生成器的状态,这样它就可以在需要产生下一个值的时候恢复调用状态。一旦不再需要产生更多的值,生成器函数可以简单退出,而调用生成器的代码还可以继续执行,就像一个数组已经被遍历完了。
一个生成器不可以返回值: 这样做会产生一个编译错误。然而return空是一个有效的语法并且它将会终止生成器继续执行。
使用yield关键字,yield会返回一个值给循环调用此生成器的代码并且只是暂停执行生成器函数。除了生成简单的值,也可以在生成值的时候指定键名。Yield可以在没有参数传入的情况下被调用来生成一个NULL值并配对一个自动的键名。
8.引用
在 PHP 中引用意味着用不同的名字访问同一个变量内容。
如果对一个未定义的变量进行引用赋值、引用参数传递或引用返回,则会自动创建该变量。
如果在foreach语句中给一个具有引用的变量赋值,被引用的对象也被改变。
引用与 foreach 语句
$ref=0;
$row=&$ref;
foreach (array(1,2,3) as$row) {
// do something
}
echo$ref;// 3 - last element of the iterated array
引用不是指针。
引用传递:可以将一个变量通过引用传递给函数,其他表达式不能通过引用传递给函数。以下内容可以通过引用传递:变量,例如foo($a);New 语句,例如foo(new foobar());从函数中返回的引用
引用返回:与引用传递不同。引用传递只在参数前加一次&就行,而引用返回得在函数定义和调用两个地方加,指出返回的是一个引用。
取消引用:当 unset 一个引用,只是断开了变量名和变量内容之间的绑定。这并不意味着变量内容被销毁了。
引用定位:很多语法结构是基于引用的,global,$this,
网友评论