PHP 7 和 PHP 5 在语法上有一些显著的区别和改进。以下是一些主要的区别:
int, float, string, bool)。PHP 5 不支持标量类型声明,只能使用数组、对象、回调函数等类型声明。
// PHP 7
function add(int $a, int $b): int {
return $a + $b;
}
PHP 5 不支持返回类型声明。
// PHP 7
function getSum(int $a, int $b): int {
return $a + $b;
}
??)??),用于简化检查变量是否存在且不为 null 的操作。PHP 5 不支持空合并运算符。
// PHP 7
$username = $_GET['username'] ?? 'guest';
<=>)<=>),用于比较两个表达式的大小,返回 -1, 0, 或 1。PHP 5 不支持太空船运算符。
// PHP 7
echo 1 <=> 1; // 0
echo 1 <=> 2; // -1
echo 2 <=> 1; // 1
define() 定义常量数组。PHP 5 不支持常量数组。
// PHP 7
define('ANIMALS', ['dog', 'cat', 'bird']);
PHP 5 不支持匿名类。
// PHP 7
$obj = new class {
public function sayHello() {
echo "Hello!";
}
};
$obj->sayHello();
\u{xxxx} 来表示 Unicode 字符。PHP 5 不支持 Unicode 转义语法。
// PHP 7
echo "\u{1F60A}"; // 输出笑脸表情
declare(strict_types=1)declare(strict_types=1) 来启用严格类型检查。PHP 5 不支持严格类型模式。
// PHP 7
declare(strict_types=1);
function add(int $a, int $b): int {
return $a + $b;
}
Throwable 接口Throwable 接口,Exception 和 Error 都实现了这个接口,使得错误处理更加一致。PHP 5 中,Error 不是 Exception 的子类。
// PHP 7
try {
// some code that may throw an exception or error
} catch (Throwable $e) {
echo $e->getMessage();
}
intdiv() 函数intdiv() 函数,用于执行整数除法。PHP 5 不支持 intdiv() 函数。
// PHP 7
echo intdiv(10, 3); // 3
Closure::call() 方法Closure::call() 方法,允许临时绑定闭包到对象并调用它。PHP 5 不支持 Closure::call() 方法。
// PHP 7
$closure = function() { return $this->value; };
$result = $closure->call(new class { public $value = 42; });
echo $result; // 42
Generator 的 return 表达式return 表达式来返回值。PHP 5 不支持生成器函数中的 return 表达式。
// PHP 7
function gen() {
yield 1;
yield 2;
return 3;
}
$gen = gen();
foreach ($gen as $val) {
echo $val; // 1, 2
}
echo $gen->getReturn(); // 3
list() 的改进list() 中使用数组的键。PHP 5 的 list() 只能使用索引数组。
// PHP 7
$data = ['a' => 1, 'b' => 2];
list('a' => $a, 'b' => $b) = $data;
echo $a; // 1
echo $b; // 2
session_start() 的改进session_start() 函数可以接受一个选项数组作为参数。PHP 5 的 session_start() 不支持选项数组。
// PHP 7
session_start([
'cache_limiter' => 'private',
'read_and_close' => true,
]);
assert() 的改进assert() 函数可以接受一个表达式作为字符串,并且可以抛出异常。PHP 5 的 assert() 只能接受布尔表达式。
// PHP 7
assert('2 < 1', new AssertionError('Assertion failed'));
use 语句的改进use 语句中同时导入多个类或函数。PHP 5 不支持这种语法。
// PHP 7
use Some\Namespace\{ClassA, ClassB, ClassC as C};
null 合并运算符 (??)null 合并运算符 (??),用于简化检查变量是否存在且不为 null 的操作。PHP 5 不支持 null 合并运算符。
// PHP 7
$username = $_GET['username'] ?? 'guest';
int 和 float 类型声明int 和 float 类型。PHP 5 不支持这种类型声明。
// PHP 7
function add(int $a, float $b): float {
return $a + $b;
}
void 返回类型void 返回类型,表示函数不返回任何值。PHP 5 不支持 void 返回类型。
// PHP 7.1
function logMessage(string $message): void {
echo $message;
}
iterable 伪类型iterable 伪类型,表示可以遍历的值(如数组或实现了 Traversable 接口的对象)。PHP 5 不支持 iterable 伪类型。
// PHP 7.1
function process(iterable $items): void {
foreach ($items as $item) {
// process item
}
}
nullable 类型nullable 类型,允许在类型声明前加上 ? 表示该类型可以为 null。PHP 5 不支持 nullable 类型。
// PHP 7.1
function getUsername(?string $username): ?string {
return $username;
}
list() 的改进list() 中使用数组的键。PHP 5 的 list() 只能使用索引数组。
// PHP 7.1
$data = ['a' => 1, 'b' => 2];
list('a' => $a, 'b' => $b) = $data;
echo $a; // 1
echo $b; // 2
void 返回类型void 返回类型,表示函数不返回任何值。PHP 5 不支持 void 返回类型。
// PHP 7.1
function logMessage(string $message): void {
echo $message;
}
iterable 伪类型iterable 伪类型,表示可以遍历的值(如数组或实现了 Traversable 接口的对象)。PHP 5 不支持 iterable 伪类型。
// PHP 7.1
function process(iterable $items): void {
foreach ($items as $item) {
// process item
}
}
nullable 类型nullable 类型,允许在类型声明前加上 ? 表示该类型可以为 null。PHP 5 不支持 nullable 类型。
// PHP 7.1
function getUsername(?string $username): ?string {
return $username;
}
list() 的改进list() 中使用数组的键。PHP 5 的 list() 只能使用索引数组。
// PHP 7.1
$data = ['a' => 1, 'b' => 2];
list('a' => $a, 'b' => $b) = $data;
echo $a; // 1
echo $b; // 2
void 返回类型void 返回类型,表示函数不返回任何值。PHP 5 不支持 void 返回类型。
// PHP 7.1
function logMessage(string $message): void {
echo $message;
}
iterable 伪类型iterable 伪类型,表示可以遍历的值(如数组或实现了 Traversable 接口的对象)。PHP 5 不支持 iterable 伪类型。
// PHP 7.1
function process(iterable $items): void {
foreach ($items as $item) {
// process item
}
}
nullable 类型nullable 类型,允许在类型声明前加上 ? 表示该类型可以为 null。PHP 5 不支持 nullable 类型。
// PHP 7.1
function getUsername(?string $username): ?string {
return $username;
}
list() 的改进list() 中使用数组的键。PHP 5 的 list() 只能使用索引数组。
// PHP 7.1
$data = ['a' => 1, 'b' => 2];
list('a' => $a, 'b' => $b) = $data;
echo $a; // 1
echo $b; // 2
void 返回类型void 返回类型,表示函数不返回任何值。PHP 5 不支持 void 返回类型。
// PHP 7.1
function logMessage(string $message): void {
echo $message;
}
iterable 伪类型iterable 伪类型,表示可以遍历的值(如数组或实现了 Traversable 接口的对象)。PHP 5 不支持 iterable 伪类型。
// PHP 7.1
function process(iterable $items): void {
foreach ($items as $item) {
// process item
}
}
nullable 类型nullable 类型,允许在类型声明前加上 ? 表示该类型可以为 null。PHP 5 不支持 nullable 类型。
// PHP 7.1
function getUsername(?string $username): ?string {
return $username;
}
list() 的改进list() 中使用数组的键。PHP 5 的 list() 只能使用索引数组。
// PHP 7.1
$data = ['a' => 1, 'b' => 2];
list('a' => $a, 'b' => $b) = $data;
echo $a; // 1
echo $b; // 2
void 返回类型void 返回类型,表示函数不返回任何值。PHP 5 不支持 void 返回类型。
// PHP 7.1
function logMessage(string $message): void {
echo $message;
}
iterable 伪类型iterable 伪类型,表示可以遍历的值(如数组或实现了 Traversable 接口的对象)。PHP 5 不支持 iterable 伪类型。
// PHP 7.1
function process(iterable $items): void {
foreach ($items as $item) {
// process item
}
}
nullable 类型nullable 类型,允许在类型声明前加上 ? 表示该类型可以为 null。PHP 5 不支持 nullable 类型。
// PHP 7.1
function getUsername(?string $username): ?string {
return $username;
}
list() 的改进list() 中使用数组的键。PHP 5 的 list() 只能使用索引数组。
// PHP 7.1
$data = ['a' => 1, 'b' => 2];
list('a' => $a, 'b' => $b) = $data;
echo $a; // 1
echo $b; // 2
void 返回类型void 返回类型,表示函数不返回任何值。PHP 5 不支持 void 返回类型。
// PHP 7.1
function logMessage(string $message): void {
echo $message;
}
iterable 伪类型iterable 伪类型,表示可以遍历的值(如数组或实现了 Traversable 接口的对象)。PHP 5 不支持 iterable 伪类型。
// PHP 7.1
function process(iterable $items): void {
foreach ($items as $item) {
// process item
}
}
nullable 类型nullable 类型,允许在类型声明前加上 ? 表示该类型可以为 null。PHP 5 不支持 nullable 类型。
// PHP 7.1
function getUsername(?string $username): ?string {
return $username;
}
list() 的改进