Классы и объекты
PHP Manual

Основы

class

Каждое определение класса начинается с ключевого слова class, затем следует имя класса, которое может быть любым именем не входящим в список зарезервированных слов PHP. После идет пара фигурных скобок, в которых находится определение свойств и методов класса. Псевдо-переменная $this доступна в том случае, когда метод был вызван в контексте объекта. $this является ссылкой на вызываемый объект. Обычно это тот объект, которому принадлежит вызванный метод, но может быть и другой объект, если метод был вызван статически из контекста другого объекта. Это показано на следующих примерах:

Пример #1 переменная $this в объектно-ориентированном языке

<?php
class A
{
    function 
foo()
    {
        if (isset(
$this)) {
            echo 
'$this определена (';
            echo 
get_class($this);
            echo 
")\n";
        } else {
            echo 
"\$this не определена.\n";
        }
    }
}

class 
B
{
    function 
bar()
    {
        
A::foo();
    }
}

$a = new A();
$a->foo();
A::foo();
$b = new B();
$b->bar();
B::bar();
?>

Результат выполнения данного примера:

$this определена (a)
$this не определена.
$this определена (b)
$this не определена.

Пример #2 Определение класса Simple Class

<?php
class SimpleClass
{
    
// объявление свойства
    
public $var 'значение по умолчанию';

    
// объявление метода
    
public function displayVar() {
        echo 
$this->var;
    }
}
?>

Значение по умолчанию должно быть постоянным выражением и не может быть, например, переменной, членом класса или вызовом функции.

Пример #3 Значение свойства класса по умолчанию

<?php
class SimpleClass
{
    
// неправильное объявление свойств:
    
public $var1 'hello '.'world';
    public 
$var2 = <<<EOD
привет, мир
EOD;
    public 
$var3 1+2;
    public 
$var4 self::myStaticMethod();
    public 
$var5 $myVar;

    
// правильное объявление свойств:
    
public $var6 myConstant;
    public 
$var7 self::classConstant;
    public 
$var8 = array(truefalse);
    
    
}
?>

Замечание:

Тут представлены несколько полезных функций для управления классами и объектами. Возможно, вам будет интересно взглянуть на функции Класса/Объекта.

В отличии от heredocs, nowdocs могут быть использованы как статические данные в любом контексте.

Пример #4 Пример использования nowdocs в контексте статических данных

<?php
class foo {
    
// Для PHP 5.3.0
    
public $bar = <<<'EOT'
bar
EOT;
}
?>

Замечание:

Поддержка nowdocs добавлена в PHP 5.3.0.

new

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

Пример #5 Создание экземпляра класса

<?php
$instance 
= new SimpleClass();
?>

В контексте класса возможно создать новый объект через new self и new parent.

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

Пример #6 Присваивание объекта

<?php
$assigned   
=  $instance;
$reference  =& $instance;

$instance->var '$assigned будет иметь это значение';

$instance null// $instance и $reference становятся null

var_dump($instance);
var_dump($reference);
var_dump($assigned);
?>

Результат выполнения данного примера:

NULL
NULL
object(SimpleClass)#1 (1) {
   ["var"]=>
     string(30) "$assigned будет иметь это значение"
}

extends

Класс может наследовать методы и свойства другого класса используя ключевое слово extends при декларации. Невозможно наследовать несколько классов, один класс может наследовать только один базовый класс.

Наследуемые методы и свойства могут быть переопределены (за исключением случаев, когда метод класса объявлен как final) путем объявления их с теми же именами, как и в родительском классе. Существует возможность доступа к переопределенным методам или статическим методам путем обращения к ним через parent::

Пример #7 Простое наследование класса

<?php
class ExtendClass extends SimpleClass
{
    
// Переопределение родительского метода
    
function displayVar()
    {
        echo 
"Расширенный класс\n";
        
parent::displayVar();
    }
}

$extended = new ExtendClass();
$extended->displayVar();
?>

Результат выполнения данного примера:

Расширенный класс
значение по умолчанию

Классы и объекты
PHP Manual