Выбрать страницу

В краткой форме изложен объекто-ориентированный синтаксис используемый в PHP 5.3 и выше.

Пример определения пустого класса ProductClass и создания объекта этого данного класса:

class ProductClass {
}
$product = new ProductClass();

Управление доступом к свойствам и методам класса

public (общедоступные) можно получить доступ из любого контекста.
private (закрытые) можно получить доступ только из класса, в котором объявлены данные свойства и методы. Подклассы данного класса не имеют доступа к таким свойствам и методам.
protected (защищенные) можно получить доступ только из класса, в котором объявлены данные свойства и методы или из его подкласса. Внешний код не имеют доступа к таким свойствам и методам.

Методы доступа к свойствам класса

Если в клиентской программе необходимо работать со значениями, хранящимся в экземпляре класса, в большинстве случаев стоит запретить доступ к свойствам этого объекта. А для доступа к значениям создать методы, которые возвращают или устанавливают нужные значения. Такие методы называются методами доступа (accessors) или получателями (getter) и установщиками setter.

class ProductClass {
  private $name;
  public function getName() {
    return $this->name;
  }
  public function setName($name) {
    $this->name=$name;
  }
}
$product = new ProductClass();
//Неверно 
//$product->name='Андрей';
//echo $product->name;

//Верно 
$product->setName('Андрей');
echo $product->getName();

Статические методы и свойства

Статические методы не вызываются в контексте объекта. Поэтому статические методы и свойства часто называют переменными или свойствами класса. Также нельзя использовать псевдопеременную $this внутри статического метода.

class ProductClass {
  static public $count=0;
  static public function getCount() {
    return self::$count;
    //Можно написать и так, но лучше 
    //использовать псевдопеременную self
    //return ProductClass::$count;
  }
  public function setCount($count) {
    self::$count=$count;
  }
}
//Для статических методов создавать 
//объект не обязательно
//$product = new ProductClass();
ProductClass::setCount(55);
echo ProductClass::$count;
echo ProductClass::getCount();


Постоянные свойства

Постоянные свойства — это общедоступные, статические свойства которые клиентский код не должен изменять. Аналог глобальных констант, только для классов.

class ProductClass {
  const IN_STOCK=0;
}
echo ProductClass::IN_STOCK;

Абстрактные классы и методы

Нельзя создать экземпляр абстрактного класса. В абстрактном классе определяется (и, возможно, частично реализуется) интерфейс для любого класса, который может его расширить.

В любом классе расширяющим абстрактный класс должны быть реализованы все абстрактные методы, либо сам класс должен быть объявлен абстрактным.

abstract class ProductClass {
  abstract public function Hello();
}
echo ProductClass::IN_STOCK;

Интерфейсы

Интерфейс только определяет функциональность, но никогда не реализует ее. Интерфейс может содержать объявления свойств и методов, но не тела этих методов.

Любой класс содержащий интерфейс должен реализовать все методы, объявленные в интерфейсе или сам должен быть объявлен как абстрактный.

interface Stock {
  public function inStock();
}

class BigStock implements Stock {
  public function inStock(){
    return true;
  }
}

В php поддерживается одиночное наследование, то есть класс может наследоваться только от одного родителя. В тоже время класс может реализовывать более одного интерфейса.

Было опубликовано 8 ноября 2012 на php-example.ru

Share This