Определение и использование класса После введения в классы мы готовы написать наш собственный класс. Он будет содержать информацию об основном пользователе, например, вашего сайта. Определение класса в PHP выглядит так же, как объявление функции, но вместо function, используется ключевое слово class. Давайте начнем с наброска PHP class User: <?php class User { } ?> Код <?php class User { } ?> На данный момент этот класс ничего не может сделать. Мы можем создать экземпляр, это делается с помощью ключевого слова new: $user = new User(); ?> Код $user = new User(); ?> Но так как класс ничего не может делать, объект $user также бесполезен. Давайте исправим это, добавив пару переменных класса и метод: class User { public $name; public $age; public function Describe() { return $this->name . " is " . $this->age . " years old"; } } Код class User { public $name; public $age; public function Describe() { return $this->name . " is " . $this->age . " years old"; } } В PHP class примере мы объявляем две переменные класса - name и age. Переменная name снабжена спецификатором доступа "public", который означает, что к переменной можно получить доступ за пределами класса. Далее мы объявляем функцию Describe(). Это выглядит точно так же, как объявление обычной функции, но с несколькими отличиями. Перед объявлением ставится ключевое слово public, чтобы указать спецификатор доступа. Внутри функции мы используем переменную "$this", чтобы получить доступ к переменным самого класса. $this - специальная переменная в PHP, которая доступна в функциях класса и всегда ссылается на объект, из которого она используется. Попробуем использовать наш новый класс. Следующий код должен идти после того, как класс был объявлен или подключен: $user = new User(); $user->name = "Алексей"; $user->age = 42; echo $user->Describe(); Код $user = new User(); $user->name = "Алексей"; $user->age = 42; echo $user->Describe(); Первое, на что вы должны обратить внимание, это использование оператора ->. Мы также использовали его в методе Describe(). Это означает, что мы хотим получить доступ к чему-то из объекта, указанного перед оператором. $user->name означает: "Дайте мне переменную name из объекта $user". После этого идет то же самое, что и присвоение значения обычной переменной, к которой мы дважды обращались для получения имени и возраста объекта пользователя. В последней строке мы вызываем метод Describe()объекта пользователя, который будет возвращать строку, которую мы затем выводим. Результат должен выглядеть следующим образом: Алексей 42 года. Поздравляем, вы только что определили и использовали свой первый PHP class. Конструкторы и деструкторы Конструктор и деструктор - специальные функции, которые автоматически вызываются, когда объект создается и уничтожается. Из них наиболее полезным является конструктор, потому что позволяет при создании нового объекта передавать ему параметры, которые затем используются для инициализации переменных объекта. Вот пример класса с простым конструктором: class Animal { public $name = "No-name animal"; public function __construct() { echo "I'm alive!"; } } Код class Animal { public $name = "No-name animal"; public function __construct() { echo "I'm alive!"; } } Конструктор выглядит как обычная функция, за исключением того, что начинается с двух символов нижнего подчеркивания. В PHP так указывается волшебная функция, которая обладает дополнительной функциональностью по сравнению с обычными функциями. Таким образом, функция типа "__construct", является конструктором класса и будет вызываться автоматически при создании объекта. Давайте попробуем сделать это в следующем PHP class примере: $animal = new Animal(); Код $animal = new Animal(); С помощью этой строки кода будет создан объект, вызван конструктор и в нем выполнится код, что приведет к выводу строки “I'm alive!”. Но как уже упоминалось ранее, основным преимуществом конструктора является возможность передавать параметры, которые могут быть использованы для инициализации переменных – членов класса. Давайте попробуем сделать это: <?php class Animal { public $name = "No-name animal"; public function __construct($name) { $this->name = $name; } } $animal = new Animal("Bob the Dog"); echo $animal->name; ?> Код <?php class Animal { public $name = "No-name animal"; public function __construct($name) { $this->name = $name; } } $animal = new Animal("Bob the Dog"); echo $animal->name; ?> Объявление конструктора с параметрами такое же, как объявление функции, и передача параметров очень похожа на вызов обычной функции, но с ключевым словом “new”. Конструктор может иметь столько параметров, сколько вам хочется. Деструкторы Деструктор вызывается при уничтожении объекта. В некоторых языках программирования нужно вручную избавиться от созданных объектов, но в PHP это делает сборщик мусора, который следит за объектами и автоматически уничтожает их, когда они больше не нужны. Посмотрите на следующий пример, который является расширенной версией предыдущего PHP class: <?php class Animal { public $name = "No-name animal"; public function __construct($name) { echo "I'm alive!"; $this->name = $name; } public function __destruct() { echo "I'm dead now :("; } } $animal = new Animal("Bob"); echo "Name of the animal: " . $animal->name; ?> Код <?php class Animal { public $name = "No-name animal"; public function __construct($name) { echo "I'm alive!"; $this->name = $name; } public function __destruct() { echo "I'm dead now :("; } } $animal = new Animal("Bob"); echo "Name of the animal: " . $animal->name; ?> Как видите, деструктор такой же как конструктор, только имя отличается. Если попробуете запустить этот пример, то сначала увидите сообщение конструктора, а затем название животного, которое мы вручную выводим в последней строке. После этого сценарий заканчивается, объект уничтожается деструктором, и выводится сообщение.