Суть проблемы Я пишу движок на PHP в ООП стиле. У меня есть файл с функциями. Но когда я пытаюсь написать функции для уже созданных объектов, начинаются проблемы.(Невозможность употребить $this и т.д) Можно сделать файл с функциями классом и наследовать от него, но это как-то не в стиле ооп... Возникает вопрос: Есть в php какое-то решение этого вопроса? Или придётся все-таки наследовать класс с функциями?
А что, очень по-объектовски делать один огромный класс и нагружать его функциями?) Я серьезно. Это правильный вариант или есть лучше? Потому что я пока что придумал разделить функционал - функции для моделей - в main модель, функции для контроллеров - в main контроллер... И тут еще одна проблемка, не по теме Как сделать так: callFunction(arg1, $this -> func2(arg1, arg2)); ?
call_user_func_array() требует название объекта, а мне нужно чтоб функция вызывалась по $this, и при этом в неё передавались 2 параметра(call_user_func() не подходит) --- Добавлено --- А, проблема не в этом
Указать внутри класса на сущность класса. Так? Если у меня будет нагруженный функциями контроллер, я смогу наследовать его функции в дочерних контроллерах. Но имени объекта класса я знать не хочу и не буду, это неправильно, мне кажется - обращаться изнутри по имени. Но проблема не в этом - можно сделать, скажем, так - call_user_func_array($this -> func()), проблема в том, что кроме этого массива, у меня большая функция принимает на вход еще несколько параметров. Через array не получается.
А к объекту ты как собираешься обращаться? Документацию мы читать не ходит или не можем? Покажи свой код, а то функции в классе это что-то новое.
Там он большой, вкратце: Есть одна точка входа(index). В зависимости от url первого порядка(/here), она подключает нужный контроллер, который наследуется от базового контроллера, и вызывает его функцию route. Функция route смотрит на url второго порядка(/some/here) и вызывает определённую функцию, которая, в свою очередь, вызывает вьюху и обрабатывает пользовательские данные. Не надо гневно писать про моё видение MVC, я прекрасно понимаю, что я начинающий студент. Не получается как там. Кстати, там есть более логичный, на мой взгляд, метод. $func = function(){ //code }
Ладно, функция это () а значит: PHP: $str = 'showPage'; echo $this ->{$str}(); //call Тут дело не в том как ты видишь его, а в том что роутинг у тебя разбит, часть на точке входа лежит где должна быть инициализация, а часть на контроллере.
Ну, я понимаю, а чем плохо то, что у меня контроллер выполняет много обязанностей? Каждый контроллер - это новый функционал. И в целях модульности я не вижу смысла хранить все роуты дальше первого порядка в index. Если я не прав, критикуйте) я всегда за. --- Добавлено ---
Главное слово модуль. Его не размазывают по всему коду. Решение такого подхода это декомпозиция. Каждый класс, медот в классе, функция в процедурке должна выполнять равно одну конкретную задачу. Ты ранее писал не хочешь знать и мы класса, не ты а код должен. А что бы так делать не размазывать задачу по коду и делает одно зависимым от другого. Принцим единой ответственности. {} Читать удобней, литералы они вообще ничто по сути дела.