“function($ arg = 0)”和“function($ arg)”之间的区别

时间:2015-03-19 15:34:11

标签: php dom function-signature

问题

在PHP官方文档中,我找到了这样的声明:

public int save ( string $filename [, int $options ] )

并且像这样:

public mixed load ( string $filename [, int $options = 0 ] )

$options参数之间的区别是什么?

第二个我确定$options参数设置为 0 (当我没有指定它时)。 但第一个?是不是说该方法有2个强制性参数? (那么方括号是什么?)。

实施例

我试图覆盖这个:

public bool schemaValidate ( string $filename [, int $flags ] )

(从schemaValidate() PHP documentation粘贴的指纹)

但是如果我声明第二个参数$flags,那么我得到一个

  

SchemaValidate()应该与DOMDocument :: schemaValidate($ filename)兼容

如果我删除了$flags的声明,那么一切正常(就像我在< PHP 5.5.2

当我在 PHP 5.5.2 $flags构造函数中运行 PHP 5.5.9 schemaValidate()时,为什么我会得到不相容的问题?

如果PHP文档可信,或者我应该检查其他地方以获取正确的函数指纹,那么当我想覆盖原生方法时,我不会

我试着查看源代码,但是the function is merely an alias to a C function

1 个答案:

答案 0 :(得分:3)

public int save ( string $filename [, int $options ] )

表示$options 可选,如果您未通过$options,则其默认值为 null

public mixed load ( string $filename [, int $options = 0 ] )

表示$options 可选,如果您未通过$options,则其默认值为 0

要获得第一个文档,他们必须自己创建一个函数并覆盖它们,如下所示:

public int save ( string $filename ){
    //do some stuff...
}

//later in code...

public int save ( string $filename, int $options ){
    //do some stuff...
}

在第二个问题中,他们只做了类似的事情:

public mixed load ( string $filename, int $options = 0 ){
    //do some stuff...
}