主页/PHP笔记/PHP问答/基础应用/PHP中的可选类型声明:提高代码可靠性

PHP中的可选类型声明:提高代码可靠性

介绍

PHP,以其宽松的类型声明而闻名,正逐渐采纳增强代码可靠性的新特性。在PHP 7中引入的可选类型声明作为工具,有助于构建更加整洁、清晰和坚固的代码库。

开始学习类型(Getting Started with Types)

类型声明,也称为类型注释,允许开发人员在函数调用、函数返回类型和类属性中指定预期的数据类型。以下是一个简短的例子:

function add(int $a, int $b): int {
    return $a + $b;
}

该功能要求两个参数均为整数,并且返回的值也是整数。

标量类型声明

标量类型在PHP 7中是一个重要的增强功能,它们允许函数要求参数的类型为int、float、string或bool。以下是使用它们的方法:

function setAge(int $age) {
    echo "You are {$age} years old.";
}

严格类型检查与强制性类型检查

PHP 7 引入了严格的类型检查模式。该模式通过声明来启用。declare(strict_types=1);在文件的顶部,强制PHP遵循指定的数据类型,否则它会抛出一个TypeError异常。以下是行为上的不同之处:

// Coercive mode
function addNumbers($a, $b): int {
    return $a + $b;
}

addNumbers('3', 4.2); // This will work, outputting 7

// Strict mode
declare(strict_types=1);

function addNumbersStrict($a, $b): int {
    return $a + $b;
}

addNumbersStrict('3', 4.2); // TypeError

在强制模式下,PHP 将尽力匹配声明类型;而在严格模式下,则不会这样做。

联合类型

PHP 8 引入了联合类型,允许参数或返回类型接受多种类型。这在多态场景中非常有用:

function processInput(string|int $data) {
    if (is_int($data)) {
        echo "Integer received: $data";
    } else {
        echo "String received: $data";
    }
}

复杂类型:数组和对象

除了基本类型之外,PHP还支持复杂的类型声明,例如数组和对象。这些可以如何使用:

function configure(array $settings) {
    // Process settings array
}

class User {}

function newUser(User $user) {
    // Process User object
}

可选值和默认值

可选类型,用问号前缀于类型声明,允许参数为指定类型的值或null。以下是使用可选类型的示例:

function setProfile(string $name, ?string $bio) {
    if (is_null($bio)) {
        echo "Welcome, $name!";
    } else {
        echo "Welcome, $name! Read their bio: $bio";
    }
}

房产类型声明

在PHP 7.4中,引入了属性类型声明,提供了为类和对象属性声明类型的功能。示例:

class Item {
    public int $id;
    public string $name;
}

高级:变长参数和类型

变长参数列表也可以利用类型声明,确保传入变量长度参数列表中的所有值都是同一种类型:

function addAll(int ...$numbers): int {
    return array_sum($numbers);
}

在匿名函数中使用类型。

匿名函数,也称为闭包,可以通过以下方式受益于类型声明:


$arrayOfNumbers = [1, 2, 3];

$arrayOfNumbers = array_map(
   function (int $number): int {
       return $number * 2;
   },
   $arrayOfNumbers
);

后向兼容性

新的类型声明通常具有向后兼容性,但在引入到遗留代码时应谨慎行事。在使用非正式类型的代码中可能会出现类型错误。

结论。

PHP类型声明增强了代码的健壮性和清晰度,通过引入一层强化开发者的意图并确保代码按预期工作的方式。有多种选项可供选择,从基本类型到复杂类型,这些工具为编写整洁、可预测的PHP代码提供了宝贵的资源。