在一般的面向对象设计语言(如C++,Java)中的方法重载就是定义相同的方法名,通过“参数的个数”不同或“参数的类型”不同,来访问我们的相同方法名的不同方法。但是PHP 中,方法是不能重载的,因为PHP 是弱类型的语言,所以在方法的参数中本身就可以接收不同类型的数据,又因为PHP 的方法可以接收不定个数的参数,所以通过传递不同个数的参数调用不相同方法名的不同方法也是不成立的。所以在PHP 里面没有传统上的重载(overload)方法,但由于php其灵活性,可以模拟一般面向对象语言中的重载方法。
在PHP中模拟一般面向对象语言中的方法重载(overload)
首先来看一个例子:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | <?php
public function area() {
$args = func_get_args();
if ( count ( $args ) == 1) {
return 3.14 * $args [0] * $args [0];
} else if ( count ( $args ) == 2) {
return $args [0] * $args [1];
} else {
return '未知图形';
}
}
}
$calc = new Calc();
?>
|
登录后复制
利用PHP的重载(overloading)技术,实现一般面向对象语言中的方法重载(overload)
下面的例子是利用利用PHP的重载(overloading)技术,使用魔术方法,来实现传统上的方法重载(overload)。
关于PHP中的重载技术,请参考:PHP面向对象_重载(overloading)
例子:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | <?php
class A{
function call( $Func_name , $argument ){
if ( $Func_name === 'f1'){
$len = count ( $argument );
if ( $len <1 || $len >3){
trigger_error( "参数数量有误!" , E_USER_ERROR);
} else if ( $len == 1){
return $argument [0];
} else if ( $len == 2){
return $argument [0]* $argument [0] + $argument [1]* $argument [1];
} else if ( $len == 3){
$v1 = $argument [0];
$v2 = $argument [1];
$v3 = $argument [2];
return $v1 * $v1 * $v1 + pow( $v2 , 3) + pow( $v3 , 3);
}
} else if ( $Func_name === 'f2'){
} else if ( $Func_name === 'f3'){
}
}
} $a = new A(); $v1 = $a ->f1(1); $v2 = $a ->f1(2,3); $v3 = $a ->f1(4,5,6); echo "v1= $v1, v2 = $v2, v3 = $v3" ;?>
|
登录后复制
运行结果为:
以上是PHP面向对象-详细介绍模拟一般面向对象语言中的方法重载(overload) 的详细内容。更多信息请关注PHP中文网其他相关文章!