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

Difference between "function($arg = 0)" and "function($arg)"

问题

在 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() should be compatible with DOMDocument::schemaValidate($filename)

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

而我 运行 PHP 5.5.9$flags 已在 [=50 的 schemaValidate() 构造函数中引入=]PHP 5.5.2,为什么会出现不兼容的问题?

如果 PHP 文档是可信的,或者我是否应该在其他地方检查 正确的函数指纹,当我想覆盖本机方法时,我没有得到 .

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

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

表示$options可选的,如果不传$options,它的默认值为null[=30] =]

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...
}