процессе программирования от функциональности приложения к структурам данных. Это позволяет программисту моделировать в создаваемых приложениях реальные объекты и ситуации.
(методы) • Название класса не может быть зарезервированным словом PHP • Название может начинаться с буквы или символа подчеркивания и состоять из букв, цифр и _.
и методы могут быть переопределены (если не заданы как final в родителе) • Сигнатура параметров переопределямых методов должна совпадать (кроме конструктора), иначе — E_STRICT
областях видимости • могут содержать только скалярные значения • способствуют более чистому коду • работают быстрее констант, определенных через define()
вызывать явно: parent::__construct() • если не переопределен, наследуется от класса родителя (если там он не private) • при переопределении параметры могут меняться
ссылок • либо при завершении работы скрипта • родительский destructor надо вызывать явно: parent::__destruct() • будет вызван даже при остановке скрипта с помощью exit()
the public and protected method, but not private protected $protected = 'Protected2'; ! function printHello() { echo $this->public; echo $this->protected; echo $this->private; } }
и protected свойствам и методам объкта из объекта такого же класса. ! Попробуйте сами написать код, подтверждающий это. Если не получится, то найдите в документации и напишите подобный.
создания объекта • вызов статичного свойства с помощью объектной нотации — Notice • по умолчанию public • использовать $this внутри статичных методов нельзя
define this method abstract protected function getValue(); abstract protected function prefixValue($prefix); ! // Common method public function printOut() { print $this->getValue() . "\n"; } }
абстрактных методов методов и один-два уже реализованных (общих для героев и злодеев). Абстрактные методы реализуйте в классах- наследниках. Например: saveWorld(), fight(), makeSomethingBad(), muahahahaha(), think(), putOnMask(), useSuperPower(), sayCatchPhrase() и т.д.
них обязательные методы. Пусть наши классы будут реализовывать каждый свой интерфейс. ! Варианты методов: doEvil(), muahaha(), scaryFace(), saveTheWorldAgainBeforeBreakfast()
искаться в текущем namespace • при его отсутствии — Fatal error • Для функций и констант без полного имени ненайденных в текущем namespace будет попытка найти их в глобальном пространстве имен (fallback).
каталог epicoop Весь код классов — в epicoop/src. Главный namespace — Epicphp Расположение классов соответствует PSR-0 index.php — epicoop/web В index.php подключаем все нужные классы
• блоков catch может быть несколько (для разных классов исключений) • После “выкинутого” код не выполняется до первого найденного catch • Исключение не поймано — Fatal error
зависимостей вашего проекта, в файле composer.json и с несколькими простыми командами, Composer автоматически скачает зависимости вашего проекта и установит автозагрузку для вас.
• Взрывное развитие и популярность у разработчиков • Если вашей библиотеки нет в packagist и ее не поставить через composer, то вашей библиотеки просто нет
каждый день • Мы решаем те же пробемы, что и наши “соседи” каждый день • Мы решаем одинаковые проблемы на разных проектах • И мы ленивые, но хотим делать хорошо!
схожей функциональностью, но разной начинкой • Создает инстанс нужного класса • например, фабрика для выбора хранилища данных, службы доставки, платежной системы
! Код вне объектов может быть только в index.php. Html должен быть в отдельных файлах. Логики там содержаться не должно, максимум вывод переменных, циклы для списков и if необходимые для определения логики вывода. ! Не бойтесь ошибиться. Не попробовав, вы никогда не поймете, как оно работает на самом деле.
! Код вне объектов может быть только в index.php. Html должен быть в отдельных файлах. Логики там содержаться не должно. ! Не бойтесь ошибиться. Не попробовав, вы никогда не поймете, как оно.