Вопросы по ООП в PHP

8.24K
.
(\/)____o_O____(\/)
L!MP, я бы новичкам советовал пропускать этот раздел (главу) при обучении, когда более менее со структурным разберешься, тогда можно уже и за ориентированное браться, кстати в пхп 5.4 еще не много улучшили http://php.net/manual/en/langu ... s.php
.
REALball, Спрашивайте, задавайте более-менее конкретные вопросы - я постараюсь ответить.
З.Ы: о автозагрузке файлов-классов, напишу подробно, но блишже к вечеру, как с ПК зайду.
.
ПФК ЦСКА forever!
Не в тему, но спрашу:
где найти понятную литературу по функциям пхп? (php.su и php.net не вариант, я их слов там не понимаю)
.
аkа ПьяНый Ангел
хорошая тема, закрепляю. Лимпа назначаю куратом;)
.
Koenig, про трэйтс'ы даже не знал, почитаю, спасибо
.
L!MP
FlySelf, гг, как говоритсо "Назвался Антошкой...".
Хорошо, тогда будим действовать так: задаем вопросы - на самые осмысленные, я буду писать развернутый ответ (многа букв).
Пока на очереди вопрос о автозагрузке классов.
.
Koenig
(\/)____o_O____(\/)
L!MP, в spl есть хороший пример автозагрузки
http://php.net/manual/en/funct ... r.php
.
Fenix_61
REALball (29.10.2011/09:54)
Не в тему, но спрашу:
где найти понятную литературу по функциям пхп? (php.su и php.net не вариант, я их слов там не понимаю)
Вот городе хороший учебник - http://visavi.net/files/index.php?p=php& не реклама!
.
Автоматическое подключение классов.

Теория (совсем чуть-чуть).

В PHP, начиная с пятой версии, вы можете самостоятельно определять логику для автоматичесой загрузки классов в момент их инициализации.
Сделать это можно как при помощи стандатрной функции __autoload(), так и определив собственную функцию (или метод класса) с помощью spl_autoload_register().

Практика / Подготовка.

В корне нашего сайта создадим файл /index.php и папку /classes в которой будут размещатся файлы классов используемые в нашем проекте.
Создадим два простых класса, которые в момент их обьявления будут с нами здороваться и сообщать свои имена:

Файл /classes/a.php

<?php
class A {
	function __construct() {
		echo 'Привет! Я класс А.';
	}
}

Файл /classes/b.php

<?php
class B {
	function __construct() {
		echo 'Привет! Я класс B.';
	}
}


Теперь попробуем инициализировать эти классы в файле /index.php

Файл /index.php

<?php

$a = new A;
$b = new B;


Запустив наше приложение мы получим ошибки Fatal error с сообщением о том, что наши классы не найдены.

Практика / Использование стандартной ф-ции __autoload().

Исправим файл /index.php и напишем в нем нашу функцию автозагрузки классов.
Для этого мы будим использовать "магическую" функцию __autoload().
Её "магия" в том, что она принимает в качестве своего аргумента - имя класса, который PHP не может найти.
В самой же функции нужно реализовать логику для определения местоположения класса и его загрузки.

Файл /index.php

<?php

function __autoload($class) {
	/*
	Важный момент:
	имя класса, должно совпадать с именем файла в котором он описан!
	*/

	if (file_exists('./classes/' . $class . '.php')) //проверяем есть ли класс $class в папке /classes
		include_once './classes/' . $class . '.php'; //подключаем файл класса
}

$a = new A;
$b = new B;


Снова запустим наше приложение: ошибки исчезли, вместо них мы видим приветствие от двух наших классов, а это значит что автозагрузка классов работает.

Практика / Использование собственной ф-ции с помощью spl_autoload_register()().

Теперь попробуем переименовать нашу ф-цию __autoload() к примеру в "hendlerAutoload" и запустим наше приложение - ошибки вернулись, и не удивительно, ведь наша функция потеряла свою "магичность".
Исправим ситуацию при помощи SPL:

Файл /index.php

<?php

//определяем собственную ф-цию автозагрузки...

function hendlerAutoload($class) {
	if (file_exists('./classes/' . $class . '.php'))
		include_once './classes/' . $class . '.php';
}

//... и регистрируем её

spl_autoload_register('hendlerAutoload');

$a = new A;
$b = new B;


Так же, при помощи spl_autoload_register() мы можем зарегистрировать в качестве автозагрузчика метод какого-либо класса:

spl_autoload_register(array('Class', 'hendlerAutoload')); // где Class - имя класса в котором описан наш автозагручик


З.Ы: немного скомкано (особенно к концу), по этому задаем вопросы и если есть что добавить - милости прошу
.
L!MP, ( надо было промолчать но я зануда )
А к чему конкретно это можно применить, на примере Джона например ?
Чтоб удобнее было например изучать движок/php, так сказать живой пример. Любую функцию из движка.

А так вроде всё ясно написанно
Всего: 383