在PHP中声明变量类型?

我试图让Netbeans用PHP自动完成,并且我了解到此代码在PHP中是有效的:

function blah(Bur $bur) {}

几个问题:

  1. 这实际上对我可以传递给blah方法的变量类型施加任何限制吗?
  2. 如果这只是为了帮助IDE,那对我很好。 如果我不在函数中,如何在PHP中声明变量的类型?
Dan Rosenstark asked 2020-06-27T16:53:15Z
5个解决方案
69 votes

这种类型的提示仅适用于验证函数参数。 您不能声明PHP变量必须始终为某种类型。 这意味着在您的示例中,调用“ blah”时,$ bur必须为Bur类型,但是可以在函数中将$ bur重新分配给非Bur值。

类型提示仅适用于类或接口名称; 例如,您不能声明参数必须为整数。

PHP的类型提示与Java的不同之处在于,讨厌的一个方面是不允许使用NULL值。 因此,如果您想要传递NULL而不是对象的选项,则必须删除类型提示并在函数顶部执行以下操作:

assert('$bur === NULL || $bur instanceof Bur');

编辑:自PHP 5.1起,这最后一段不适用; 您现在可以使用NULL作为默认值,即使带有类型提示也是如此。

编辑:您还可以安装SPL类型处理扩展,该扩展为字符串,整数,浮点数,布尔值和枚举提供了包装器类型。

编辑:从PHP 5.1开始,您还可以使用“数组”;从PHP 5.4开始,您也可以使用“可调用”。

编辑:自PHP 7.0起,您还可以使用“字符串”,“ int”,“浮动”和“布尔”。

JW. answered 2020-06-27T16:53:56Z
29 votes
  1. 如果传递的值不是该类型的值,则为函数参数指定数据类型将导致PHP引发可捕获的致命错误。 但是请注意,您只能指定类的类型,而不能指定诸如字符串或整数之类的原语。
  2. 如果提供的话,大多数IDE都可以从PHPDoc样式注释中推断出一种数据类型。 例如

/**
 * @var string
 */
public $variable = "Blah";
Jim OHalloran answered 2020-06-27T16:54:21Z
7 votes

它被称为类型提示,是PHP 5附带的。如果您来自Java之类的语言,那并不是您所期望的。 如果您未传递期望的类型,则确实会引发错误。 但是,您不能类型提示原语(没有int $ bur)。

J Cooper answered 2020-06-27T16:54:41Z
6 votes

#2:(...)如果我不在函数中,如何在PHP中声明变量的类型?

我最近听说PHP4和5中的“ settype()”和“ gettype()”
您可以随时轻松强制变量类型


从PHP.net:

布尔settype(混合&$ var,字符串$ type)

参量

var:要转换的变量。type:类型的可能值是:

  • “布尔值”(或者,自PHP 4.2.0起,为“布尔”)
  • “整数”(或者,自PHP 4.2.0起,为“ int”)
  • “ float”(仅自PHP 4.2.0起,对于较旧的版本,请使用不建议使用的变体“ double”)
  • “串”
  • “数组”
  • “目的”
  • “ null”(自PHP 4.2.0起)

[:D第一次访问,第一条评论...]

Shad answered 2020-06-27T16:56:02Z
3 votes

这实际上对我可以传递给blah方法的变量类型施加任何限制吗?

这称为类型提示。 根据我刚刚链接的PHP文档,是的,它确实对参数类型施加了限制:“不满足类型提示会导致可捕获的致命错误。”

如果我不在函数中,如何在PHP中声明变量的类型?

阅读类型杂耍。 您无法在PHP中显式定义变量的类型,其类型取决于所使用的上下文。

Jeremy Ruten answered 2020-06-27T16:56:35Z
translate from https://stackoverflow.com:/questions/390932/declaring-variable-types-in-php