Skip to content

Commit 2ec8cc8

Browse files
committed
sync with EN; new translations
1 parent a55bb4e commit 2ec8cc8

9 files changed

Lines changed: 871 additions & 26 deletions

File tree

Lines changed: 136 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,136 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<!-- $Revision$ -->
3+
<!-- EN-Revision: 285e7e31e523ac35abc12bb1d7d60c8a6e42c4c6 Maintainer: samesch Status: ready -->
4+
5+
<sect2 xml:id="migration70.incompatible.foreach">
6+
<title>Änderungen bei &foreach;</title>
7+
8+
<para>
9+
Am Verhalten der Kontrollstruktur &foreach; wurden kleinere Änderungen
10+
vorgenommen, die sich vor allem auf die Handhabung des internen
11+
Array-Zeigers und auf die Änderung des Arrays, über das iteriert wird,
12+
beziehen.
13+
</para>
14+
15+
<sect3 xml:id="migration70.incompatible.foreach.array-pointer">
16+
<title>&foreach; ändert den internen Array-Zeiger nicht mehr</title>
17+
18+
<para>
19+
Vor PHP 7 wurde der interne Array-Zeiger verändert, während mit &foreach;
20+
über ein Array iteriert wurde. Dies ist nun, wie im folgenden Beispiel
21+
gezeigt wird, nicht mehr der Fall:
22+
</para>
23+
24+
<informalexample>
25+
<programlisting role="php">
26+
<![CDATA[
27+
<?php
28+
$array = [0, 1, 2];
29+
foreach ($array as &$val) {
30+
var_dump(current($array));
31+
}
32+
?>
33+
]]>
34+
</programlisting>
35+
&example.outputs.5;
36+
<screen>
37+
<![CDATA[
38+
int(1)
39+
int(2)
40+
bool(false)
41+
]]>
42+
</screen>
43+
&example.outputs.7;
44+
<screen>
45+
<![CDATA[
46+
int(0)
47+
int(0)
48+
int(0)
49+
]]>
50+
</screen>
51+
</informalexample>
52+
</sect3>
53+
54+
<sect3 xml:id="migration70.incompatible.foreach.by-value">
55+
<title>&foreach; iteriert bei Übergabe per Wert über eine Kopie des Arrays</title>
56+
57+
<para>
58+
Wenn &foreach; im Standardmodus Pass-by-Value verwendet wird, arbeitet es
59+
nun mit einer Kopie des Arrays, über das iteriert wird, und nicht mit dem
60+
Array selbst. Das bedeutet, dass Änderungen, die während des Iterierens am
61+
Array vorgenommen werden, keine Auswirkungen auf die iterierten Werte haben.
62+
</para>
63+
</sect3>
64+
65+
<sect3 xml:id="migration70.incompatible.foreach.by-ref">
66+
<title>Verbessertes Iterationsverhalten von &foreach; bei Übergabe per Referenz</title>
67+
68+
<para>
69+
Bei der Iteration per Referenz kann &foreach; Änderungen, die während des
70+
Iterierens am Array vorgenommen werden, nun besser verfolgen. Wenn zum
71+
Beispiel während des Iterierens etwas an das Array angehängt wird, führt
72+
das dazu, dass nun auch über die angehängten Werte iteriert wird:
73+
</para>
74+
75+
<informalexample>
76+
<programlisting role="php">
77+
<![CDATA[
78+
<?php
79+
$array = [0];
80+
foreach ($array as &$val) {
81+
var_dump($val);
82+
$array[1] = 1;
83+
}
84+
?>
85+
]]>
86+
</programlisting>
87+
&example.outputs.5;
88+
<screen>
89+
<![CDATA[
90+
int(0)
91+
]]>
92+
</screen>
93+
&example.outputs.7;
94+
<screen>
95+
<![CDATA[
96+
int(0)
97+
int(1)
98+
]]>
99+
</screen>
100+
</informalexample>
101+
</sect3>
102+
103+
<sect3 xml:id="migration70.incompatible.foreach.object">
104+
<title>Iteration über nicht-<classname>Traversable</classname> Objekte</title>
105+
106+
<para>
107+
Die Iteration über Objekte, die <classname>Traversable</classname> nicht
108+
implementieren, verhält sich nun genauso wie die Iteration über Arrays per
109+
Referenz. Dies führt dazu, dass das
110+
<link linkend="migration70.incompatible.foreach.by-ref">verbesserte Verhalten, wenn sich ein Array während des Iterierens ändert</link>
111+
auch angewendet wird, wenn Eigenschaften zum Objekt hinzugefügt oder daraus
112+
entfernt werden.
113+
</para>
114+
</sect3>
115+
</sect2>
116+
117+
<!-- Keep this comment at the end of the file
118+
Local variables:
119+
mode: sgml
120+
sgml-omittag:t
121+
sgml-shorttag:t
122+
sgml-minimize-attributes:nil
123+
sgml-always-quote-attributes:t
124+
sgml-indent-step:1
125+
sgml-indent-data:t
126+
indent-tabs-mode:nil
127+
sgml-parent-document:nil
128+
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
129+
sgml-exposed-tags:nil
130+
sgml-local-catalogs:nil
131+
sgml-local-ecat-files:nil
132+
End:
133+
vim600: syn=xml fen fdm=syntax fdl=2 si
134+
vim: et tw=78 syn=sgml
135+
vi: ts=1 sw=1
136+
-->
Lines changed: 132 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,132 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<!-- $Revision$ -->
3+
<!-- EN-Revision: 86e6094e86b84a51d00ab217ac50ce8dde33d82a Maintainer: samesch Status: ready -->
4+
5+
<sect2 xml:id="migration70.incompatible.integers">
6+
<title>Änderungen im Umgang mit dem Typ <type>int</type></title>
7+
8+
<sect3 xml:id="migration70.incompatible.integers.invalid-octals">
9+
<title>Ungültige oktale Literale</title>
10+
11+
<para>
12+
Bisher wurden oktale Literale, die ungültige Zahlen enthielten,
13+
stillschweigend abgeschnitten (<literal>0128</literal> wurde als
14+
<literal>012</literal> interpretiert). Nun verursacht ein ungültiges
15+
Oktal-Literal einen Parser-Fehler.
16+
</para>
17+
</sect3>
18+
19+
<sect3 xml:id="migration70.incompatible.integers.negative-bitshift">
20+
<title>Negative Bitverschiebungen</title>
21+
22+
<para>
23+
Bitweises Verschieben um negative Zahlen führt nun zu einem
24+
<classname>ArithmeticError</classname>:
25+
</para>
26+
<informalexample>
27+
<programlisting role="php">
28+
<![CDATA[
29+
<?php
30+
var_dump(1 >> -1);
31+
?>
32+
]]>
33+
</programlisting>
34+
&example.outputs.5;
35+
<screen>
36+
<![CDATA[
37+
int(0)
38+
]]>
39+
</screen>
40+
&example.outputs.7;
41+
<screen>
42+
<![CDATA[
43+
Fatal error: Uncaught ArithmeticError: Bit shift by negative number in /tmp/test.php:2
44+
Stack trace:
45+
#0 {main}
46+
thrown in /tmp/test.php on line 2
47+
]]>
48+
</screen>
49+
</informalexample>
50+
</sect3>
51+
52+
<sect3 xml:id="migration70.incompatible.integers.out-of-range">
53+
<title>Bitverschiebungen außerhalb des zulässigen Bereichs</title>
54+
55+
<para>
56+
Bitweise Verschiebungen (in beide Richtungen) über die Bitbreite eines
57+
<type>int</type> ergeben immer 0. Bisher war das Verhalten solcher
58+
Verschiebungen von der Architektur abhängig.
59+
</para>
60+
</sect3>
61+
62+
<sect3 xml:id="migration70.incompatible.integers.div-by-zero">
63+
<title>Änderungen bei der Division durch Null</title>
64+
65+
<para>
66+
Wenn 0 beim Divisionsoperator (/) oder beim Modulusoperator (%) als Divisor
67+
verwendet wird, wurde bisher einen Fehler der Stufe E_WARNING ausgegeben
68+
und <constant>false</constant> zurückgegeben. Nun gibt der
69+
Divisionsoperator, wie in IEEE 754 festgelegt, eine Gleitkommazahl entweder
70+
als +INF, -INF oder NAN zurück. Der Modulusoperator gibt nun kein E_WARNING
71+
mehr aus, sondern löst stattdessen eine
72+
<classname>DivisionByZeroError</classname>-Exception aus.
73+
</para>
74+
<informalexample>
75+
<programlisting role="php">
76+
<![CDATA[
77+
<?php
78+
var_dump(3/0);
79+
var_dump(0/0);
80+
var_dump(0%0);
81+
?>
82+
]]>
83+
</programlisting>
84+
&example.outputs.5;
85+
<screen>
86+
<![CDATA[
87+
Warning: Division by zero in %s on line %d
88+
bool(false)
89+
90+
Warning: Division by zero in %s on line %d
91+
bool(false)
92+
93+
Warning: Division by zero in %s on line %d
94+
bool(false)
95+
]]>
96+
</screen>
97+
&example.outputs.7;
98+
<screen>
99+
<![CDATA[
100+
Warning: Division by zero in %s on line %d
101+
float(INF)
102+
103+
Warning: Division by zero in %s on line %d
104+
float(NAN)
105+
106+
PHP Fatal error: Uncaught DivisionByZeroError: Modulo by zero in %s line %d
107+
]]>
108+
</screen>
109+
</informalexample>
110+
</sect3>
111+
</sect2>
112+
113+
<!-- Keep this comment at the end of the file
114+
Local variables:
115+
mode: sgml
116+
sgml-omittag:t
117+
sgml-shorttag:t
118+
sgml-minimize-attributes:nil
119+
sgml-always-quote-attributes:t
120+
sgml-indent-step:1
121+
sgml-indent-data:t
122+
indent-tabs-mode:nil
123+
sgml-parent-document:nil
124+
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
125+
sgml-exposed-tags:nil
126+
sgml-local-catalogs:nil
127+
sgml-local-ecat-files:nil
128+
End:
129+
vim600: syn=xml fen fdm=syntax fdl=2 si
130+
vim: et tw=78 syn=sgml
131+
vi: ts=1 sw=1
132+
-->

0 commit comments

Comments
 (0)