ООП, Объектно-ориентированное программирование в php, краткий справочник
Отредактировано: 15 Января 2019
Основные понятия
Класс — каркас объекта. Кусок кода, который определяет типы данных, и функции которые будут содержать созданные объекты класса (например, для создания форума можно создать классы Forum, Topic, Post и Member).
Объект — сущность, абстрактное представление экземпляра класса. Содержит данные и функции, установленные в соответствующем классе, для манипулирования ими. Можно создавать неограниченное количество объектов в классе.
Переменные класса — значения данных, для объектов класса.
Методы — функции, определяемые в классе и применяемые для объектов этого класса.
Конструкции
Создание класса
class ClassName
{
// (определение класса)
}
Префиксы для классов:
- abstract — абстрактный класс.
Абстрактный класс — это заготовка для создания обычных классов, содержащая в себе основные методы и значения, которые должны быть в обычном классе. Из абстрактных классов нельзя создать объект. Любой класс, содержащий абстрактный метод должен быть помечен как абстрактный.
При наследовании от абстрактного класса, все методы, помеченные абстрактными в родительском классе, должны быть определены в дочернем классе. Область видимости этих методов должна совпадать (или быть менее строгой). При объявлении методов типы и количество обязательных аргументов должно быть одинаковым.
abstract class ClassName
{
// (определение класса)
}
Постфиксы для классов:
- extend — наследуемость от другого класса.
class ClassName extend AnotherClassName
{
// (определение класса)
}
Создание объекта
$var = new ClassName();
Вызов объекта:
$var->ClassName();
Можно использовать $this — экземпляр объекта.
Создание переменных класса
class ClassName {
public $propertyName;
private $propertyName;
protected $propertyName;
}
Области видимости переменных класса:
- public (публичная) — можно читать и изменять в любом месте скрипта, даже за пределами класса.
- private (частная) — доступны только методам класса, а также классам наследникам и родительским классам.
- protected (защищенная) — доступны только методам класса.
Доступ к переменным класса:
$var->propertyName
Создание метода класса
class ClassName
{
public function methodName() {
// (код)
}
private function methodName() {
// (код)
}
protected function methodName() {
// (код)
}
}
Области видимости методов класса:
- public (публичная) — могут быть вызваны в любом месте скрипта, даже за пределами класса.
- private (частная) — могут быть вызваны только в пределах самого класса, наследующих его классах и родительских классах.
- protected (защищенная) — могут быть вызваны только из самого класса.
Постфиксы для методов класса:
- abstract — абстрактный метод.
Методы, объявленные абстрактными, несут описательный смысл и не могут включать реализацию.
При наследовании от абстрактного класса, все методы, помеченные абстрактными в родительском классе, должны быть определены в дочернем классе. Область видимости этих методов должна совпадать (или быть менее строгой). При объявлении методов типы и количество обязательных аргументов должно быть одинаковым.
Вызов метода класса:
$var->methodName()
Пример создания простого класса
<?php
Class Sample // Объявляем новый класс с именем Sample
{
// объявляем переменные
var $Title;
var $Content;
function setTitle($title) // устанавливает значение в переменную $Title
{
$this->Title = $title; // Обращаемся к переменной
}
function setContent($content) // устанавливает значение переменной $Content
{
$this->Content = $content;
}
function setAll($title, $content) // Устанавливает переменные $Title и $Content
{
// с помощью функций данного класса
$this->setTitle($title);
$this->setContent($content);
// или через переменные
//$this->Title = $title;
//$this->Content = $content;
}
}
$newObject = new Sample(); // Создаем экземпляр класса Sample
$newObject->Title = "Заголовок"; // Изменение переменной класса Sample
$newObject->setAll("Заголовок", "Содержание"); // Обращение к функции класса Sample
echo $newObject->Content; // Вывод в браузер переменной Content, находящейся в классе Sample
?>
Дополнительно
Области видимости
:: — оператор разрешения области видимости позволяющий обращаться к статическим свойствам, константам, переопределенным свойствам или методам класса.
self:: — вызываем метод именно того класса, в котором указан self (не унаследованного).
В этом случае "self::" находится в родительском классе, следовательно берет данные из родительского (оттуда где он находится).
class Model {
public static $table='table';
public static function getTable() {
return self::$table;
}
}
class User extends Model{
public static $table='users';
}
echo User::getTable(); // выведет 'table'
static:: — вызываем метод текущего класса.
Тут "static::" берет данные из вызывающего класса, в этом случае 'Users'.
class Model {
public static $table='table';
public static function getTable() {
return static::$table;
}
}
class User extends Model{
public static $table='users';
}
echo User::getTable(); // выведет 'users'
parent:: — вызываем родительский метод (не обязательно статичный).
"parent::" используется для доступа к методам и свойствам базового (родительского) класса. В этом примере, в дочернем классе, переопределили метод базового класса foo(), но с помощью "parent::" все еще можно обратиться к родительскому методу.
class Model {
public static $table='table';
public static function foo() {
echo "1_test";
}
}
class User extends Model{
public static function foo() {
echo "2_test";
parent::foo();
}
}
echo User::foo(); // выведет '2_test1_test'
За пример простейшего класса спасибо internet-technologies.ru