Skip to content

Commit 1e65695

Browse files
authored
property-hooks.xml Исправил ошибки и формулировки
1 parent 70fe651 commit 1e65695

File tree

1 file changed

+17
-39
lines changed

1 file changed

+17
-39
lines changed

language/oop5/property-hooks.xml

Lines changed: 17 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -86,29 +86,27 @@ class Example
8686
$example = new Example();
8787
$example->foo = 'changed';
8888
print $example->foo;
89-
90-
?>
9189
]]>
9290
</programlisting>
9391
</example>
9492
<simpara>
9593
Объявление свойства <varname>$foo</varname> заканчивается фигурными скобками <literal>{}</literal>, а не точкой с запятой.
96-
Это указывает на то, что для свойства определили хуки.
94+
Фигурные скобки указывают, что для свойства определили хуки.
9795
В примере определили оба хука — и <literal>get</literal>, и <literal>set</literal>,
9896
хотя разрешается определять отдельно один или другой.
99-
Обоим хуках определили тела, которые также обозначили фигурными скобками <literal>{}</literal>.
100-
В теле разрешается записывать произвольный код.
97+
Для каждого хука определили тело, которое обозначается фигурными скобками <literal>{}</literal>.
98+
В теле записывают произвольный код.
10199
</simpara>
102100
<simpara>
103-
Хук <literal>set</literal> дополнительно разрешает указывать тип и название входящего значения,
104-
тем же синтаксисом, которым в методах объявляют параметры.
101+
Хук <literal>set</literal> дополнительно поддерживает объявление типа и названия входящего значения
102+
синтаксисом, аналогичным объявлению параметров в методах.
105103
Тип значения указывается либо с ограничением как у типа свойства,
106104
либо <link linkend="language.oop5.variance.contravariance">контравариантным</link> к значению —
107105
с более широким, или слабым, ограничением.
108106
Например, для свойства с типом <type>string</type>
109-
в хуке <literal>set</literal> разрешается определять параметр, который принимает типы
107+
в хуке <literal>set</literal> возможно определить параметр с типом
110108
<type class="union"><type>string</type><type>Stringable</type></type>,
111-
но нельзя определить только тип <type>array</type>.
109+
но нельзя определить параметр с типом <type>array</type>, поскольку тип <type>array</type> не принадлежит ни самому строковому типу, ни надтипу строки.
112110
</simpara>
113111
<simpara>
114112
В примере по крайней мере один хук ссылается на само свойство <code>$this->foo</code>,
@@ -146,8 +144,6 @@ class Example
146144
}
147145
}
148146
}
149-
150-
?>
151147
]]>
152148
</programlisting>
153149
</example>
@@ -178,8 +174,6 @@ class Example
178174
}
179175
}
180176
}
181-
182-
?>
183177
]]>
184178
</programlisting>
185179
</example>
@@ -201,8 +195,6 @@ class Example
201195
set => strtolower($value);
202196
}
203197
}
204-
205-
?>
206198
]]>
207199
</programlisting>
208200
</example>
@@ -318,8 +310,6 @@ class Example
318310
}
319311
}
320312
}
321-
322-
?>
323313
]]>
324314
</programlisting>
325315
</example>
@@ -349,26 +339,24 @@ class Rectangle
349339
$s = new Rectangle(4, 5);
350340
print $s->area; // Выводит 20
351341
$s->area = 30; // Ошибка, поскольку для свойства не определили комбинацию записи
352-
353-
?>
354342
]]>
355343
</programlisting>
356344
</example>
357345
<simpara>
358-
Для виртуального свойства разрешается определять оба хука, как <literal>get</literal>, так и <literal>set</literal>.
346+
Для виртуальных свойств поддерживается определение обоих хуков: <literal>get</literal> и <literal>set</literal>.
359347
</simpara>
360348
</sect2>
361349
<sect2>
362350
<title>Об области видимости</title>
363351
<simpara>
364-
Хуки действуют в области видимости модифицуируемого объекта.
352+
Хуки действуют в области видимости модифицируемого объекта.
365353
Поэтому хукам доступны открытые, защищённые и закрытые методы и свойства объекта,
366-
включая свойства со своими хуками.
367-
Доступ к другому свойству из хука не обходит хуки, которые определили для другого свойства.
354+
включая свойства с хуками.
355+
Хуки свойств срабатывают при каждом обращении к свойству, даже при обращении из хука другого свойства.
368356
</simpara>
369357
<simpara>
370-
Следствие этого состоит в том, что нетривиальным хукам доступен
371-
вызов метода произвольной сложности, если потребуется.
358+
За счёт доступа к членам объекта и срабатывания при каждой операции чтения или записи
359+
хуки поддерживают не только тривиальную логику, но и, если потребуется, вызов методов произвольной сложности.
372360
</simpara>
373361
<example>
374362
<title>Пример вызова метода из хука</title>
@@ -394,8 +382,6 @@ class Person
394382
return $value;
395383
}
396384
}
397-
398-
?>
399385
]]>
400386
</programlisting>
401387
</example>
@@ -466,8 +452,6 @@ class Manager extends User
466452
set => strtoupper($value);
467453
}
468454
}
469-
470-
?>
471455
]]>
472456
</programlisting>
473457
</example>
@@ -482,10 +466,10 @@ class Manager extends User
482466
Это то же поведение, что и у окончательных методов.
483467
</simpara>
484468
<simpara>
485-
В дочернем классе разрешается определять или переопределять отдельные хуки для свойства
486-
путём переопределения свойства и только тех хуков, которые классу требуется переопределить.
487-
В дочернем классе также возможно добавить хуки к свойству, для которого хуки не определили прежде.
488-
Практически, это то же самое, как если бы хуки были методами.
469+
Подклассы поддерживают определение своих хуков и переопределение отдельных хуков родительских свойств.
470+
В подклассах хуки переопределяют путём переопределения свойства только с конкретными хуками.
471+
Дочерние классы поддерживают также добавление свойствам хуков, которые не определили в родительском классе.
472+
Практически, правила переопределения хуков аналогичны правилам переопределения методов.
489473
</simpara>
490474
<example>
491475
<title>Наследование хуков</title>
@@ -511,8 +495,6 @@ class PositivePoint extends Point
511495
}
512496
}
513497
}
514-
515-
?>
516498
]]>
517499
</programlisting>
518500
</example>
@@ -570,8 +552,6 @@ class PositivePoint extends Point
570552
}
571553
}
572554
}
573-
574-
?>
575555
]]>
576556
</programlisting>
577557
</example>
@@ -600,8 +580,6 @@ class CaseFoldingStrings extends Strings
600580
;
601581
}
602582
}
603-
604-
?>
605583
]]>
606584
</programlisting>
607585
</example>

0 commit comments

Comments
 (0)