Skip to content

Commit

Permalink
Start translating language/oop5/
Browse files Browse the repository at this point in the history
I was hoping that I can finish the entire chapter in one go, but I
already have that in my work-tree for too long. Well, at least it's
a start.
  • Loading branch information
Sobak committed Nov 21, 2024
1 parent 55a4e99 commit 2f4acc0
Show file tree
Hide file tree
Showing 9 changed files with 2,123 additions and 0 deletions.
72 changes: 72 additions & 0 deletions language/oop5.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: a9a6224ca97531df0a4e4b9b16b59c3f2baf1b09 Maintainer: sobak Status: ready -->
<chapter xml:id="language.oop5" xmlns="http://docbook.org/ns/docbook">
<title>Klasy i obiekty</title>

<sect1 xml:id="oop5.intro">
<title>Wprowadzenie</title>
<para>
PHP zawiera kompletny model obiektowy.
Niektóre z jego funkcjonalności to:
<link linkend="language.oop5.visibility">widoczność</link>,
klasy i metody <link linkend="language.oop5.abstract">abstrakcyjne</link> i
<link linkend="language.oop5.final">finalne</link>,
additional <link linkend="language.oop5.magic">metody magiczne</link>,
<link linkend="language.oop5.interfaces">interfejsy</link> oraz
<link linkend="language.oop5.cloning">klonowanie</link>.
</para>
<para>
PHP traktuje obiekty w taki sam sposób jak referencje lub uchwyty, to znaczy
każda zmienna zawiera referencję do obiektu, a nie kopię całego
obiektu. Patrz też
<link linkend="language.oop5.references">Obiekty i referencje</link>
</para>
&tip.userlandnaming;
</sect1>

&language.oop5.basic;
&language.oop5.properties;
&language.oop5.constants;
&language.oop5.autoload;
&language.oop5.decon;
&language.oop5.visibility;
&language.oop5.inheritance;
&language.oop5.paamayim-nekudotayim;
&language.oop5.static;
&language.oop5.abstract;
&language.oop5.interfaces;
&language.oop5.traits;
&language.oop5.anonymous;
&language.oop5.overloading;
&language.oop5.iterations;
&language.oop5.magic;
&language.oop5.final;
&language.oop5.cloning;
&language.oop5.object-comparison;
&language.oop5.late-static-bindings;
&language.oop5.references;
&language.oop5.serialization;
&language.oop5.variance;
&language.oop5.changelog;
</chapter>

<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->
144 changes: 144 additions & 0 deletions language/oop5/abstract.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,144 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: 9ee9eccf455188ab6eb352194eb6f9eb99e15606 Maintainer: sobak Status: ready -->
<sect1 xml:id="language.oop5.abstract" xmlns="http://docbook.org/ns/docbook">
<title>Abstrakcja klas</title>

<para>
PHP oferuje klasy i metody abstrakcyjne.
Klasy zdefiniowane jako abstrakcyjne nie mogą być instancjonowane, a każda klasa która
zawiera przynajmniej jedną metodę abstrakcyjną też musi być abstrakcyjna.
Metody określone jako abstrakcyjne określają tylko sygnaturę metody,
nie mogą określać implementacji.
</para>

<para>
Podczas dziedziczenia z klasy abstrakcyjnej wszystkie metody oznaczone jako abstrakcyjne w
deklaracji klasy rodzica muszą być zdefiniowane przez klasę potomną
i przestrzegać standardowych reguł
<link linkend="language.oop5.inheritance">dziedziczenia</link> and
<link linkend="language.oop.lsp">kompatybilności sygnatur</link>.
</para>

<example>
<title>Przykład klasy abstrakcyjnej</title>
<programlisting role="php">
<![CDATA[
<?php
abstract class AbstractClass
{
// Wymuś aby rozszerzająca klasa zaimplementowała te metody
abstract protected function getValue();
abstract protected function prefixValue($prefix);
// Wspólna metoda
public function printOut() {
print $this->getValue() . "\n";
}
}
class KonkretnaKlasa1 extends AbstractClass
{
protected function getValue() {
return "KonkretnaKlasa1";
}
public function prefixValue($prefix) {
return "{$prefix}KonkretnaKlasa1";
}
}
class KonkretnaKlasa2 extends AbstractClass
{
public function getValue() {
return "KonkretnaKlasa2";
}
public function prefixValue($prefix) {
return "{$prefix}KonkretnaKlasa2";
}
}
$class1 = new KonkretnaKlasa1;
$class1->printOut();
echo $class1->prefixValue('FOO_') ."\n";
$class2 = new KonkretnaKlasa2;
$class2->printOut();
echo $class2->prefixValue('FOO_') ."\n";
?>
]]>
</programlisting>
&example.outputs;
<screen>
<![CDATA[
KonkretnaKlasa1
FOO_KonkretnaKlasa1
KonkretnaKlasa2
FOO_KonkretnaKlasa2
]]>
</screen>
</example>

<example>
<title>Przykład klasy abstrakcyjnej</title>
<programlisting role="php">
<![CDATA[
<?php
abstract class AbstractClass
{
// Nasza abstrakcyjna metoda musi zdefiniować tylko wymagane argumenty
abstract protected function prefixName($name);
}
class KonkretnaKlasa extends AbstractClass
{
// Nasza klasa dziedzcząca może zdefiniować dodatkowe argumenty nieobecne w sygnaturze rodzica
public function prefixName($name, $separator = ".") {
if ($name == "Pacman") {
$prefix = "Mr";
} elseif ($name == "Pacwoman") {
$prefix = "Mrs";
} else {
$prefix = "";
}
return "{$prefix}{$separator} {$name}";
}
}
$class = new KonkretnaKlasa;
echo $class->prefixName("Pacman"), "\n";
echo $class->prefixName("Pacwoman"), "\n";
?>
]]>
</programlisting>
&example.outputs;
<screen>
<![CDATA[
Mr. Pacman
Mrs. Pacwoman
]]>
</screen>
</example>
</sect1>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->
Loading

0 comments on commit 2f4acc0

Please sign in to comment.