Можно ли динамически расширять модель в Codeigniter? - PullRequest
0 голосов
/ 10 февраля 2011

мои модели в CI настроены так, что они загружают «под» -модели всякий раз, когда им нужны определенные функции. Чтобы сделать мой код максимально доступным и чистым, я хочу, чтобы эти подмодели расширяли модель, к которой они обращаются.

Так что, если у меня есть две модели:

<?php

class Mymodel extends Model
{



}

И

<?php

class Submodel extends Model
{

    function test() { do something.. }

}

Тогда мне нужно каким-то образом получить субмодель для расширения mymodel, чтобы я мог сделать что-то вроде $this->mymodel->test(). Подмодель не обязательно должна быть моей моделью, это может быть любая модель. Есть идеи?

Спасибо за ваше время.

Ответы [ 2 ]

2 голосов
/ 10 февраля 2011

У вас неверное понимание наследования между классами.

Наследование протекает только в одну сторону, вниз.

если Myodel extends Submodel ваш $this->mymodel->test() будет работать, но это не имеет смысла, так как подчиненные (дочерние) объекты должны наследоваться от родительских объектов, а не наоборот.

В качестве аналогии вы не должны смотреть на ребенка и говорить родителю: «Вы похожи на своего ребенка», потому что именно ребенок является частичным представлением родителя.

вам нужно понимать слово extends буквально, вы буквально «расширяете» функциональность родителя.

===================

Один из способов, которым, я полагаю, можно добиться этого, является создание функций-призраков, которые просто загружают правильную модель и вызывают функцию этой модели (хотя я не рекомендую этого, поскольку это может привести к путанице при отладке.

по вашему примеру

<?php

class Mymodel extends Model
{

    function test() {
        $this->load->model('submodel');
        $this->submodel->test();
    }

}

Суб

<?php

class Submodel extends Model
{

    function test() { do something.. }

}

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

0 голосов
/ 11 февраля 2011

Вы можете создать полезную модель, которая может расширить модель codeigniter, и тогда все ваши модели смогут расширить эту полезную модель.Методы, которые вы собираетесь добавить в полезную модель, будут доступны для всех ее дочерних классов или ваших моделей.

Как вы можете вызвать метод, который ваш класс не имеет или не наследует от других классов?Глядя на ваш код, между вашими классами и субмоделью в ваших классах нет никакой связи.

...