Skip to content

Commit

Permalink
Sync with EN
Browse files Browse the repository at this point in the history
  • Loading branch information
msamesch committed Nov 23, 2024
1 parent bbde33f commit 313f50c
Show file tree
Hide file tree
Showing 10 changed files with 601 additions and 301 deletions.
4 changes: 2 additions & 2 deletions appendices/migration80/incompatible.xml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 61374bbe228e8e9c55a24aba59a1e2bb2a871148 Maintainer: samesch Status: ready -->
<!-- EN-Revision: b94d63fc0884d83ba43433ab33cc4810d955bf6d Maintainer: samesch Status: ready -->
<sect1 xml:id="migration80.incompatible" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>Nicht abwärtskompatible Änderungen</title>

Expand Down Expand Up @@ -1860,7 +1860,7 @@ echo file_get_contents('http://example.org', false, $ctx);

<para>
<methodname>XMLReader::open</methodname> und
<methodname>XMLReader::xml</methodname> sind nun statische Methoden. Sie
<methodname>XMLReader::XML</methodname> sind nun statische Methoden. Sie
können immer noch als Instanzmethoden aufgerufen werden, aber erbende
Klassen müssen diese Methoden als statisch deklarieren, wenn sie sie
überschreiben.
Expand Down
8 changes: 5 additions & 3 deletions appendices/reserved.constants.core.xml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1cd6b918cff0e3703b02d206add32be075cc682f Maintainer: reinders Status: ready -->
<!-- EN-Revision: b2fa00ca2e052f87785a7f8b296466edc4e55767 Maintainer: reinders Status: ready -->
<!-- Credits: hholzgra -->
<sect2 xml:id="reserved.constants.core" xmlns="http://docbook.org/ns/docbook">
<title>Vordefinierte Core-Konstanten</title>
Expand Down Expand Up @@ -107,7 +107,8 @@
<varlistentry xml:id="constant.php-zts">
<term>
<constant>PHP_ZTS</constant>
(<type>int</type>)
(<type>bool</type>)
&Alias; <constant>ZEND_THREAD_SAFE</constant>
</term>
<listitem>
<simpara>
Expand All @@ -118,7 +119,8 @@
<varlistentry xml:id="constant.php-debug">
<term>
<constant>PHP_DEBUG</constant>
(<type>int</type>)
(<type>bool</type>)
&Alias; <constant>ZEND_DEBUG_BUILD</constant>
</term>
<listitem>
<simpara>
Expand Down
18 changes: 13 additions & 5 deletions language/constants.xml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 5a945dfef09a9595c83855cdb858ffa4a96af305 Maintainer: sammywg Status: ready -->
<!-- EN-Revision: f9dabdea3f92ea77cf5077020a3e945951fdc9db Maintainer: sammywg Status: ready -->
<!-- Reviewed: yes -->
<!-- Rev-Revision: 5a945dfef09a9595c83855cdb858ffa4a96af305 Reviewer: samesch -->
<chapter xml:id="language.constants" xmlns="http://docbook.org/ns/docbook">
Expand Down Expand Up @@ -128,7 +128,7 @@ define("__FOO__", "irgendwas");
<simpara>
Falls eine undefinierte Konstante verwendet wird, wird ein
<classname>Error</classname> ausgelöst. Vor PHP 8.0.0 wurden undefinierte
Konstanten als einfaches <type>&string;</type>-Wort (d. h. CONSTANT vs
Konstanten als einfaches <type>&string;</type>-Wort (&dh; CONSTANT vs
"CONSTANT") interpretiert. Dieses Rückfallverhalten ist von PHP 7.2.0 an
missbilligt, und ein Fehler der Stufe <constant>E_WARNING</constant> wird
ausgelöst, wenn es dazu kommt. Vor PHP 7.2.0 wurde stattdessen ein Fehler
Expand Down Expand Up @@ -257,7 +257,7 @@ echo ANIMALS[1]; // gibt "Katze" aus
<link linkend="reserved.constants">vordefinierten Konstanten</link> zur
Verfügung. Viele dieser Konstanten werden jedoch von verschiedenen
Erweiterungen definiert, die nur zur Verfügung stehen, wenn diese
Erweiterungen selbst zur Verfügung stehen, d. h. entweder über dynamisches
Erweiterungen selbst zur Verfügung stehen, &dh; entweder über dynamisches
Laden zur Laufzeit oder Einkompilieren.
</simpara>
</sect1>
Expand Down Expand Up @@ -321,7 +321,7 @@ echo ANIMALS[1]; // gibt "Katze" aus
<entry><constant>__CLASS__</constant></entry>
<entry>
Der Name einer Klasse. Der Klassenname enthält den Namen des
Namensraums, in dem sie deklariert wurde (z. B.
Namensraums, in dem sie deklariert wurde (&zb;
<literal>Foo\Bar</literal>). Bei Verwendung in einer Trait-Methode,
ist __CLASS__ der Name der Klasse, in der der Trait verwendet wird.
</entry>
Expand All @@ -330,7 +330,7 @@ echo ANIMALS[1]; // gibt "Katze" aus
<entry><constant>__TRAIT__</constant></entry>
<entry>
Der Name eines Traits. Dieser enthält auch den Namensraum, in welchem
der Trait definiert wurde (z. B. <literal>Foo\Bar</literal>).
der Trait definiert wurde (&zb; <literal>Foo\Bar</literal>).
</entry>
</row>
<row xml:id="constant.method">
Expand All @@ -339,6 +339,14 @@ echo ANIMALS[1]; // gibt "Katze" aus
Der Name der Klassenmethode.
</entry>
</row>
<row xml:id="constant.property">
<entry><constant>__PROPERTY__</constant></entry>
<entry>
Nur gültig innerhalb eines
<link linkend="language.oop5.property-hooks">Eigenschafts-Hooks</link>;
entspricht dem Namen der Eigenschaft.
</entry>
</row>
<row xml:id="constant.namespace">
<entry><constant>__NAMESPACE__</constant></entry>
<entry>
Expand Down
3 changes: 2 additions & 1 deletion language/oop5.xml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: c0fa5077c8862405942d8aac7360c5169558b59b Maintainer: simp Status: ready -->
<!-- EN-Revision: f9dabdea3f92ea77cf5077020a3e945951fdc9db Maintainer: simp Status: ready -->
<!-- Credits: sammywg -->
<chapter xml:id="language.oop5" xmlns="http://docbook.org/ns/docbook">
<title>Klassen und Objekte</title>
Expand Down Expand Up @@ -30,6 +30,7 @@

&language.oop5.basic;
&language.oop5.properties;
&language.oop5.property-hooks;
&language.oop5.constants;
&language.oop5.autoload;
&language.oop5.decon;
Expand Down
142 changes: 113 additions & 29 deletions language/oop5/abstract.xml
Original file line number Diff line number Diff line change
@@ -1,29 +1,47 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 9ee9eccf455188ab6eb352194eb6f9eb99e15606 Maintainer: simp Status: ready -->
<!-- EN-Revision: 2e7c00fd314a708ecbd495ef7cc9ae8c8462c33c Maintainer: simp Status: ready -->
<!-- Credits: wiesemann -->
<sect1 xml:id="language.oop5.abstract" xmlns="http://docbook.org/ns/docbook">
<title>Klassenabstraktion</title>

<para>
PHP unterstützt abstrakte Klassen und Methoden. Abstrakt definierte
Klassen können nicht instantiiert werden. Jede Klasse,
die wenigstens eine abstrakte Methode enthält, muss ebenso abstrakt sein.
Abstrakt definierte Methoden deklarieren nur die Signatur der Methode -
sie können nicht die Implementierung definieren.
PHP unterstützt abstrakte Klassen und Methoden. Abstrakt definierte Klassen
können nicht instantiiert werden. Jede Klasse, die wenigstens eine abstrakte
Methode oder Eigenschaft enthält, muss ebenso abstrakt sein. Als abstrakt
definierte Methoden deklarieren nur die Signatur der Methode und ob sie
öffenlich oder geschützt ist - sie können nicht die Implementierung
definieren. Als abstrakt definierte Eigenschaften können eine Anforderung
für das Verhalten von <literal>get</literal> oder <literal>set</literal>
deklarieren und eine Implementierung für eine, aber nicht für beide
Operationen bereitstellen.
</para>

<para>
Wenn von einer abstrakten Klasse abgeleitet wird, müssen alle in der Deklaration
der Elternklasse als abstrakt bezeichneten Methoden durch das Kind definiert
der Elternklasse als abstrakt bezeichneten Methoden durch das Kind definiert
werden und den üblichen Regeln zur
<link linkend="language.oop5.inheritance">Vererbung</link> und
<link linkend="language.oop.lsp">Signatur-Kompatibilität</link> folgen.
</para>

<simpara>
Seit PHP 8.4 kann eine abstrakte Klasse eine abstrakte Eigenschaft
deklarieren, die entweder öffenlich oder geschützt ist.
Eine abstrakte Eigenschaft, die geschützt ist, kann durch eine Eigenschaft
erfüllt werden, die entweder vom geschützten oder vom öffenlichen
Geltungsbereich aus lesbar/schreibbar ist
</simpara>
<simpara>
Eine abstrakte Eigenschaft kann entweder durch eine Standardeigenschaft oder
durch eine Eigenschaft mit definierten
<link linkend="language.oop5.property-hooks">Hooks</link> erfüllt werden,
die der erforderlichen Operation entspricht.
</simpara>

<example>
<title>Beispiel für abstrakte Klasse</title>
<programlisting role="php">
<title>Beispiel für eine abstrakte Methode</title>
<programlisting role="php">
<![CDATA[
<?php
abstract class AbstractClass
Expand Down Expand Up @@ -80,9 +98,9 @@ FOO_ConcreteClass2
]]>
</screen>
</example>

<example>
<title>Beispiel für abstrakte Klasse</title>
<title>Beispiel für eine abstrakte Methode</title>
<programlisting role="php">
<![CDATA[
<?php
Expand All @@ -95,36 +113,102 @@ abstract class AbstractClass
class ConcreteClass extends AbstractClass
{
// Unsere Kindklasse kann optionale Parameter definieren, die sich nicht in der
// Signatur der Elternklasse wiederfinden
public function prefixName($name, $separator = ".") {
if ($name == "Pacman") {
$prefix = "Mr";
} elseif ($name == "Pacwoman") {
$prefix = "Mrs";
} else {
$prefix = "";
}
return "{$prefix}{$separator} {$name}";
}
// Unsere Kindklasse kann optionale Parameter definieren, die sich nicht in der
// Signatur der Elternklasse wiederfinden
public function prefixName($name, $separator = ".") {
if ($name == "Pacman") {
$prefix = "Mr";
} elseif ($name == "Pacwoman") {
$prefix = "Mrs";
} else {
$prefix = "";
}
return "{$prefix}{$separator} {$name}";
}
}
$class = new ConcreteClass;
echo $class->prefixName("Pacman"), "\n";
echo $class->prefixName("Pacwoman"), "\n";
?>
]]>
</programlisting>
&example.outputs;
<screen>
</programlisting>
&example.outputs;
<screen>
<![CDATA[
Mr. Pacman
Mrs. Pacwoman
]]>
</screen>
</example>
</sect1>
</screen>
</example>
<example>
<title>Beispiel für eine abstrakte Eigenschaft</title>
<programlisting role="php">
<![CDATA[
<?php
abstract class A
{
// Erweiternde Klassen müssen eine öffentlich lesbare Eigenschaft haben.
abstract public string $readable { get; }
// Erweiternde Klassen müssen eine geschützt oder öffentlich schreibbare
// Eigenschaft haben.
abstract protected string $writeable { set; }
// Erweiternde Klassen müssen eine geschützte oder öffentliche symmetrische
// Eigenschaft haben.
abstract protected string $both { get; set; }
}
class C extends A
{
// Dies erfüllt die Anforderung und macht sie außerdem einstellbar, was
// gültig ist.
public string $readable;
// Dies würde die Anforderung NICHT erfüllen, da sie nicht öffentlich
// lesbar ist.
protected string $readable;
// Dies erfüllt die Anforderung genau, ist also ausreichend.
// Es darf nur geschrieben werden, und zwar nur aus dem geschützten Bereich.
protected string $writeable {
set => $value;
}
// Dies erweitert die Sichtbarkeit von geschützt auf öffentlich, was in
// Ordnung ist.
public string $both;
}
?>
]]>
</programlisting>
</example>
<simpara>
Eine abstrakte Eigenschaft einer abstrakten Klasse kann Implementierungen
für jeden Hook bereitstellen, muss aber entweder <literal>get</literal> oder
<literal>set</literal> deklariert, aber nicht definiert haben (wie im obigen
Beispiel).
</simpara>
<example>
<title>Beispiel für eine abstrakte Eigenschaft</title>
<programlisting role="php">
<![CDATA[
<?php
abstract class A
{
// Dies bietet eine vorgegebene (aber überschreibbare) set-Implementierung
// und erfordert, dass Kindklassen eine get-Implementierung bereitstellen.
abstract public string $foo {
get;
set { $this->foo = $value };
}
}
?>
]]>
</programlisting>
</example>
</sect1>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
Expand Down
12 changes: 7 additions & 5 deletions language/oop5/basic.xml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1d92bcca7524c50fc41056ea4c04e1032eb9e055 Maintainer: wiesemann Status: ready -->
<!-- EN-Revision: 2f85d57a0b5a01b875cbca2b291f04389cf61ac2 Maintainer: wiesemann Status: ready -->
<!-- Reviewed: yes -->
<!-- Rev-Revision: 5d1673b7a0e1a941111595d25cda663d8667a015 Reviewer: samesch -->

Expand All @@ -18,10 +18,12 @@
<para>
Der Klassenname kann ein beliebiger gültiger Bezeichner sein,
vorausgesetzt es ist kein von PHP
<link linkend="reserved">reserviertes Wort</link>. Ein gültiger
Klassenname beginnt mit einem Buchstaben oder einem Unterstrich, gefolgt
von einer beliebigen Anzahl von Buchstaben, Ziffern oder Unterstrichen;
als regulärer Ausdruck formuliert:
<link linkend="reserved">reserviertes Wort</link>.
Seit PHP 8.4.0 ist die Verwendung eines einzelnen Unterstrichs
<literal>_</literal> als Klassenname veraltet.
Ein gültiger Klassenname beginnt mit einem Buchstaben oder einem
Unterstrich, gefolgt von einer beliebigen Anzahl von Buchstaben, Ziffern
oder Unterstrichen; als regulärer Ausdruck formuliert:
<code>^[a-zA-Z_\x80-\xff][a-zA-Z0-9_\x80-\xff]*$</code>.
</para>
<para>
Expand Down
Loading

0 comments on commit 313f50c

Please sign in to comment.