-
Notifications
You must be signed in to change notification settings - Fork 8
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
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
Showing
9 changed files
with
2,123 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 | ||
--> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 | ||
--> |
Oops, something went wrong.