Наследование классов в PHP - PullRequest
1 голос
/ 07 марта 2011

Я не уверен, что заголовок этого вопроса точен, поэтому, пожалуйста, потерпите меня.

Я создаю легкий MVC-фреймворк. Это работает примерно так:
Main.php (основной класс) вызывает

  • Контроллер расширяет Main ($ this-> controller) и
  • Модель расширяется Main ($ this-> model)

Теперь модель и класс контроллеров будут вызывать контроллеры и модели в зависимости от URI (например, Blog.php [extends Controller]).

(Итак, для повторения: Main.php вызывает $ this-> model и $ this-> controller. Класс контроллера вызывает Blog extends Controller).

Из Blog.php, как я могу получить доступ к функциям в Controller и функциям в Main?

Я спрашиваю об этом, потому что в Controller мне нужно будет получить доступ к функциям в моем классе URI, но я не могу этого сделать, поскольку PHP говорит мне, что объект не существует, когда я делаю $ this-> uri.

Кажется плохой практикой использовать $ this-> controller, $ this-> model и $ this-> uri в каждом классе.

Мой друг предложил мне использовать магический метод __get (). Это кажется правильным?

class Main
{  
    function __construct() {  
        loadClasses();  
        loadUri();  
    }  

    function loadClasses() {  
        $this->controller = new Controller();  
        $this->uri = new Uri();  
        $this->load = new Load();  
    }  

    function loadUri() {  
        //Using the uri, determine what Controller to load.  
    }  
}  

class Controller  
{  
    ...  
}  

class Blog extends Controller  
{  
    $this->load->view(); //Should access the view function in the load class
}  

1 Ответ

0 голосов
/ 08 марта 2011

Несколько вещей здесь.Сначала Main.php должен «вызывать» экземпляр контроллера, а не модель.Задача контроллера - соединить модель и представление.

Теперь обычно все ваши контроллеры наследуются от некоторого BaseController.Как указал Критик в комментариях, в любой момент вы можете получить доступ к любым защищенным или общедоступным методам из родителя, используя parent ::.BaseController должен содержать все, что является общим для всех ваших контроллеров.

Что касается работы с вашим классом URI.Обычно перед всем этим main.php использует какой-то класс маршрутизации, чтобы определить, какой контроллер использовать.Любая работа URI должна быть сделана здесь и URI.Это также уменьшит вашу зависимость от магических методов.

, если вы заинтересованы, свяжитесь со мной, и я был бы рад поделиться с вами простой структурой mvc, которую я разработал для проектов php.

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