русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Жесть третья из бесконечости: коммутация внутри классов, использующих паттерн ООП


Дата добавления: 2015-07-09; просмотров: 589; Нарушение авторских прав


А вот здесь мне придется конкретно пожестить, за что прошу прощения. Как правило, для коммутации внутри ООП-приложения используется один статический класс (либо один экземпляр этого класса, но при условии его непосредственной передачи в конструктор при создании нового экземпляра зависимого класса), который реализует возможность взаимодействия с остальными классами. Сейчас я покажу вам простой пример данной технологии, а вот её практическую реализацию мы рассмотрим на следующем уроке. Вот мне даже интересно, кто-нибудь долистает до этой строки? Или, быть может, даже дочитает... Если дочитали, то оставьте в комментариях этот текст: «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 Магический метод (конструктор)

 



За правильность не ручаюсь, но должен работать. Если нет – напишите мне. Код:

 

class Config {

private $config = array();

 

public function __construct() {

$this->config[ 'database' ][ 'username' ] = 'root';

$this->config[ 'database' ][ 'password' ] = 'test'

}

 

public function getBranch( $branch ) {

if( array_key_exists( $branch, $this->config ) )

return $this->config[ $branch ];

return false;

}

}

 

class Database {

public function connect() {

$config = Core::getClass( 'config' )->getBranch( 'database' );

// Действия

}

}

 

class Core {

private static $classContainer = array();

public static function getClass( $name ) {

$name = strtolower( $name )

return (

array_key_exists( $name, self::$classContainer ) ?

self::$classContainer[ $name ] :

false

);

}

 

private static function loadClass( $className ) {

if( class_exists( $className ) &&

!array_key_exists( strtolower( $className ), self::$classContainer )

) {

self::$classContainer[ strtolower( $className ) ] = new $className();

}

}

 

public static function run() {

self::loadClass( 'config' );

self::loadClass( 'database' );

self::getClass( 'database' )->connect();

}

}

 

Core::run();

 

 

Что произошло? Я использую статический класс Core как ядро, в котором содержится коллекция экземпляров зависимых классов. Зависимые классы могут обращаться к ядру для взаимодействия с другими классами напрямую.

На этом мы закончили с основами ООП. Фух. Ждите следующего файла.



<== предыдущая лекция | следующая лекция ==>
Жесть вторая из бесконечности: импортируем классы при создании других классов | Введение


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.049 сек.