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()
的改进