是的,现在它可能,经过长时间的讨论,实施标量函数参数和返回值的类型提示的提议刚刚获得批准,目前的投票数最多,请查看详细信息:
标量类型提示包括声明函数参数的类型和返回值,可以是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是一种特殊情况,以便与类,callables和数组的当前类型声明保持一致。 默认情况下不接受NULL,除非它是一个参数并且显式地给出了默认值NULL,例如:function sample(int $ a = NULL);
这种方法有很多优点。 你得到了类型安全。 这意味着您最终可以静态分析代码! 您可以检测到意外从一个函数中获取字符串并将其作为整数传递给另一个函数的错误。对我来说,每天都使用PHP并将Java视为OOP语言的参考的开发人员,这是PHP的一个很好的进步。