Codeigniter和多重继承?

Jef*_*eff 5 php oop inheritance codeigniter

想知道这是否可能或PHP的限制,谷歌搜索似乎是这种情况,但也许我错过了一个聪明的解决方案.

希望这是有道理的.现在我有两个部分到我的网站,一个管理员和客户端.我已经能够将它分成两个从基础MY_Controller类继承的控制器(管理员和客户端),但我遇到的问题是实现我的身份验证控制器.

客户端/管理员登录之间有很多共享代码,现在我要么必须为扩展基础的每个管理员和客户端创建一个auth控制器(这意味着重复代码很多),或者只是扩展MY_Controller类和使用每个函数中的if/thens,然后变得有点混乱(并绕过管理员/客户端父类,这违背了拥有它们的目的......).

我想知道是否有办法让Auth控制器处于"中立"(?)并且能够从管理员/客户端控制器继承,所以如果X是基本控制器,并且Y是Auth ......

X -> Admin Controller -> Y
X -> Client Controller -> Y
Run Code Online (Sandbox Code Playgroud)

我正在使用一个身份验证库来封装一些较低级别的函数,而不是坚持布局逻辑和类似的东西.如果这是一个愚蠢的问题,请原谅我.谢谢!

ITr*_*ubs 3

多重继承是不可能的。您可以使用接口,也可以使用访问者设计模式,如下所示:

<?php

class A {
    public $avar = 'I\'m A';
    function accept(Visitor $v){
        $v->visitA($this);
    }
}

class B {
    public $bvar = 'B reporting';
    function accept(Visitor $v){
        $v->visitB($this);
    }
}


class Visitor {
    function visitA(A $a){
        echo $a->avar;
    }

    function visitB(B $b){
        echo $b->bvar;
    }
}


$A = new A();
$B = new B();
$visitor = new Visitor();

$A->accept($visitor);
$B->accept($visitor);

?>
Run Code Online (Sandbox Code Playgroud)

不幸的是,php 还没有准备好通过参数来区分方法调用,就像在 java 中一样,这个例子如下所示:

class A {
    public String avar = 'I\'m A';
    function accept(Visitor v){
        v.visit(this);
    }
}

class B {
    public String bvar = 'B reporting';
    function accept(Visitor v){
        v.visit(this);
    }
}


class Visitor {
    function visit(A a){
        System.out.println(a.avar);
    }

    function visit(B b){
        System.out.println(b.bvar);
    }
}


A = new A();
B = new B();
visitor = new Visitor();

A.accept(visitor);
B.accept(visitor);
Run Code Online (Sandbox Code Playgroud)

其中您有多种访问方法,通过其参数类型进行区分