Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 类型提示:默认参数_Php_Type Hinting_Default Parameters - Fatal编程技术网

Php 类型提示:默认参数

Php 类型提示:默认参数,php,type-hinting,default-parameters,Php,Type Hinting,Default Parameters,PHP5引入了类型暗示。函数现在可以强制参数成为对象(通过在函数原型中指定类的名称)或数组(自PHP5.1以来)。但是,如果将NULL用作默认参数值,则允许它作为以后任何调用的参数 以下摘录自上述内容: 如果将NULL用作默认参数值,则允许它作为以后任何调用的参数。 以上的意思是: 如果默认参数与类型提示一起使用,则只能将NULL作为默认值 即代码1中的代码错误,导致: 致命错误:带有类类型提示的参数的默认值只能是NULL 代码1: 其中代码2中的as代码是正确的: 代码2: 为什么在php中分

PHP5引入了类型暗示。函数现在可以强制参数成为对象(通过在函数原型中指定类的名称)或
数组(自PHP5.1以来)。但是,如果将
NULL
用作默认参数值,则允许它作为以后任何调用的参数

以下摘录自上述内容:

如果将
NULL
用作默认参数值,则允许它作为以后任何调用的参数。

以上的意思是:

如果默认参数与类型提示一起使用,则只能将
NULL
作为默认值

代码1中的代码错误,导致:

致命错误:带有类类型提示的参数的默认值只能是
NULL

代码1: 其中代码2中的as代码是正确的:

代码2:
为什么在php中分配此约束?

您不能键入提示字符串,只能键入提示对象和数组,因此这是不正确的:

function setName ( string $name = "happ") {
(这里没有出现编译时错误的原因是PHP将“string”解释为类的名称。)

文件中的措辞意味着,如果您这样做:

function foo(Foo $arg) {
function foo(Foo $arg = null) {
function foo(array $foo = array(1, 2, 3))
那么传递给foo()的参数必须是对象foo的实例。但如果你这样做:

function foo(Foo $arg) {
function foo(Foo $arg = null) {
function foo(array $foo = array(1, 2, 3))
然后,传递给foo()的参数可以是对象foo的实例,也可以是null。还要注意,如果您这样做:

function foo(Foo $arg) {
function foo(Foo $arg = null) {
function foo(array $foo = array(1, 2, 3))
那么就不能调用foo(null)。如果需要此功能,可以执行以下操作:

function foo(array $foo = null) {
    if ($foo === null) {
        $foo = array(1, 2, 3);
    }
[Edit 1]
从PHP5.4开始,您可以键入提示
可调用

function foo(callable $callback) {
    call_user_func($callback);
}

[Edit 2]
从PHP7.0开始,您可以键入hint
bool
float
int
string
。这使得问题中的代码语法有效。从PHP7.1开始,您可以键入提示
iterable

这是编译时间与运行时值之间的关系。编译时只允许文本值(字符串、数字、布尔值和NULL)。PHP处理器此时无法知道所有可能的类,因此无法在函数参数中创建对象的实例

我从摘录中所期望的是,在通常情况下,将NULL传递给类型提示函数将引发异常/错误。如果将默认值设置为NULL,那么如果传递NULL,则不会引发此异常。我还没有测试它,这正是我所期望的。(在PHP5中也称为类型提示)PHP7支持
字符串
类型

这些措施包括:

  • 类/接口名称(>=PHP5.0.0)
  • self
    (>=PHP5.0.0)
  • 数组
    (>=PHP5.1.0)
  • callable
    (>=PHP5.4.0)
  • bool
    float
    int
    string
    (>=PHP7.0.0)
  • iterable—可遍历(>=PHP7.1.0)的数组或实例

感谢:
这是编译时间与运行时值的问题。编译时只允许文本值(字符串、数字、布尔值和NULL)。

第二段请参考上述答案。这是一个非常过时的答案。我只想告诉未来的读者,php很可能在不久的将来支持某种形式的标量类型提示,所以这个答案已经过时了。@rambocoder我们仍然在等待PHP5.6中的标量类型提示。类型提示字符串和其他标量现在在PHP7中是可能的,但我在键入hinted
boolean$foo=true
时遇到了这个错误,因为它必须是
bool$foo=true
。也就是说,当类型无效时会出现此错误。