【问题标题】:magic function __call function is not working魔术函数__call函数不起作用
【发布时间】:2016-12-28 12:04:15
【问题描述】:

我正在尝试使用魔术函数进行重载

这是我的代码:

类文件1

    class vLiteUser{
        public function __call($methodname,$arguments)
        {
            if($methodname=='UserLogin'){
                switch(count($arguments)){
                    case 1:
                                $this->UserLogin($arguments[0]);
                        break;
                    case 2:
                                $this->UserLogin($arguments[0],$arguments[1]);
                        break;
                    default:    echo "string";
                                break
                }
            }   
        }    

    public function UserLogin($data0='')
    {
        echo $data0;
    }

    public function UserLogin($data0='',$data2='')
    {   
            echo $pass
    }
} ?>

我在另一个文件中创建了对象

 $userObj = new vLiteUser();
 $userObj->UserLogin(data0,data1);
 $userObj->UserLogin(data0);

我是我错过的东西,无法找到它到底是什么

我还想问一下,私有函数是否也包含在重载中。

【问题讨论】:

标签: php overloading


【解决方案1】:

同一类中的方法不能有多个定义。

这是错误的,无论您为这些方法设置什么可见性(公共/私有)都不会起作用:

public function UserLogin($data0='')
{
    echo $data0;
}

public function UserLogin($data0='',$data2='')
{   
    echo $pass
}

此外,魔术方法__call() 仅适用于未定义的方法,或在当前范围内不可见的方法。

所以你要么删除两个function UserLogin,要么只删除其中一个并创建另一个private

有一些docs

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多