(引自:互联网)
问:
sb('shabi');
sb('shabi','bisha');
function sb($a) {
echo $a;
}
function sb($a,$b) {
echo $a.$b;
}
function sb($a,$b,$c) {
echo $a.$b.$c;
}
?>
Fatal error: Cannot redeclare sb() (previously declared in
D:\www\test1.php:5) in D:\www\test1.php on line 10
还是我写的不对?
______________________________________________________________________________________________
答1:
php4暂时不支持
______________________________________________________________________________________________
答2:
你这样是不行的
php不支持函数的重载,以后也不会支持
在oop中,函数的重载有两个条件
1、参数的个数不同——php支持参数缺省,无法用参数个数区别
2、参数的类型不同——php是弱类型语言,会根据上下文自动做类型转换
所以,php不可能支持函数的重载
你可以这样定义函数
function sb($a,$b="",$c="") {
echo $a.$b.$c;
}
______________________________________________________________________________________________
答3:
看看CU的精华帖:
“很多人说php4不能支持函数重载”
http://www.chinaunix.net/jh/27/189443.html
呵呵,虽然并不是真正意义上的重载,但是接口的对外表达形式和重载是一样的。
______________________________________________________________________________________________
答4:
to mikespook(Mike大懒猫)
非常遗憾,那位帖主把概念弄混了。
同是function定义,在过程你称作“函数”,在类里称作“方法”。
尽管php的类支持方法的重载,但同样不能在一个类定义中定义两个同名的方法
class x {
function aa($a,$b) {}
function aa($a) {}
}
______________________________________________________________________________________________
答5:
呵呵~~~
我不说了么:“虽然并不是真正意义上的重载,但是接口的对外表达形式和重载是一样的。”
虽然 class x不能定义两个同名的方法~~~但是使用这篇帖子的方法在类的对外接口上是和重载一样的~~~~
只不过定义了一个方法而已~~
但是在传递进不同个数的参数的时候调用了不同的方法~~~~
本文来自: 站长(http://www.qqcf.com)
详细出处参考:http://study.qqcf.com/web/722/275504.htm