Объектно-ориентированное программирование давно уже стало неотъемлемой частью работы большинства программистов. Процедурный стиль хорош для выполнения мелких задач. Для более сложных решений, безусловно, использования ООП будет оправданным. К тому же, сейчас все современные фреймворки активно используют ООП. Ниже список основ и полезных фишек. Список пополняется.
Создание объекта:
$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 ...
}
Комментарии (0)
Пока еще не было комментариев ✍️