命名空间时常和 autoload 一同使用,用于自动加载类实现文件:
spl_autoload_register( function ($class) { spl_autoload(str_replace("\\", "https://www.jb51.net/", $class)); } );当你实例化一个类 \XXOO\Test\A 的时候,这个类的完整限定名会被传递给 autoload 函数,autoload 函数将类名中的命名空间分隔符(反斜杠)替换为斜杠,并包含对应文件。
这样可以实现类定义文件分级储存,按需自动加载。
PHP 的 OPP 机制,具有继承和类似虚函数的功能,例如如下的代码:
class A { public function callFuncXXOO() { print $this->funcXXOO(); } public function funcXXOO() { return "A::funcXXOO()"; } } class B extends A { public function funcXXOO() { return "B::funcXXOO"; } } $b = new B; $b->callFuncXXOO();输出是:
B::funcXXOO可以看到,当在 A 中使用 $this->funcXXOO() 时,体现了“虚函数”的机制,实际调用的是 B::funcXXOO().
然而如果将所有函数都改为静态函数:
情况就没这么乐观了,输出是:
A::funcXXOO()这是因为 self 的语义本来就是“当前类”,所以 PHP5.3 给 static 关键字赋予了一个新功能:后期静态绑定:
class A { static public function callFuncXXOO() { print static::funcXXOO(); } // ... } // ...这样就会像预期一样输出了:
B::funcXXOO Heredoc 和 NowdocPHP5.3 对 Heredoc 以及 Nowdoc 进行了一些改进,它们都用于在 PHP 代码中嵌入大段字符串。
Heredoc 的行为类似于一个双引号字符串:
$name = "MyName"; echo <<< TEXT My name is "{$name}". TEXT;Heredoc 以三个左尖括号开始,后面跟一个标识符(TEXT), 直到一个同样的顶格的标识符(不能缩进)结束。
就像双引号字符串一样,其中可以嵌入变量。
Heredoc 还可以用于函数参数,以及类成员初始化:
var_dump(<<<EOD Hello World EOD ); class A { const xx = <<< EOD Hello World EOD; public $oo = <<< EOD Hello World EOD; }Nowdoc 的行为像一个单引号字符串,不能在其中嵌入变量,和 Heredoc 唯一的区别就是,三个左尖括号后的标识符要以单引号括起来:
$name = "MyName"; echo <<< 'TEXT' My name is "{$name}". TEXT;输出:
My name is "{$name}". 用 const 定义常量PHP5.3 起同时支持在全局命名空间和类中使用 const 定义常量。
旧式风格:
define("XOOO", "Value");新式风格:
const XXOO = "Value";const 形式仅适用于常量,不适用于运行时才能求值的表达式:
// 正确 const XXOO = 1234; // 错误 const XXOO = 2 * 617; 三元运算符简写形式旧式风格:
echo $a ? $a : "No Value";可简写成:
echo $a ?: "No Value";即如果省略三元运算符的第二个部分,会默认用第一个部分代替。
PharPhar即PHP Archive, 起初只是Pear中的一个库而已,后来在PHP5.3被重新编写成C扩展并内置到 PHP 中。
Phar用来将多个 .php 脚本打包(也可以打包其他文件)成一个 .phar 的压缩文件(通常是ZIP格式)。
目的在于模仿 Java 的 .jar, 不对,目的是为了让发布PHP应用程序更加方便。同时还提供了数字签名验证等功能。
.phar 文件可以像 .php 文件一样,被PHP引擎解释执行,同时你还可以写出这样的代码来包含(require) .phar 中的代码:
require("xxoo.phar"); require("phar://xxoo.phar/xo/ox.php");更多信息请参见官网 [注].
PHP5.4(2012-2013)
Short Open TagShort Open Tag 自 PHP5.4 起总是可用。
在这里集中讲一下有关 PHP 起止标签的问题。即:
通常就是上面的形式,除此之外还有一种简写形式:
<? /* Code... */ ?>还可以把
<?php echo $xxoo;?>简写成:
<?= $xxoo;?>这种简写形式被称为 Short Open Tag, 在 PHP5.3 起被默认开启,在 PHP5.4 起总是可用。
使用这种简写形式在 HTML 中嵌入 PHP 变量将会非常方便。
对于纯 PHP 文件(如类实现文件), PHP 官方建议顶格写起始标记,同时 省略 结束标记。
这样可以确保整个 PHP 文件都是 PHP 代码,没有任何输出,否则当你包含该文件后,设置 Header 和 Cookie 时会遇到一些麻烦 [注].
注:Header 和 Cookie 必须在输出任何内容之前被发送。
数组简写形式