我开始使用Java进行OOP,现在我对PHP非常沉重。是否有可能用Java中的不同参数创建多个函数?或者,这种语言的解释性/非类型性会阻止这种情况并导致冲突?在PHP中使用多个参数的同名函数
回答
其他人有答案很好的代码解释。这是在更高的层面上来讲的解释:Java支持Method overloading这是你指的是当你谈论与同名但不同参数的功能是什么。由于PHP是一种动态类型的语言,这是不可能的。相反,PHP支持Default arguments,您可以使用它来获得相同的效果。
不,这是不可能的,因为PHP无法从参数推断你想要的函数(你不指定你期望的类型)。但是,您可以将默认值赋予php中的参数。
这样调用者可以给出不同数量的参数。这将会调用相同的功能。
实施例是:
function test($a = true)
这给出了默认设置为TRUE,如果给出0参数,并采取主叫值,如果1个给出参数。
简答题:不可以。只能有一个具有给定名称的函数。
较长的回答:你可以通过创建一个令人费解的包括系统,包括与观点的权利号码的功能做到这一点。或者,更好的是,您可以利用PHP允许参数的默认值以及可变数量的参数。
要利用默认值只是定义功能,当值分配给一个参数:
function do_something($param1, $param2, $param3 = 'defaultvaule') {}
这是普遍的做法是使用默认值参数的函数声明的结尾,因为它们可以被省略当函数被调用,使语法使用它们更加清晰:
do_something('value1', 'value2'); // $param3 is 'defaultvaule' by default
您还可以通过使用func_num_args()
和func_get_arg()
得到的参数发送的参数变量数量:
<?php
function dynamic_args() {
echo "Number of arguments: " . func_num_args() . "<br />";
for($i = 0 ; $i < func_num_args(); $i++) {
echo "Argument $i = " . func_get_arg($i) . "<br />";
}
}
dynamic_args("a", "b", "c", "d", "e");
?>
以下是不可能用PHP
function funcX($a){
echo $a;
}
function funcX($a,$b){
echo $a.$b;
}
而是做这样
function funcX($a,$b=2){
echo $a.$b;
}
funcX(1)
将显示12
,func(1,3)
将显示13
如果你正在处理类,你可以使用重载方法__call()
(见Overloading)如:
class Foo {
public function doSomethingWith2Parameters($a, $b) {
}
public function doSomethingWith3Parameters($a, $b, $c) {
}
public function __call($method, $arguments) {
if($method == 'doSomething') {
if(count($arguments) == 2) {
return call_user_func_array(array($this,'doSomethingWith2Parameters'), $arguments);
}
else if(count($arguments) == 3) {
return call_user_func_array(array($this,'doSomethingWith3Parameters'), $arguments);
}
}
}
}
然后,你可以这样做:
$foo = new Foo();
$foo->doSomething(1,2); // calls $foo->doSomethingWith2Parameters(1,2)
$foo->doSomething(1,2,3); // calls $foo->doSomethingWith3Parameters(1,2,3)
这可能不是最好的例子,但__call
可以非常方便的时候。基本上你可以用它来捕获方法不存在的方法调用。
但它不像Java一样简单。
+1,有趣的解决方法;) – 2010-01-27 14:56:38
这很好,因为如果2个参数的预期数据类型不同于3个参数,则不必担心检查类型 – andrewtweber 2014-12-23 19:31:09
与其他人一样,默认情况下不支持。 Felix的例子使用__call()
可能是最好的方法。否则,如果您使用的是彼此继承的类,则始终可以在您的子类中重载方法名称。这也可以让你调用父方法。
把这些类例如...
class Account {
public function load($key,$type) {
print("Loading $type Account: $key\n");
}
}
class TwitterAccount extends Account {
public $type = 'Twitter';
public function load($key) {
parent::load($key,$this->type);
}
}
然后你可以打电话给他们这样的...
$account = new Account();
$account->load(123,'Facebook');
$twitterAccount = new TwitterAccount();
$twitterAccount->load(123);
而且你的结果会是...
Loading Facebook Account: 123 Loading Twitter Account: 123
重载在PHP中是不可能的,但您可以用其他响应中解释的默认参数值来解决它。
此解决方法的限制是当人们想根据参数类型重载函数/方法时。这在PHP中是不可能的,您需要自己测试参数类型,或者编写几个函数。函数min和max就是一个很好的例子:如果有一个数组类型的参数,它返回数组的最小/最大值,否则返回参数的最小/最大值。
我知道这是一个有点老问题,但由于php56您可以:
function sum(...$numbers) {
$acc = 0;
foreach ($numbers as $n) {
$acc += $n;
}
return $acc;
}
echo sum(1, 2, 3, 4);
我有类似的想法:
功能过程($参数1, $ type ='array'){ switch($ type){ case'array': //做点什么 break; case'associative_array': //做点什么吧 break; case'int_array': //用它做点什么 break; case'string': //做点什么吧 break; //等等...... } }
- 1. PHP函数多个参数
- 2. 在PHP中命名的函数参数
- 3. 在php中匿名函数的参数
- 4. 多个参数同名
- 5. 在php中自己的函数,多个调用不同的参数问题
- 6. VB.NET使同名多参数
- 7. 在C++中用于不同参数的多个构造函数
- 8. JS多个函数同名
- 9. 使用在PHP MySQL的函数参数
- 10. PHP:在另一个函数的参数中调用函数
- 11. 使用参数的PHP函数参考
- 12. Oracle - 在REGEX_COUNT函数的第一个参数中使用别名
- 13. PHP多参数函数
- 14. 通过r中的多个参数调用相同的函数?
- 15. 在setInterval中给一个匿名函数提供多个参数
- 16. 使用其他函数中定义的函数相同的参数名称
- 17. 在函数中使用参数添加多个整数
- 18. 在PHP中有多个参数的函数
- 19. 如何在一个element.someEvent函数中使用更多的参数
- 20. 我可以使用同名的php函数和javascript函数吗?
- 21. 将多个参数传递给回调函数(使用PHP 5.2)
- 22. 使用$ .ajax通过POST传递多个参数到php函数
- 23. 函数的多个参数
- 24. 使用匿名函数使用参数
- 25. 在Haskell中记录多参数函数中的单个参数
- 26. 在PHP中使用函数作为另一个函数的参数
- 27. PHP - 使用不同数量的参数覆盖函数
- 28. 在Matlab中使用不同数量的参数调用函数
- 29. 当多个同名函数在内存中调用特定的javascript函数
- 30. C/C++中的单个参数(函数)中的多个参数
你能举个例子吗? – 2010-01-27 14:34:32
你的意思是同名多功能吗? – mck89 2010-01-27 14:35:28