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);
输出的却是:
原方法
原方法
原方法
原方法
说明根本无法重载已经存在的方法,怎么办? 展开
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);
输出的却是:
原方法
原方法
原方法
原方法
说明根本无法重载已经存在的方法,怎么办? 展开
2个回答
展开全部
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
希望对你有帮助!
模拟重载的例子我写了个,你参考一下
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
希望对你有帮助!
展开全部
只有 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();
}
}
}
}
你已经定义了 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();
}
}
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询