我从Java开始使用OOP,现在我对PHP非常重视.是否有可能用Java中的不同参数创建函数的多个?或者语言的解释/无类型性质是否会阻止这种情况并导致冲突?
Fel*_*ing 38
如果您正在处理类,可以使用__call()
(参见重载)重载方法,例如:
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);
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后你可以这样做:
$foo = new Foo();
$foo->doSomething(1,2); // calls $foo->doSomethingWith2Parameters(1,2)
$foo->doSomething(1,2,3); // calls $foo->doSomethingWith3Parameters(1,2,3)
Run Code Online (Sandbox Code Playgroud)
这可能不是最好的例子,但__call
有时可以非常方便.基本上,您可以使用它来捕获不存在此方法的对象的方法调用.
但它与Java中的不同或简单.
简答:不可以.只有一个具有给定名称的功能.
更长的答案:您可以通过创建一个包含具有正确数量参数的函数的复杂包含系统来实现此目的.或者,更好的是,您可以利用PHP允许参数的默认值以及可变数量的参数.
要利用默认值,只需在定义函数时为参数赋值:
function do_something($param1, $param2, $param3 = 'defaultvaule') {}
Run Code Online (Sandbox Code Playgroud)
通常的做法是在函数声明的末尾放置带有默认值的参数,因为在调用函数时它们可能会被省略,并使使用它们的语法更加清晰:
do_something('value1', 'value2'); // $param3 is 'defaultvaule' by default
Run Code Online (Sandbox Code Playgroud)
您还可以使用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");
?>
Run Code Online (Sandbox Code Playgroud)
使用php无法实现以下功能
function funcX($a){
echo $a;
}
function funcX($a,$b){
echo $a.$b;
}
Run Code Online (Sandbox Code Playgroud)
而是这样做
function funcX($a,$b=2){
echo $a.$b;
}
Run Code Online (Sandbox Code Playgroud)
funcX(1)
将显示12
,func(1,3)
将显示13
归档时间: |
|
查看次数: |
42016 次 |
最近记录: |