ООП, Объектно-ориентированное программирование в php, краткий справочник

Основные понятия

Класс — каркас объекта. Кусок кода, который определяет типы данных, и функции которые будут содержать созданные объекты класса (например, для создания форума можно создать классы 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'
tnx

За пример простейшего класса спасибо internet-technologies.ru