Php классы конструктор значение

Конструкторы и деструкторы

PHP 5 позволяет объявлять методы-конструкторы. Классы, в которых объявлен метод-конструктор, будут вызывать этот метод при каждом создании нового объекта, так что это может оказаться полезным, например, для инициализации какого-либо состояния объекта перед его использованием.

Замечание: Конструкторы в классах-родителях не вызываются автоматически, если класс-потомок определяет собственный конструктор. Чтобы вызвать конструктор, объявленный в родительском классе, следует обратиться к методу parent::__construct() внутри конструктора класса-потомка. Если в классе-потомке не определен конструктор, то он может наследоваться от родительского класса как обычный метод (если он не определен как приватный).

Пример #1 Использование унифицированных конструкторов

class BaseClass function __construct () print «Конструктор класса BaseClass\n» ;
>
>

class SubClass extends BaseClass function __construct () parent :: __construct ();
print «Конструктор класса SubClass\n» ;
>
>

class OtherSubClass extends BaseClass // inherits BaseClass’s constructor
>

// In BaseClass constructor
$obj = new BaseClass ();

// In BaseClass constructor
// In SubClass constructor
$obj = new SubClass ();

// In BaseClass constructor
$obj = new OtherSubClass ();
?>

В целях обратной совместимости, если PHP 5 не может обнаружить объявленный метод __construct() и этот метод не наследуется от родительских классов, то вызов конструктора произойдет по устаревшей схеме, через обращение к методу, имя которого соответствует имени класса. Может возникнуть только одна проблема совместимости старого кода, если в нём присутствуют классы с методами __construct(), использующиеся для других целей.

В отличие от других методов, PHP не будет генерировать ошибку уровня E_STRICT , если __construct() будет перекрыт методом с другими параметрами, отличными от тех, которые находятся в родительском __construct().

Начиная с версии PHP 5.3.3, методы с именами, совпадающими с последним элементом имени класса, находящимся в пространстве имен, больше не будут считаться конструкторами. Это изменение не влияет на классы, не находящиеся в пространстве имен.

Пример #2 Конструкторы в классах, находящихся в пространстве имен

namespace Foo ;
class Bar public function Bar () // конструктор в версиях PHP 5.3.0-5.3.2
// обычный метод, начиная с версии PHP 5.3.3
>
>
?>

Деструкторы

PHP 5 предоставляет концепцию деструкторов, сходную с теми, что применяются в других ОО языках, таких, как C++. Деструктор будет вызван при освобождении всех ссылок на определенный объект или при завершении скрипта (порядок выполнения деструкторов не гарантируется).

Пример #3 Пример использования деструктора

class MyDestructableClass function __construct () print «Конструктор\n» ;
$this -> name = «MyDestructableClass» ;
>

function __destruct () print «Уничтожается » . $this -> name . «\n» ;
>
>

$obj = new MyDestructableClass ();
?>

Как и в случае с конструкторами, деструкторы, объявленные в родительском классе, не будут вызваны автоматически. Для вызова деструктора, объявленном в классе-родителе, следует обратиться к методу parent::__destruct() в теле деструктора-потомка. Также класс-потомок может унаследовать деструктор из родительского класса, если он не определен в нем.

Деструктор будет вызван даже в том случае, если скрипт был остановлен с помощью функции exit() . Вызов exit() в деструкторе предотвратит запуск всех последующих функций завершения.

Замечание:

Деструкторы, вызываемые при завершении скрипта, вызываются после отправки HTTP-заголовков. Рабочая директория во время фазы завершения скрипта может отличаться в некоторых SAPI (например, в Apache).

Замечание:

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

Источник

Php классы конструктор значение

Конструкторы представляют специальные методы, которые выполняются при создании объекта и служат для начальной инициализации его свойств. Для создания конструктора надо объявить функцию с именем __construct (с двумя подчеркиваниями впереди):

name = $name; $this->age = $age; > function displayInfo() < echo "Name: $this->name; Age: $this->age
"; > > $tom = new Person("Tom", 36); $tom -> displayInfo(); $bob = new Person("Bob", 41); $bob -> displayInfo(); ?>

Функция конструктора в данном случае принимает два параметра. Их значения передаются свойствам класса. И теперь чтобы создать объект, нам надо передать значения для соответствующих параметров:

Name: Tom; Age: 36 Name: Bob; Age: 41

Параметры по умолчанию

Чтобы сделать конструктор более гибким, мы можем обозначить один или несколько параметров в качестве необязательных. Тогда при создании объекта необязательно указывать все параметры. Например, изменим конструктор следующим образом:

function __construct($name="Том", $age=36) < $this->name = $name; $this->age = $age; >

Таким образом, если не будут заданы параметры, вместо них будут использоваться значения «Том» и 36. И теперь мы можем создать объект Person несколькими способами:

name = $name; $this->age = $age; > function displayInfo() < echo "Name: $this->name; Age: $this->age
"; > > $tom = new Person(); $tom -> displayInfo(); $bob = new Person("Bob"); $bob -> displayInfo(); $sam = new Person("Sam", 29); $sam -> displayInfo(); ?>
Name: Том; Age: 36 Name: Bob; Age: 36 Name: Sam; Age: 29

Объявление свойств через конструктор

Начиная с версии PHP 8 в языке появилась возможность определить свойства через список параметров конструктора. Любой параметр конструктора, который имеет модификатор доступа, например, public , будет автоматически представлять новое свойство.

Например, определим свойства name и age напрямую через параметры конструктора:

name = $name; $this->age = $age; > function displayInfo() < echo "Name: $this->name; Age: $this->age
"; > > $tom = new Person("Tom", 36); $tom -> displayInfo(); ?>

Хотя в данном случае в классе явным образом не определены свойства name и age, но поскольку в списке параметров конструктора заданы параметры с такими именами и с модификатором доступа (в данном случае public ), то у класса автоматически создаются подобные переменные.

Можно сочетать оба способа объявления переменных:

class Person < public $name; function __construct($name, public $age) < $this->name = $name; $this->age = $age; > function displayInfo() < echo "Name: $this->name; Age: $this->age
"; > >

При подобном объявлении свойств также можно передавать им значения по умолчанию:

class Person < public $name; function __construct($name = "Sam", public $age = 33) < $this->name = $name; $this->age = $age; > function displayInfo() < echo "Name: $this->name; Age: $this->age
"; > >

Деструкторы

Деструкторы служат для освобождения ресурсов, используемых программой — для освобождения открытых файлов, открытых подключений к базам данных и т.д. Деструктор объекта вызывается самим интерпретатором PHP после потери последней ссылки на данный объект в программе.

Деструктор определяется с помощью функции __destruct (два подчеркивания впереди):

class Person < public $name, $age; function __construct($name, $age) < $this->name = $name; $this->age = $age; > function getInfo() < echo "Имя: $this->name ; Возраст: $this->age 
"; > function __destruct() < echo "Вызов деструктора"; >>

Функция деструктора определяется без параметров, и когда на объект не останется ссылок в программе, он будет уничтожен, и при этом будет вызван деструктор.

Источник

Конструктор PHP

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

Что такое конструктор PHP?

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

Имена магических методов всегда начинаются с двух подчеркиваний, и магический метод __construct() не является исключением. Объявление функции-конструктора начинается с двух знаков подчеркивания (__) и имени __construct :

Согласно основам PHP ООП конструктор нельзя вызвать более одного раза, но мы можем изменять значения переменных-членов.

Конструктор позволяет нам сразу инициализировать свойства объекта при при его создании.

Если мы создаём функцию __construct() , то PHP будет автоматически вызывать эту функцию, когда мы будем создавать объект из класса. Обычно мы используем конструктор для установки значения свойства.

В нашем простом примере мы хотим установить значение свойства $model сразу после создания объекта, поэтому мы добавляем конструктор внутри класса, который устанавливает значение свойства $model :

Пример

 model = $model; > > $car1 = new Car(); // Fatal error: Uncaught ArgumentCountError. ?>

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

Почему вышеприведённый сценарий был остановлен и выдал фатальную ошибку?

Чтобы использовать конструктор, мы должны передать аргумент классу со значением свойства (в нашем случае для $model), как только мы создадим объект, но если мы попытаемся создать новый объект, не присваивая значение, которое требуется конструктору, будет возникать ошибка.

Чтобы избежать такой ошибки, мы должны присвоить конструктору значение. Таким образом, в качестве примера мы присваиваем конструктору значение Mercedes , записывая его в скобках вновь созданного объекта:

Теперь давайте добавим метод getCarModel() , чтобы отобразить значение свойства $model автомобиля из только что созданного объекта:

Пример

 model = $model; > public function getCarModel() < return ' Модель автомобиля: ' . $this ->model; > > //Мы передаем значение переменной после создания объекта $car1 = new Car("Mercedes"); echo $car1 -> getCarModel(); ?>

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

В приведенном выше примере мы видим, что использование конструктора избавляет нас от необходимости создания и вызова метода setCarModel() , что сокращает объем кода.

PHP-конструктор с несколькими парамерами

В конструктор можно передавать сразу несколько параметров:

Пример

 model = $model; $this -> color = $color; > function getCarModel() < return ' Модель автомобиля: ' . $this ->model; > function getCarColor() < return ' Цвет автомобиля: ' . $this ->color; > > $car1 = new Car("Mercedes", "green"); echo $car1 -> getCarModel(); echo "
"; echo $car1 -> getCarColor(); ?>

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

Как правильно написать метод конструктора?

Когда мы пытаемся создать объект, у которого есть метод-конструктор, мы рискуем сломать наш код, если не передадим значение конструктору. Чтобы избежать этого, мы можем определить значение по умолчанию для свойств, которые мы хотели бы установить через конструктор. Значение по умолчанию может быть наиболее разумным выбором для свойства: ноль, пустая строка или даже null.

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

В приведенном ниже примере мы присваиваем значение по умолчанию null свойству $model и, только если значение передается конструктору, мы присваиваем это значение свойству. В любом другом случае свойство $model по умолчанию имеет значение строки «N/A»:

Пример

 model = $model; > > public function getCarModel() < return 'Модель автомобиля: ' . $this ->model; > > //Мы создаем новый объект Car, не передавая значение model $car1 = new Car(); echo $car1 -> getCarModel(); ?>

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

Несмотря на то, что мы создали объект без передачи значения свойству model, мы не вызвали ошибку, потому что свойство model в конструкторе имеет значение по умолчанию null .

С другой стороны, давайте посмотрим, что произойдет, когда мы определим model после создания объекта. В следующем примере мы присваиваем значение «Merceds» в $model сразу при создании объекта $car1:

Пример

 model = $model; > > public function getCarModel() < return 'Модель автомобиля: ' . $this ->model; > > //Мы создаем новый объект Car передавая значение model $car1 = new Car('Mercedes'); echo $car1 -> getCarModel(); ?>

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

Магические константы

В дополнение к магическим методам язык PHP предлагает несколько магических констант.

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

Давайте посмотрим в следующем примере, в котором мы используем магическую константу __CLASS__ в методе getCarModel() , чтобы получить имя класса:

Пример

 model = $model; > > public function getCarModel() < //Мы используем магическую константу __CLASS__, чтобы получить имя класса return " Имя класса: " . __CLASS__ . " модель: " . $this -> model; > > $car1 = new Car('Mercedes'); echo $car1 -> getCarModel(); ?>

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

Другие магические константы, которые могут пригодиться при разработке приложений:

__LINE__ — получить номер строки, в которой используется константа.
__FILE__ — получить полный путь или имя файла, в котором используется константа.
__METHOD__ — получить имя метода, в котором используется константа.

Заключение

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

Источник

Читайте также:  Html шаблоны для email рассылок
Оцените статью