Форум программистов, компьютерный форум, киберфорум
Наши страницы
PHP: ООП
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
__PION__
956 / 797 / 85
Регистрация: 21.07.2010
Сообщений: 3,521
1

Обясните ход событий

18.10.2013, 19:45. Просмотров 597. Ответов 7
Метки нет (Все метки)

Хочу сделать свой движок для понимания что к чему в ооп и мвс.
смотрю чужие "фреймворки" в сети и + копаюсь в кохана, как все устроено.
У меня вопрос по __autoload, я не понимаю где он вызывается.
Вот создали
PHP
1
2
3
function __autoload($className) {
   require_once $className.'.php';
}
а где он вызывается не понимаю, как туда передавать $className и откуда его брать.
И еще не пойму его связь с роутером.
Объясните пожалуйста, что возвращает роутер (я знаю что он нужен для перенаправления, но как-то до конца не врублюсь) и его связь с __autoload.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.10.2013, 19:45
Ответы с готовыми решениями:

Неверные числа и текст на выводе, при нажатии на ход ничего не происходит
Приветствую. Помогите пожалуйста найти ошибку в моем коде, а то я уже всю...

обясните
struct stack { int component; struct stack *next; } Обьясните что...

NAT обясните!
В универе начали учить компьютерные сети,щас учу НАТ ,запоролся на первых...

Обясните пожалуста:)
объясните пожалуйста кто-нить какой вариант кода правильнее и быстрее первый...

12f683 обясните
купил тут на досуге данные чипы, в разделе конфигурации осцилятора не фига не...

7
Dolphin
808 / 792 / 200
Регистрация: 21.09.2012
Сообщений: 2,635
19.10.2013, 11:43 2
Автоподключение вызывается, когда объявляется объект не известного класса. В нее ничего передавать не нужно. В функцию передается имя класса. А уже в самой функции прописываете путь до папки с классами и подключаете
1
panicwassano
594 / 562 / 104
Регистрация: 07.11.2010
Сообщений: 2,004
19.10.2013, 12:08 3
Цитата Сообщение от Love_and_Peace Посмотреть сообщение
а где он вызывается не понимаю, как туда передавать $className и откуда его брать.
если класс не найден, то PHP ищет, где определена магическая функция __autoload и сам передает ей имя класса. Если эта ф-я не определена, он кидает fatal error.
1
__PION__
956 / 797 / 85
Регистрация: 21.07.2010
Сообщений: 3,521
19.10.2013, 13:41  [ТС] 4
Не совсем тогда понимаю его связь с роутером. Роутер тоже ведь проверяет наличие того или иного файла (или контроллера) и получается двойная работа, нет?
0
Zvook
91 / 91 / 23
Регистрация: 02.09.2013
Сообщений: 276
20.10.2013, 14:55 5
Цитата Сообщение от Love_and_Peace Посмотреть сообщение
Не совсем тогда понимаю его связь с роутером. Роутер тоже ведь проверяет наличие того или иного файла (или контроллера) и получается двойная работа, нет?
Роутер разбирает запрос, достает оттуда сам роут (контроллер/экшен) и параметры, дальше уже не его работа. Роутер, скажем так, определяет соответствие запроса тому или иному контролерру/экшену.
По сабжу, посмотрите psr-0 стандарт с использованием неймспейсов. Вот кстати сам класс автолоадера:
https://gist.github.com/jwage/221634
Это вроде как общепринятый способ автозагрузки. Работает на php 5.3+ (или где там неймспейсы ввели?)
1
__PION__
956 / 797 / 85
Регистрация: 21.07.2010
Сообщений: 3,521
20.10.2013, 15:23  [ТС] 6
Цитата Сообщение от Zvook Посмотреть сообщение
Роутер, скажем так, определяет соответствие запроса тому или иному контролерру/экшену.
просто у меня в классе роут есть еще метод Run, вот что он делает
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public function Run()
{
  // $sNameController = ($this->action != 'index') ? 'Controller_' . $this->controller . '_' . ucfirst($this->action) : 'Controller_' . $this->controller;
  $sNameController = 'Controller_' . $this->controller;
  $sNameAction = 'action_'.$this->action;
 
  $contr = new $sNameController(); // создаем экземпляр класса контролера
  //  if(method_exists($sNameController, $sNameAction)) {
  $contr->$sNameAction($this->params);    // вызов экшена
  $contr->Request();  // вывод на экран
/*  }
    else {
        $this->ErrorPage404();
    }*/
}
отсюда не пойму для чего __autoload, если я класс уже подключаю в методе Run. Код я с нуля не придумал, собираю по кусочкам в сети, поэтому не понятен этот момент.

Zvook, приведенный пример это на место __autoload'a надо ставить или роутера? я в ооп = ~0.2, поэтому не пойму что к чему.
0
Zvook
91 / 91 / 23
Регистрация: 02.09.2013
Сообщений: 276
20.10.2013, 15:52 7
PHP
1
отсюда не пойму для чего __autoload, если я класс уже подключаю в методе Run
Не, не подключаешь, ты создаешь экземпляр объекта. В этот момент у тебя срабатывает тот самый __autoload и пытается найти вызванный класс. Подключение и вызов это разные вещи
splClassLoader работает на основе неймспейсов, это вроде как мейнстрим сейчас
Если у тебя движок не на неймспейсах, то не заморачивайся
1
sqlnub
Заблокирован
20.10.2013, 19:36 8
Love_and_Peace,

Можно написать такую функцию, которая по имени класса найдет и загрузит соответствующий скрипт, соорудит инстансь и вернет ее, или куда-то положит, но вы не можете написать такую функцию которая бы по ключевому слову new (или вообще при обращении к классу) подгружала бы определенный скрипт. Для этого существует автозагрузчик.
1
20.10.2013, 19:36
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.10.2013, 19:36

Обясните функции
Розкажите мне о функциях Ord Chr и т.п. Кто знает какие-то функции с етой...

Сгенерировать 30 случайных событий с интенсивностью 10 событий в час с помощью мастера функций
Добрый день! Помогите решить.:( Задача: Сгенерировать 30 случайных событий с...

Отделение работы обработчика событий клавиатуры от событий ввода текста в поля редактирования
Проблема: есть форма с графическими компонентами, в которых редактируется...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru