Skip to content

Commit 0043c7a

Browse files
authored
decon.xml Исправил и уточнил формулировки
1 parent cac7745 commit 0043c7a

File tree

1 file changed

+51
-53
lines changed

1 file changed

+51
-53
lines changed

language/oop5/decon.xml

Lines changed: 51 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
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

Comments
 (0)