1818 </para >
1919 <note >
2020 <simpara >
21- Конструктор родительского класса не вызывает автоматически
21+ Конструктор родительского класса не вызывается автоматически
2222 при определении конструктора в дочернем классе.
2323 Внутри конструктора дочернего класса потребуется вызвать
2424 <function >parent::__construct</function >, чтобы запустить конструктор родительского класса.
@@ -72,14 +72,14 @@ $obj = new OtherSubClass();
7272 при наследовании.
7373 </para >
7474 <para >
75- Конструкторы — обыкновенные методы, которые вызываются при инстанциировании объектов,
76- которые содержат эти конструкторы, или объектов дочерних классов без конструктора.
77- Поэтому в конструкторах определяют произвольное количество аргументов ,
75+ Конструкторы — обыкновенные методы, которые вызываются во время создания объекта
76+ класса с конструктором или объекта дочернего класса без конструктора.
77+ Поэтому в конструкторах определяют произвольное количество параметров ,
7878 которые разрешено объявлять обязательными, типизированными, со значением по умолчанию.
79- Аргументы конструктора указываются в круглых скобках после имени класса.
79+ Параметры конструктора указываются в круглых скобках после имени класса.
8080 </para >
8181 <example >
82- <title >Объявление аргументов в конструкторах</title >
82+ <title >Объявление параметров в конструкторах</title >
8383 <programlisting role =" php" >
8484<![CDATA[
8585<?php
@@ -96,31 +96,31 @@ class Point
9696 }
9797}
9898
99- // Передаём оба параметра
99+ // Передаём оба аргумента
100100$p1 = new Point(4, 5);
101101
102- // Передаём только обязательные параметры . Переменная $y содержит значение по умолчанию 0
102+ // Передаём только обязательные аргументы . Переменная $y содержит значение по умолчанию 0
103103$p2 = new Point(4);
104104
105- // Вызываем с именованными параметрами ( начиная с PHP 8.0) :
105+ // Создаём объект с передачей именованных аргументов, которые поддерживаются начиная с PHP 8.0:
106106$p3 = new Point(y: 5, x: 4);
107107]]>
108108 </programlisting >
109109 </example >
110110 <para >
111- Скобки после имени класса необязательны, если у класса нет конструктора,
111+ Скобки после названия класса необязательны, если в классе не определили конструктор
112112 или конструктор класса не содержит обязательных параметров.
113113 </para >
114114 <sect3 >
115115 <title >Конструкторы в старом стиле</title >
116116 <para >
117- До PHP 8.0.0 классы в глобальном пространстве имён будут
118- интерпретировать названный именем класса метод как конструктор старого стиля.
119- Этот синтаксис устарел и будет вызывать ошибку уровня <constant >E_DEPRECATED</constant >,
117+ До PHP 8.0.0 классы в глобальном пространстве имён
118+ интерпретируют названный именем класса метод как конструктор старого стиля.
119+ Этот синтаксис устарел и вызовет ошибку уровня <constant >E_DEPRECATED</constant >,
120120 но всё равно вызовет этот метод как конструктор.
121121 PHP вызовет как конструктор метод <link linkend =" object.construct" >__construct()</link >,
122122 если в классе определили и метод <link linkend =" object.construct" >__construct()</link >,
123- и метод с именем класса.
123+ и метод с названием класса.
124124 </para >
125125 <para >
126126 У метода, название которого совпадает с именем класса, нет особого значения
@@ -131,7 +131,7 @@ $p3 = new Point(y: 5, x: 4);
131131 </para >
132132 </sect3 >
133133 <sect3 xml : id =" language.oop5.decon.constructor.promotion" >
134- <title >Продвижение свойств в конструкторе </title >
134+ <title >Продвижение параметров конструктора до свойств класса </title >
135135 <para >
136136 С PHP 8.0.0 параметры конструктора стали поддерживать продвижение
137137 до свойств объекта. Это распространённая практика — присваивать
@@ -153,24 +153,22 @@ class Point
153153 </programlisting >
154154 </example >
155155 <para >
156- PHP интерпретирует аргумент одновременно и как параметр конструктора,
157- и как свойство объекта, и устанавливает значение аргумента свойству,
158- когда параметр конструктора содержит модификатор. Тогда тело конструктора
159- оставляют пустым или добавляют другие инструкции. Конструктор выполнит
160- дополнительные инструкции после присваивания значений аргументов
156+ PHP интерпретирует параметры с модификатором видимости одновременно и как параметр конструктора,
157+ и как свойство объекта, и устанавливает значение аргумента свойству.
158+ Из-за упреждающего вычисления тело конструктора
159+ остаётся пустым, или включает другие инструкции, не связанные с инициализацией свойств.
160+ Конструктор выполнит дополнительные инструкции после присваивания значений аргументов
161161 свойствам.
162162 </para >
163163 <para >
164- Не каждый аргумент обязан продвигать параметр конструктора
165- до свойства объекта. Допустимо смешивать продвигаемые
166- и непродвигаемые параметры в произвольном порядке, и давать
167- обыкновенным параметрам конструктора имена, которые совпадают с именами
168- свойств класса. Аргументы, которые продвигают параметры до свойств,
169- не влияют на вызывающий конструктор код.
164+ Не каждому параметру конструктора требуется продвижение
165+ до свойства объекта. Поддерживается смешивание продвигаемых
166+ и стандартных параметров в произвольном порядке. Продвигаемые параметры
167+ не изменяют порядок вызова конструктора.
170168 </para >
171169 <note >
172170 <para >
173- Указать <link linkend =" language.oop5.visibility" >модификатор области видимости</link > —
171+ <link linkend =" language.oop5.visibility" >Модификатор области видимости</link > —
174172 <literal >public</literal >, <literal >protected</literal > или <literal >private</literal > —
175173 наиболее вероятный способ применить продвинутую установку свойств,
176174 но любой другой модификатор, например <literal >readonly</literal >, даст такой же эффект.
@@ -179,29 +177,29 @@ class Point
179177 <note >
180178 <para >
181179 Нельзя указывать свойствам объекта тип <type >callable</type >.
182- Это связано с неоднозначностью, которую они представляют для движка PHP.
180+ Это связано с неоднозначностью, которую представляют вызываемые значения для движка PHP.
183181 Поэтому и для параметров конструктора, которые устанавливают классу свойства,
184- также нельзя указывать тип <type >callable</type >. Любые другие
185- <link linkend =" language.types.declarations" >декларации типов</link > допустимы .
182+ тоже нельзя указывать тип <type >callable</type >. Но остальные
183+ <link linkend =" language.types.declarations" >декларации типов</link > поддерживаются .
186184 </para >
187185 </note >
188186 <note >
189187 <para >
190- PHP применяет ограничения на именование параметров конструктора
188+ PHP накладывает ограничения на именование параметров конструктора
191189 как к свойствам класса, так и к параметрам функции,
192190 поскольку при разборе кода PHP преобразовывает синтаксический сахар
193- продвинутых свойств в декларирование свойств класса
191+ объявления свойств в конструкторе в декларирование свойств класса
194192 с теми же модификаторами видимости и типом данных, которые указали
195- в продвинутом параметре, и присваивает значение
193+ в продвигаемом до свойств объекта параметре, и присваивает значение
196194 аргумента и параметру функции, и свойству класса.
197195 </para >
198196 </note >
199197 <note >
200198 <para >
201- <link linkend =" language.attributes" >Атрибуты </link >, которые установили
202- для аргумента в продвинутом конструкторе, будут реплицированы как на аргумент ,
203- так и на свойство класса. Значение по умолчанию для аргумента в продвинутом
204- конструкторе распространяется только на аргумент, а не свойство .
199+ На этапе определения конструктора <link linkend =" language.attributes" >атрибуты </link >
200+ продвигаемого до свойства параметра реплицируются как на параметр конструктора ,
201+ так и на свойство класса, но значение по умолчанию PHP установит только параметру,
202+ но не свойству .
205203 </para >
206204 </note >
207205 </sect3 >
@@ -393,31 +391,31 @@ $obj = new MyDestructableClass();
393391 в деструкторе предотвратит запуск остальных процедур завершения работы.
394392 </para >
395393 <para >
396- Если деструктор создаёт новые ссылки на свой объект, он не будет вызван во второй раз,
397- когда счётчик ссылок снова достигнет нуля или во время последовательности выключения .
394+ Деструктор, который создаёт новые ссылки на свой объект, не вызовется второй раз,
395+ когда счётчик ссылок снова достигнет нуля или при завершении работы программы .
398396 </para >
399397 <para >
400- Начиная с PHP 8.4.0, когда <link linkend =" features.gc.collecting-cycles" >сбор циклических ссылок</link >
401- происходит во время выполнения <link linkend =" language.fibers" >файбера</link >,
402- деструкторы объектов, запланированных для сбора, выполняются в отдельном файбере,
403- называемом <literal >gc_destructor_fiber</literal >.
404- Если файбер приостановлен, будет создан новый для выполнения всех оставшихся деструкторов.
405- Предыдущий <literal >gc_destructor_fiber</literal > больше не будет
406- упоминаться сборщиком мусора и может быть собран, если на него нет других ссылок.
407- Объекты, деструктор которых приостановлен, не будут собираться до тех пор,
408- пока деструктор не вернётся или пока не будет собран сам файбер.
398+ Начиная с PHP 8.4.0 при запуске <link linkend =" features.gc.collecting-cycles" >сборки циклических ссылок</link >
399+ внутри <link linkend =" language.fibers" >файбера</link >
400+ деструкторы объектов-кандидатов на уничтожение выполняются в отдельном файбере,
401+ который называется <literal >gc_destructor_fiber</literal >.
402+ Сборщик создаст новый файбер сборки мусора для выполнения оставшихся деструкторов,
403+ если текущий файбер сборщика приостановили внутри деструктора уничтожаемого объекта.
404+ Сборщик мусора перестанет ссылаться на предыдущий файбер <literal >gc_destructor_fiber</literal >,
405+ который станет доступен для сборки, если на него не останется других ссылок.
406+ Уничтожение объектов с приостановленным деструктором откладывается
407+ до завершения выполнения деструктора или уничтожения самого файбера.
409408 </para >
410409 <note >
411410 <para >
412- При завершении работы скрипта PHP отправляет HTTP-заголовки перед обработкой деструкторов.
413- На этапе завершения работы скрипта рабочая директория, как её определяет PHP, иногда
414- не совпадает с рабочей директорией, которую возвращают отдельные SAPI-интерфейсы
415- (например, в Apache).
411+ Движок отправляет HTTP-заголовки ещё до начала этапа завершения работы скрипта, на котором вызываются деструкторы.
412+ Относительные пути в деструкторах разрешаются в неожиданные абсолютные пути,
413+ когда SAPI наподобие веб-сервера Apache изменяют текущий рабочий каталог на этапе завершения работы скрипта.
416414 </para >
417415 </note >
418416 <note >
419417 <para >
420- Попытка выбросить исключение из деструктора, который вызвали во время
418+ Попытка выбросить исключение из деструктора, который вызвали на этапе
421419 завершения работы скрипта, вызовет фатальную ошибку.
422420 </para >
423421 </note >
0 commit comments