Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.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_Oop_Function_Parameters - Fatal编程技术网

在PHP中向方法传递多个参数

在PHP中向方法传递多个参数,php,oop,function,parameters,Php,Oop,Function,Parameters,我现在正在研究一个简单的类来了解OOP,我需要一些函数方面的帮助。该函数接收各种参数,其中一些参数是可选的: public function Test($req, $alsoreq, $notreq = null, $notreq2 = null, $notreq3 = null) { ... } 如何调用函数,传递前两个参数和最后一个参数 例如: Test('req', 'alsoreq', 'notreq3'); 忽略notreq 2和notreq 我试过了 Test('re

我现在正在研究一个简单的类来了解OOP,我需要一些函数方面的帮助。该函数接收各种参数,其中一些参数是可选的:

public function Test($req, $alsoreq, $notreq = null, $notreq2 = null, $notreq3 = null)
{ 
    ...
}
如何调用函数,传递前两个参数和最后一个参数

例如:

Test('req', 'alsoreq', 'notreq3'); 
忽略
notreq 2
notreq

我试过了

Test('req', 'alsoreq', '', '', 'notreq3');

但这看起来既丑陋又刻薄。

你不能。想一想,如果你能做到这一点,PHP如何判断第三个参数应该是
$notreq
$notreq2
还是
$notreq3
?一种不那么粗俗的方式是:

Test($req, $alsoreq, NULL, NULL, $notreq3);
正如您明确指出的,前两个可选参数是
NULL

明智地选择论点的顺序,让那些经常使用的论点排在第一位。
或者,您可以使用阵列:

public function Test($req, $alsoreq, array $notreq) { ... }

// no optional args
Test($req, $alsoreq);

$optional = array('arg1' => 'something', 'arg2' => 'something else');
Test($req, $alsoreq, $optional);

$optional = array('arg3' => 'hello');
Test($req, $alsoreq, $optional);
似乎没有办法。 如所述:

请注意,使用默认值时 参数,任何默认值都应为on 任何非默认值的右侧 论据;否则,事情就不会发生 按预期工作

您正试图将非默认值(notreq3)置于默认值(notreq2,notreq1)的右侧。 丑陋和刻薄的方式可能更为正确

问候,, 哔叽

  • 编写一个名为aboutMe的函数
  • 它需要两个参数
    $name
    $age
  • 它应该
    回显“你好!我的名字是$name,我是$age-year。”
  • 调用您的函数并查看结果面板,看看它是否有效 提示

    "Hello! My name is " . $name . " and I am " . $age . " years old."
    

    仔细考虑是否需要所有这些参数。其中一些可能更好地作为成员变量,您可以在构造函数或setter方法中设置。这将使我更容易做出选择。例如:查询('table','*','','0,10');Being:query($table,$from,$where,$orderby,$limit)一些相关问题:;本打算提交我的答案,但我刷新了页面只是为了检查你是否编辑了你的答案。唉,你有;)+1如果您要这样做,您最好只测试一个参数—一个数组。我明白了。。。谢谢你的提示。不幸的是,我想我会坚持我所做的,因为在类内处理要简单得多。你们知道根据Zend PHP最佳实践,这是否是错误的吗?@Vinny,被认为是错误的实践在PHP中是没有意义的,因为语言本身并不十分一致。我过去常常遇到这样的问题,但在使用了其他语言之后,我放下了内疚,接受了这一点,我是解决PHP局限性的人。例如,在Python中,您可以轻松地执行此操作。但是PHP并不采用特定的方式,有些人使用Java编写代码,有些人使用Perl编写代码,还有一些人使用Python编写代码。我怀疑pythonists会更倾向于采用这个答案中展示的实现。谢谢。你知道这是否违背了PHP的最佳实践吗?