PHP: Шпаргалка по ООП
Объектно-ориентированное программирование давно уже стало неотъемлемой частью работы большинства программистов. Процедурный стиль хорош для выполнения мелких задач. Для более сложных решений, безусловно, использования ООП будет оправданным. К тому же, сейчас все современные фреймворки активно используют ООП. Ниже список основ и полезных фишек. Список пополняется.
Важно!
Свойство объекта — это переменная
Метод объекта — это функция
Создание объекта:
$obj = new Class(); $obj->method(); // это обращение к методу класса $obj->property; // это обращение к свойству класса
Конструктор и деструктор:
function __construct(){} // это метод, который срабатывается во момент создания объекта function __destruct(){} // это метод, который срабатывается во момент удаления объекта //!!!важно!!! //в конструктор можно передавать переменные (аргументы) //в деструктор нельзя, так как если передать переменную, которая будет удалена, то это приведет к ошибке
Вспомогательные константы:
echo __CLASS__; // выведет название класса echo __METHOD__; // выведет название метода класса (объект::метод)
Спецификаторы доступа или (инкапсуляция)
public // могу получить доступ из кода и из классов(родительский и наследуемый) protected // могу получить доступ только из классов(родительский и наследуемый) private // могу получить доступ только из родительского класса
Указание на родительский метод:
parent::method();
Перебор свойств объекта:
foreach ($object as $name => $value) { echo "$name: $value"; } // $object можно заменить на $this (если я использую это внутри класса), чтоб указать, что можно использовать любой объект, а не какой-то конкретно
Константы классов:
const CONST_NAME = 'данные константы'; // объявление константы в классах echo USER::CONST_NAME; // вывод константы вне класса, где USER это название класса, а CONST_NAME это название константы echo self::CONST_NAME; // вывод константы внутри класса, где CONST_NAME это название константы
Проверяем если объект является экземпляром класса:
if ($object instanceof Class) {}
Исключения (они нужны для отлова ошибок):
try{ // some code if ($error) throw new Exception("Ошибка!"); } catch(Exception $e) { echo $e->getMessage(); }
Перегрузка стандартных PHP классов (то есть наследование класса):
class MyException extends Exception { function __construct($msg) { parent::__construct($msg); } }
Абстрактные классы и интерфейсы используются для описания наших классов, то есть здесь мы задаем шаблоны по которым будут работать наши наследуемые классы. Абстрактный класс
(abstract) - это шаблон, который содержит в себе объявление методов
если в абстрактном классе есть абстрактный метод, то он должен быть перегружен
abstract class MyClass {}
Интерфейсы
- это тоже абстрактный класс, но который содержит только абстрактные методы:
// Так же нужно перегружать методы interface MyClass{} class MyNaslednik implements MyClass{}
Метод final
нельзя перегрузить:
final function Mymethod(){}
Автоматическая подгрузка классов
Если представить себе ситуацию, что вы используете несколько экземпляров разных классов и чтоб избавиться от бесконечных include (require), лучше один раз указать ФУНКЦИЮ!!!
__autoload()
// Это функция, а не метод function __autoload($className){ include($className); }
Магические методы __set()
, _get()
, __call()
и __toString()
__set()
- срабатывает автоматически в том случае, когда мы присваиваем какое-то значение не известному(не объявленному) свойству
function __set($objName, $objValue) { $this->someVar[$objName] = $objValue; }
_get()
- срабатывает автоматически в том случае, когда мы пытаемся получить значение не известного(не объявленного) свойства
function __get($objName) { return $this->someVar[$objName]; }
__call()
срабатывает автоматически в том случае, когда мы пытаемся вызвать не известный(не объявленный) метод
function __call($methodName, $params){}
__toString()
- срабатывает автоматически в том случае, когда мы пытаемся вывести объект
$obj = name Class(); echo $obj; function __toString() { // some code ... }