在 PHP 中声明变量类型?
我试图让我的Netbeans用PHP自动完成,我了解到这段代码在PHP中是有效的:
function blah(Bur $bur) {}
几个问题:
- 这实际上是否对我可以传递给blah方法的变量类型施加了任何限制?
- 如果这只是为了帮助IDE,那对我来说没关系。如果我不在函数中,如何在PHP中声明变量的类型?
我试图让我的Netbeans用PHP自动完成,我了解到这段代码在PHP中是有效的:
function blah(Bur $bur) {}
几个问题:
此类型提示仅适用于验证函数参数;你不能声明PHP变量必须始终属于某种类型。这意味着在您的示例中,当调用“blah”时,$bur必须是Bur类型,但$bur可以重新分配给函数中的非Bur值。
类型提示仅适用于类名或接口名;例如,您不能声明参数必须是整数。
PHP的类型提示的一个令人讨厌的方面,与Java不同,是不允许使用NULL值。因此,如果您想要传递 NULL 而不是对象的选项,则必须删除类型提示,并在函数顶部执行类似如下操作:
assert('$bur === NULL || $bur instanceof Bur');
编辑:最后一段自 PHP 5.1 起不适用;您现在可以使用 NULL 作为默认值,即使带有类型提示也是如此。
编辑:还可以安装 SPL 类型处理扩展,它为您提供了字符串、整数、浮点数、布尔值和枚举的包装器类型。
编辑:从 PHP 5.1 开始,您也可以使用“array”,从 PHP 5.4 开始,也可以使用“可调用”。
编辑:从 PHP 7.0 开始,您也可以使用“string”、“int”、“float”和“bool”。
编辑:从 PHP 7.4 开始,您可以将类/接口/特征的成员变量声明为特定类型,例如 ,并且以这种方式声明的变量不能分配给另一种类型的值。您还可以使用联合类型(如 PHP 8.0),也可以使用从 PHP 8.1 开始的联合类型中的类。public int $a;
string|int
https://www.php.net/manual/en/language.types.declarations.php
/**
* @var string
*/
public $variable = "Blah";
2021年更新:从 PHP 7 开始(此时已有好几年的历史),也可以为函数参数声明基元类型。可空性也可以用 ?从7.1开始,在类型前面。您现在也可以声明返回类型。所以这是现在有效的PHP:
public function hasFoo(?int $numFoos) :bool {
phpStorm(我目前首选的IDE)很乐意使用所有这些类型来完成代码,所以我不需要像以前那样多的phpDoc注释来打字。