PHP怎么重载已经存在的方法

用__call()可以模拟方法的重载classDataHandle{function__construct(){}functiontest(){echo"原方法";}fu... 用__call()可以模拟方法的重载
class DataHandle
{
function __construct()
{
}
function test()
{
echo "原方法";
}
function __call($fun_name,$arg)
{
if($fun_name="test")
{
$count = count($arg);
switch($count)
{
case 0:
echo "没有参数<br>";
break;
case 1:
echo "1个参数:".$arg[0]."<br>";
break;
case 2:
echo "2个参数:".$arg[0]." ".$arg[1]."<br>";
break;
case 3:
echo "3个参数:".$arg[0]." ".$arg[1]." ".$arg[2]."<br>";
break;
default:break;
}
}
}
}
$t = new DataHandle();
$t->test();
$t->test(3,"sa");
$t->test(3);
$t->test("dd",5,6);

输出的却是:
原方法
原方法
原方法
原方法

说明根本无法重载已经存在的方法,怎么办?
展开
 我来答
358805297
2013-06-26 · TA获得超过118个赞
知道小有建树答主
回答量:297
采纳率:0%
帮助的人:148万
展开全部
PHP不支持重载,但是可以利用灵活性模拟JAVA的重载,另外PHP是支持重写的。
模拟重载的例子我写了个,你参考一下
function overloadTest(){
$name = "overload".func_num_args();
$name();
}
function overload0(){
echo 'overload0';
}
function overload1(){
echo 'overload1';
}
function overload2(){
echo 'overload2';
}
overloadTest(); //overload0
overloadTest(1); //overload1
overloadTest(1,1); //overload2

希望对你有帮助!
cosmicdusts
2013-06-26 · TA获得超过372个赞
知道小有建树答主
回答量:161
采纳率:0%
帮助的人:259万
展开全部
只有 test 方法不存在的时候, 才会调用 __call
你已经定义了 test 方法, 所以不会去触发 __call

所以这种情况,一般的写法是
class Test {
private function _test0(){
echo "No argument."';

}
private function _test1($arg1){
echo $arg1;
}
private function _test2($arg1, $arg2){
echo $arg1, " -- " , $arg2;
}
public function __call($func, $args){
if($func == 'test'){
$number = func_num_args();
$args = func_get_args();
if($number == 1){
return $this->_test1($args[0]);
}elseif($number == 2){
return $this->_test2($args[0], $args[1]);
}else{
return $this->_test0();

}

}
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式