我试图让我的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 可以使用“callable”。
编辑:自 PHP 7.0 开始,可以使用“string”、“int”、“float”和“bool”。
编辑:自 PHP 7.4 开始,您可以将类/接口/特征的成员变量声明为特定类型,例如public int $a;
,声明为这种方式的变量不能赋值为另一种类型的值。在 PHP 8.0 中,您还可以使用联合类型,例如 string|int
,而在 PHP 8.1 中,您可以在联合类型中使用类。
https://www.php.net/manual/zh/language.types.declarations.php
/**
* @var string
*/
public $variable = "Blah";
更新于 2021 年: PHP 7(在此时已经过去了几年)起,原始类型也可以用于函数参数声明。从 7.1 版本开始,可以在类型前面加上 ? 表示可为空性。现在还可以声明返回类型。因此,以下代码在当前版本的 PHP 中是有效的:
public function hasFoo(?int $numFoos) :bool {
phpStorm(我目前首选的IDE)可以使用所有这些类型来完成代码,因此我不需要像以前那样写太多的phpDoc注释进行键入。
这被称为类型提示,在PHP 5中添加。如果你来自像Java这样的语言,它并不完全是你所期望的。它会在你没有传入预期类型时引发错误。但你不能对原始类型进行类型提示(如 int $bur)。
#2 : (...) 如果我不在函数内部,如何在PHP中声明变量的类型?
我最近了解了 PHP4 和 5 中的 "settype()" 和 "gettype()", 您可以随时轻松强制转换变量类型。
来自 PHP.net 的说明:
bool settype ( mixed &$var , string $type )
参数
var:要转换的变量。 type:类型的可能值为:
[ :D 第一次访问,第一次评论...]
myFunc(MyClass $x = NULL)
,然后调用myFunc(NULL)
或myFunc()
而不会出错。 - JW.functionName(int[] $someIds)
或functionName(SomeObject[] $someObjects)
,但是有部分解决方法:https://dev59.com/KlsX5IYBdhLWcg3wDsA8#34273821 - mikhail-t