[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Курс "MVC от теории к практике"
Alehandr
Object

Всем привет!

Когда впервые пишешь большой проект, задумываешься о том, что прописать в таком абстрактном классе как Object, который будут наследовать практически все файлы в приложении. Спешить делать выводы из своих соображений на счет того, что он вообще не нужен, спешить не стоит, время покажет, что частенько он необходим, иногда даже просто для упрощения работы или для выполнения рефакторинга (очень ну(ж/д)ная и необходимая вещь).

Недавно, на свет появилась новая версия PHP 5.3. В ней появилось множество новых функций и причуд языка. Благодаря одной из таких новых функций с паттерна Singleton в PHP можно снимать ярлык "нудной реализации", ибо раньше в каждом классе приходилось его прописывать. Имя этой функции get_called_class. Теперь реализацию паттерна можно вынести в общий абстрактный класс (Object !!!):

<?php if (!defined('APP')) die('Access is forbidden!!!');

abstract class Object_Core extends Observed {

/**
* Singleton
*
*
@staticvar array $instance
*
@staticvar string $classname
*
@param string $id
*
@return Object
*/

public static function &instance($id = 'default') {
static $instances = array();
static $classname = null;

if ($classname === null) {
$classname = get_called_class(); //Получаем имя класса
}

if (!isset($instances[$id])) {
$instances[$id] = new $classname;
}

return $instances[$id];
}

}


if (!defined('OBJECT_CLASS')) {
abstract class Object extends Object_Core { }
}


Теперь каждый объект в приложении будет юзать паттерн Singleton и прописывать его постоянно не надо...

А теперь можете смело выкинуть только что написанную функцию, потому, что PHP 5.3 многие хостеры еще не скоро поставят... Оставим класс пустым (пока)...

Singleton мы заменим на класс Registry в следующем уроке, а пока подумайте, какие функции можно вынести в класс Object...

На этом наша лекция заканчивается...



Спустя 1 день, 35 минут, 31 секунда (26.11.2009 - 13:23) VolCh написал(а):
Цитата
а пока подумайте, какие функции можно вынести в класс Object...

сериализацию/десериализацию, отладочный дамп, __toString... больше ничего в голову не приходит ))

Спустя 32 минуты, 40 секунд (26.11.2009 - 13:56) glock18 написал(а):
непонятно зачем
1. отладочный дамп
2. __toString

toString нужен явно не для всех объектов. если его введение связано с (1 отладкой) , то чем не устроит print_r?

Дампает любой объект в очень понятном виде:
echo '<pre>';
print_r($obj);
echo '</pre>';


Спустя 9 минут, 11 секунд (26.11.2009 - 14:05) Alehandr написал(а):
VolCh
glock18
Дамп не дамп, но для отладки что-либо реализовать можно...
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.