А вот здесь мне придется конкретно пожестить, за что прошу прощения. Как правило, для коммутации внутри ООП-приложения используется один статический класс (либо один экземпляр этого класса, но при условии его непосредственной передачи в конструктор при создании нового экземпляра зависимого класса), который реализует возможность взаимодействия с остальными классами. Сейчас я покажу вам простой пример данной технологии, а вот её практическую реализацию мы рассмотрим на следующем уроке. Вот мне даже интересно, кто-нибудь долистает до этой строки? Или, быть может, даже дочитает... Если дочитали, то оставьте в комментариях этот текст: «4927766520726561642074686174». Это не набор случайных цифр, если что ;-) Посмотрим, сколько таких людей. Сейчас опять начнется нечто страшное, поэтому рекомендую запастись попкорном и наблюдать за происходящим. Рассмотрим то, что вас ожидает:
Немного о том, что ожидает вас на следующей стрнице:
Методы
new$переменная
В случае, если в переменной $переменнаясодержится имя класса, который существует, то такой прием вполне применим и очень широко распространён. В этом случае не забывайте указывать скобки во избежание недоразумений. Пример:
class someClassB { }
$d = 'someClassB';
$b = new $d();
Символ «->» сразу после вызова функции
Данный прием тоже имеет очень большое распространение. Это возникает из-за того, что функция возвращает экземляр класса, и с ним сразу можно начинать работать. Еще один пример, который показывает, что таких вложений может быть бесконечно много:
class A {
public function B( $C ) { print $C; return $this; }
}
$a = new A();
$a->B( 'database' )->B( 'username' )->B( 'test' );
Продолжать этот пример можно до того момента, пока вам не надоест вызывать функцию B.
Функции
array_key_exists
Проверяет, есть ли соответствующиий ключ в массиве
strtolower
Фигачит всё в нижний регистр
__construct
Магический метод (конструктор)
За правильность не ручаюсь, но должен работать. Если нет – напишите мне. Код:
self::$classContainer[ strtolower( $className ) ] = new $className();
}
}
public static function run() {
self::loadClass( 'config' );
self::loadClass( 'database' );
self::getClass( 'database' )->connect();
}
}
Core::run();
Что произошло? Я использую статический класс Core как ядро, в котором содержится коллекция экземпляров зависимых классов. Зависимые классы могут обращаться к ядру для взаимодействия с другими классами напрямую.
На этом мы закончили с основами ООП. Фух. Ждите следующего файла.