PHP - 标量类型声明
你好,有抱负的程序员们!今天,我们将踏上一段激动人心的旅程,探索PHP的世界,特别是关注标量类型声明。别担心,如果这些词现在听起来像是在胡言乱语——到了这个教程的结尾,你将像经验丰富的开发者一样自如地使用这些术语!
什么是标量类型声明?
在我们深入之前,让我们分解一下“标量类型声明”究竟是什么意思。在编程中,“标量”是单个值,比如数字或文本字符串。而“类型声明”是一种花哨的说法,意思是我们在告诉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在说,“我要求整数,你却给了我字符串。我对此很不高兴。”
为什么使用标量类型声明?
-
更清晰的代码:这就像给未来的你(或其他开发者)留一个便条。“嘿,这个函数期望的是数字!”
-
及早捕获错误:而不是得到奇怪的结果,你得到直接指向问题的错误。
-
更好的性能:当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