В этом руководстве вы узнаете об объектах PHP, о том, как определить класс и как создать объект из класса.
Если вы посмотрите на окружающий мир, вы найдете множество примеров материальных объектов: лампы, телефоны, компьютеры и автомобили. Также вы можете найти нематериальные объекты, такие как банковские счета и транзакции.
Все эти объекты имеют две общие ключевые характеристики:
Например, банковский счет имеет состояние, которое состоит из:
Банковский счет также имеет следующее поведения:
Объекты PHP концептуально похожи на объекты реального мира, потому что они состоят из состояния и поведения.
Объект сохраняет свое состояние в переменных, которые часто называют свойствами. Объект также раскрывает свое поведение с помощью функций, известных как методы.
В реальном мире можно найти много однотипных объектов. Например, у банка много банковских счетов. У всех есть номера счетов и остатки на счетах.
Эти банковские счета созданы по одной и той же схеме. В объектно-ориентированных терминах мы говорим, что отдельный банковский счет является экземпляром класса Bank Account.
По определению, класс - это план/заготовка объектов. Например, из класса Bank Account вы можете создать множество объектов банковского счета.
Ниже показана связь между классом BankAccount и его объектами. Из класса BankAccount вы можете создать множество объектов BankAccount. И у каждого объекта есть свой номер счета и баланс.
Чтобы определить класс, вы указываете ключевое слово class, за которым следует его имя:
<?php
class ClassName
{
//...
}
Например, следующее определяем новый класс с именем BankAccount:
<?php
class BankAccount
{
}
Есть ряд соглашений, которым вы должны следовать при определении класса:
Для того чтобы создать новый объект класса BankAccount необходимо использовать ключевое слово new, например:
<?php
class BankAccount
{
}
$account = new BankAccount();
В этом синтаксисе $account - это переменная, которая ссылается на объект, созданный с использованием класса BankAccount.
Скобки, следующие за именем класса BankAccount, необязательны. Следовательно, вы можете создать новый объект BankAccount следующим образом:
$account = new BankAccount;
Процесс создания нового объекта также называется инстанциацией. Другими словами, вы создаете экземпляр объекта из класса. Или вы создаете новый объект из класса.
Класс BankAccount пуст, потому что у него нет состояния и поведения.
Чтобы добавить свойства к классу BankAccount, вы помещаете в него переменные. Например:
<?php
class BankAccount
{
public $accountNumber;
public $balance;
}
Класс BankAccount имеет два свойства $accountNumber и $balance. Перед каждым свойством вы видите ключевое слово public.
Ключевое слово public определяет видимость свойства. В этом случае вы можете получить доступ к свойству извне класса.
Чтобы получить доступ к свойству, используется оператор объекта (->) следующим образом:
<?php
$object->property;
В следующем примере показано, как задать значения свойств accountNumber и balance:
<?php
class BankAccount
{
public $accountNumber;
public $balance;
}
$account = new BankAccount();
$account->accountNumber = 1;
$account->balance = 100;
Помимо ключевого слова public, PHP также имеет ключевые слова private и protected, о которых вы узнаете из руководства по модификаторам доступа.
Ниже показан синтаксис определения метода в классе:
<?php
class ClassName
{
public function methodName(parameter_list)
{
// implementation
}
}
Как и свойство, метод также имеет один из трех модификаторов видимости: public, private и protected. Если вы определяете метод без модификатора видимости, по умолчанию он становится public.
В следующем примере определяется метод deposit() для класса BankAccount:
<?php
class BankAccount
{
public $accountNumber;
public $balance;
public function deposit($amount)
{
if ($amount > 0) {
$this->balance += $amount;
}
}
}
Метод deposit() принимает аргумент $amount. Он проверяет, больше ли $amount, чем ноль, перед добавлением к свойству.
Для вызова метода мы также используете оператор объекта (->) следующим образом:
$object->method(arguments)
Новый синтаксис в методе deposit() - это переменная $ his. Переменная $this - это текущий объект класса BankAccount, т.е. указывает на текущий объект.
Например, когда вы создаете новый объект $account и вызываете метод deposit(), $this внутри метода является объектом $account:
$account = new BankAccount();
$account->accountNumber = 1;
$account->balance = 100;
$account->deposit(100);
Точно так же вы можете добавить метод withdraw() в класс BankAccount следующим образом:
<?php
class BankAccount
{
public $accountNumber;
public $balance;
public function deposit($amount)
{
if ($amount > 0) {
$this->balance += $amount;
}
}
public function withdraw($amount)
{
if ($amount <= $this->balance) {
$this->balance -= $amount;
return true;
}
return false;
}
}
Метод withdraw() проверяет текущий баланс. Если баланс меньше суммы вывода, метод withdraw() возвращает false.
В противном случае он вычитает сумму снятия с баланса и возвращает true.