PHP7具有很多用于编写高性能、高效代码的新特性,同时也以除了一些历史版本中过时的特性,这些过时的特性如果在PHP7中使用会触发一个error错误。目前大多数的fatal错误都可以异常捕获,所以PHP不再显示一些不标准的fatal错误i,取而代之的是抛出一个携带很多可用信息的异常。
### 一、OOP特性
在使用PHP7之前,我们在函数和类之间传递参数时不必声明变量类型,同样在返回数据时也不必声明变量类型。任何数据类型都可以被传递返回。
这样就给PHP带来了很大的问题:PHP不清楚你传递的是什么类型的变量,函数和方法接收到的变量也不知道是什么类型。为了解决这个问题,PHP7引入了类型声明,目前明确的有两类变量可以声明类型:形参、返回值。
#### 1. 形参类型声明
`PHP7`支持的形参声明的类型有整型、浮点型、字符串型、布尔类型,可以用在函数形参及对象的方法形参上。
~~~
class Person{
public function age(int $age){
return $age;
}
public function name(string $name){
return $name;
}
public function isAlive(bool $alive){
return $alive;
}
}
$person = new Person();
echo $person->name('Bob');
echo $person->age('19');
echo $person->isAlive(TRUE);
~~~
默认情况下,形参声明不是完全被限制的,这就意味着我们可以传递一个浮点数给期望得到整型数的方法。也可以做些限制,如: `declare(strict_type = 1)`;
此时我们若传递一个浮点数给age的话,便会得到一个`Uncaught Type Error`,这个fatal错误告诉我们,`Person : : age`只能接受一个整型数而非浮点数。在需要字符串形参的情况下,如果你不提供字符串形参的话,也会出现类似报错。例如:
~~~
echo $person->alive('true');
~~~
#### 2. 返回类型声明
PHP7 无论在函数还是对象的方法中都支持返回类型的声明。
~~~
class Person{
public function age(float $age) :string{
return 'Age is '.$age;
}
public function name(string $name) : string{
return $name;
}
public function isAlive(bool $alive) : string{
return ($alive)?'yes':'no';
}
}
~~~
上述代码所示,返回类型声明使用了`data_type`语法,对于形参类型声明与返回类型声明一样的情况是无影响的。
#### 3. 命名空间与`use`关键字批量声明
当代码量规模变大的时候,很多类会放在命名空间下,这样方便维护和管理。但是当出现一个命名空间下有很多类而且我们要一次性使用多个类时,我们还要把他们逐个声明在代码的顶部。