Codeigniter и множественное наследование? - PullRequest
5 голосов
/ 13 октября 2010

Интересно, если это вообще возможно, или ограничение PHP, поиск в Google, похоже, имеет место, но, возможно, мне здесь не хватает умного решения.

Надеюсь, это будет иметь смысл.Прямо сейчас у меня есть две части на моем сайте, администратор и клиент.Мне удалось разделить его на два контроллера (администратор и клиент), которые наследуют от базового класса MY_Controller, но у меня возникла проблема с реализацией моего контроллера аутентификации.

Существует много общего кода между клиентом/ admin логины, и сейчас мне нужно либо создать контроллер авторизации для каждого администратора и клиента, который расширяет базу (что означает многократный повтор кода), либо просто расширить класс MY_Controller и использовать if / thens в каждой функции,который затем становится немного беспорядочным (а также обходит родительские классы администратора / клиента, что лишает их цели ...).

Мне интересно, есть ли способ заставить контроллер Auth быть "«нейтральный» (?) и может наследоваться от контроллеров admin / client, поэтому, если X является базовым контроллером, а Y является Auth ...

X -> Admin Controller -> Y
X -> Client Controller -> Y

Я использую библиотеку аутентификации для инкапсуляциинекоторые функции более низкого уровня, и они не будут придерживаться логики компоновки и тому подобного.Простите, если это глупый вопрос.Спасибо!

Ответы [ 2 ]

3 голосов
/ 13 октября 2010

Множественное наследование невозможно.Вы можете использовать интерфейсы или использовать шаблон дизайна посетителя следующим образом:

<?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);

?>

к сожалению, 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);

, где у вас есть несколько методов посещения, различающихся по типу их параметров

0 голосов
/ 13 октября 2010

Множественное наследование невозможно с PHP. Хотя мне интересно, зачем вам два отдельных контроллера входа? Не могли бы вы объяснить, что вы делаете в контроллерах?

EDIT:
Не уверен, что ваш код позволяет это, но вы можете попробовать поместить все общие части в клиентский контроллер и позволить администратору расширяться от этого.

X -> Admin Ctrlr -> Client Ctrlr -> Y
X -> Client Ctrlr -> Y
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...