PHP - 标量类型声明

你好,有抱负的程序员们!今天,我们将踏上一段激动人心的旅程,探索PHP的世界,特别是关注标量类型声明。别担心,如果这些词现在听起来像是在胡言乱语——到了这个教程的结尾,你将像经验丰富的开发者一样自如地使用这些术语!

PHP - Scalar Type Declarations

什么是标量类型声明?

在我们深入之前,让我们分解一下“标量类型声明”究竟是什么意思。在编程中,“标量”是单个值,比如数字或文本字符串。而“类型声明”是一种花哨的说法,意思是我们在告诉PHP我们期望一个函数接收或返回什么类型的数据。

想象一下你正在经营一个柠檬水摊位。你不会希望有人在你问要柠檬时递给你一个篮球,对吧?类型声明基本上就是这样做的——它们确保你的代码得到正确类型的数据来工作。

PHP 7中的标量类型声明

PHP 7引入了一个改变游戏规则的功能:能够为函数参数和返回值声明标量类型。这是一个很大的突破,因为它有助于及早捕获错误,使代码更加可靠。

让我们来看一个简单的例子:

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

echo addNumbers(5, 10); // 输出:15

在这段代码中:

  • int $a, int $b:我们在说 $a$b 都应该是整数。
  • : int:这部分在函数后面声明该函数将返回一个整数。

现在,让我们试试一些淘气的事情:

echo addNumbers("5", "10");

惊喜!这仍然有效,并输出15。但为什么?欢迎来到...

强制模式

默认情况下,PHP 7运行在所谓的“强制模式”下。这就像有一个非常理解你的朋友,即使你表达得不太清楚,他也会试图理解你的意思。

在强制模式下,PHP会尝试将值转换为声明的类型(如果可能)。所以当我们传递字符串"5"和"10"时,PHP会说,“我明白你的意思”,并将它们转换为整数。

这里有一些常见的强制转换表:

输入 声明类型 结果
"42" int 42
"3.14" float 3.14
1 string "1"
true int 1

但如果我们想让PHP更严格呢?接下来是...

严格模式

严格模式就像有一个坚持要精确答案的老师。要启用严格模式,请在PHP文件的顶部添加这行代码:

declare(strict_types=1);

现在,我们再试一次我们的淘气例子:

declare(strict_types=1);

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

echo addNumbers("5", "10");

砰!现在这将抛出一个TypeError。PHP在说,“我要求整数,你却给了我字符串。我对此很不高兴。”

为什么使用标量类型声明?

  1. 更清晰的代码:这就像给未来的你(或其他开发者)留一个便条。“嘿,这个函数期望的是数字!”

  2. 及早捕获错误:而不是得到奇怪的结果,你得到直接指向问题的错误。

  3. 更好的性能:当PHP确切知道期望什么类型时,它可以更好地优化代码。

现实世界的例子

假设你正在构建一个简单的计算器应用程序。以下是如何使用标量类型声明的示例:

declare(strict_types=1);

class Calculator {
public function add(float $a, float $b): float {
return $a + $b;
}

public function subtract(float $a, float $b): float {
return $a - $b;
}

public function multiply(float $a, float $b): float {
return $a * $b;
}

public function divide(float $a, float $b): float {
if ($b == 0) {
throw new Exception("不能除以零!");
}
return $a / $b;
}
}

$calc = new Calculator();

echo $calc->add(5.5, 4.5);      // 输出:10
echo $calc->subtract(10, 3);    // 输出:7
echo $calc->multiply(3, 4);     // 输出:12
echo $calc->divide(10, 2);      // 输出:5

// 在严格模式下这将抛出错误
// echo $calc->add("5", "10");

在这个例子中,我们创建了一个Calculator类,其所有方法都使用了浮点数类型声明。这确保了所有的计算都是在数字上进行的,防止了任何意外的字符串连接或其他类型相关的错误。

结论

PHP中的标量类型声明就像是山路上的护栏。它们帮助你保持代码的轨道,并更容易发现出错的地方。虽然它们一开始可能看起来有点挑剔,但相信我——未来的你会因为它们的清晰度和安全性而感激。

记住,编程是关于清晰沟通的——不仅与计算机,也与其他开发者(包括未来的你!)沟通。类型声明是你工具箱中的另一个工具,用于编写更清晰、更安全、更高效的代码。

现在去声明那些类型吧!你的代码会感激你,你的开发者同事们也会感激你。快乐编码!

Credits: Image by storyset