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