在PHP中声明变量类型?

时间:2008-12-24 06:57:12

标签: php variable-types

I was trying to get my Netbeans to autocomplete with PHP,我了解到这段代码在PHP中有效:

function blah(Bur $bur) {}

几个问题:

  1. 这是否实际上对我可以传递给blah方法的变量类型施加了任何限制
  2. 如果这只是为了帮助IDE,那对我没关系。 如果我不在函数中,如何在PHP中声明变量的类型?

5 个答案:

答案 0 :(得分:68)

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

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

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

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

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

编辑:您还可以安装SPL Type Handling扩展程序,它为您提供字符串,整数,浮点数,布尔值和枚举的包装类型。

编辑:您也可以使用自PHP 5.1以来的“数组”,以及自PHP 5.4以来的“可调用”。

编辑:自PHP 7.0起,您还可以使用“string”,“int”,“float”和“bool”。

答案 1 :(得分:29)

  1. 如果传递的值不是该类型的值,则为函数参数指定数据类型将导致PHP抛出可捕获的致命错误。但请注意,您只能指定类的类型,而不能指定字符串或整数等基元。
  2. 大多数IDE可以从PHPDoc样式注释中推断出数据类型(如果提供了注释)。 e.g。
  3. 
    /**
     * @var string
     */
    public $variable = "Blah";
    

答案 2 :(得分:7)

它被称为类型提示,添加了PHP 5.如果你来自Java这样的语言,那么你可能不会期待它。如果您没有传入预期的类型,它确实会导致抛出错误。但是你不能输入提示原语(no int $ bur)。

答案 3 :(得分:6)

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

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


来自PHP.net:

bool settype(mixed& $ var,string $ type)

参数

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

  • “boolean”(或者,自PHP 4.2.0起,“bool”)
  • “integer”(或者,自PHP 4.2.0起,“int”)
  • “float”(仅可用于PHP 4.2.0,旧版本使用已弃用的变体“double”)
  • “的字符串”
  • “阵列”
  • “对象”
  • “null”(自PHP 4.2.0起)

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

答案 4 :(得分:3)

  

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

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

  

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

阅读type juggling。您无法在PHP中显式定义变量的类型,其类型由其使用的上下文决定。