是的,现在有可能,
经过长时间的讨论,一个为标量函数参数和返回值实现类型提示的提案刚刚获得了迄今为止最高票数的批准,请查看详细信息:
标量类型提示包括声明函数参数的类型和返回值,类型可以是 int、float、string 和 bool。这允许 PHP 运行时引擎检查传递给参数函数的值的类型并返回值是预期的类型,以便检测最终的编程错误。
过去的 PHP 版本已经允许对象、数组和可调用对象的类型提示。
当前实现引入了五个新的保留字:int、float、bool、string 和 numeric。这些以前没有保留,因为强制转换是词法分析器中的一种特殊情况。
Example :
function test(float $a) {
var_dump($a);
}
test(1); // float(1)
test("1"); // float(1)
test(1.0); // float(1)
test("1a"); // E_RECOVERABLE_ERROR
test("a"); // E_RECOVERABLE_ERROR
test(""); // E_RECOVERABLE_ERROR
test(1.5); // float(1.5)
test(array()); // E_RECOVERABLE_ERROR
test(new StdClass); // E_RECOVERABLE_ERROR
您还可以选择在源文件中声明,您可以在其中允许 Scaler 类型提示。它必须是配置脚本的第一行,并且不能在同一文件的其他位置声明。
Like : declare(strict_types=1);
在运行时,当 PHP 引擎尝试返回一个值时,它会检查是否与声明的不匹配,它会抛出一个致命错误,例如,
致命错误:传递给 increment() 的参数 1 必须是整数类型,给定字符串
借助这一新的声明特性,您可以通过检测由于将错误类型的值传递给函数而导致的早期编程错误,从而编写更健壮的应用程序。
类型的自动更改也可能发生。比如int类型可以自动变成float类型参数,
function test(float $x){
var_dump($x);
}
test(10); // works fine
声明返回类型
我们可以声明返回类型,在函数声明的最后一个括号和第一个括号之间添加一个冒号,后跟预期的类型。
对于不返回任何值的函数,不应在返回类型声明部分添加任何内容。
function mustReturnInt(): int { ... }
function mustReturnString(): string { ... }
function mustReturnBool(): bool { ... }
function mustReturnFloat(): float { ... }
function doesNotReturnAnything() { ... }
稍微复杂一点的例子
declare(strict_types=1);
class StrictTypesTestingClass {
public function returnSameInt(int $value): int { return $value; }
public function returnSameFloat(float $value): float { return $value; }
public function returnSameString(string $value): string { return $value; }
public function returnSameBool(bool $value): bool { return $value; } }
$check = new StrictTypesTestingClass(); // calls that work print $check->returnSameInt(10);
print $check->returnSameFloat(10.0);
print $check->returnSameString("test");
print $check->returnSameBool(true) ? 'true' : 'false'; // calls that throw exceptions
print $check->returnSameInt("10");
print $check->returnSameFloat("10.0");
print $check->returnSameString(10);
print $check->returnSameBool("true");
弱类型检查和类型转换的行为:弱类型检查模式可以与语句 declare(strict_types=0); 一起使用或者没有严格的类型声明。有几点需要考虑:
对扩展或内置 PHP 函数的弱类型检查调用与以前的 PHP 版本具有相同的行为
新标量类型声明的弱类型检查规则与扩展或内置 PHP 函数的规则基本相同。
NULL 是一种特殊情况,以便与类、可调用对象和数组的当前类型声明保持一致。默认情况下不接受 NULL,除非它是一个参数并且明确地给出了一个默认值 NULL,例如:function sample(int $a = NULL);
这种方法有很多优点。你得到类型安全。这意味着您终于可以静态分析代码了!您可以检测意外从一个函数中获取字符串并将其作为整数传递给另一个函数的错误。对于我这个每天使用 PHP 并将 Java 视为 OOP 语言参考的开发人员来说,这是 PHP 的一大进步.