Информация
- В рейтинге
- 814-й
- Откуда
- Санкт-Петербург, Санкт-Петербург и область, Россия
- Дата рождения
- Зарегистрирован
- Активность
Специализация
Генеральный директор
Ведущий
От 3 000 000 ₽
Управление проектами
Ведение переговоров
Разработка ТЗ
Agile
Управление разработкой
Оптимизация бизнес-процессов
Организация бизнес-процессов
Построение команды
Стратегическое планирование
Развитие бизнеса
На примере. Допустим у нас на сайте везде есть доступ к какой-то информации (условно назовем тексты), ты можешь написать функции которые будут работать с этими текстами, а можешь сделать объект, который будет проводить работу с ними, назовем его условно class ContentManaget что это тебе дает?
во первых, ты получаешь что все функции по работе у тебя собраны в одном месте (это инкапсуляция)
class ContentManaget
public function getText($id)
public function getTextList()
во вторых ты можешь включить в свой класс функции, которые нужны для работы объекта (экземпляра класса)
class ContentManaget
public function getText($id){
return $this->preOut($this->loadText());
}
protected function loadText($id)
protected function preOut($txt)
public function getTextList()
таким образом ты лишил себя и других разработчиков пользоваться внутрненними служебными функциями своего объекта
но объект — это сущность а не только функции. Тоесть это не только обработка данных, это еще и сами данные. Теперь зная это просто сделать кеширование:
class ContentManaget
protected $cache=array()
public function getText($id){
if (!isset ($this->cache['id']))
$this->cache['id'] = $this->preOut($this->loadText());
return $this->cache['id']
}
protected function loadText($id)
protected function preOut($txt)
public function getTextList()
так ты можешь понять что такое инкапсуляция и зачем нужно ооп и где оно упрощает жизнь на пальцах.
Второе наследование: допустим у тебя есть критерий по которому твоим ContentManaget ром могут пользоваться админы и пользователи, пользователи тока читают, а админы допустим еще и пишут, как сделать эти разграничения? просто.
class EditorContentManaget extends ContentManaget
function add($title, $txt)
function delete($id)
function edit($id)
теперь собственно место выбора того или иного класса при создании экземпляра:
if (isAdmin())
$cm = new EditorContentManaget;
else
$cm = new ContentManaget;
это наследование. ну полиморфизм ты понял из статьи.
короче то что я сказал — это малая часть притом не верная, она нужна только чтоб заинтересовать, чтоб понять как нада нужно читать хорошие книги, список тебе тут накидают в коменты
habrahabr.ru/blogs/php/39739/
Entity-Attribute-Value, Сущность-атрибут-значение (EAV)
если же у вас ограничения по поиску выделяют всего 1/100 или даже 1/20 таблицы, то все летает ибо используется праймари индекс