Skip to content

Commit

Permalink
Sync with EN
Browse files Browse the repository at this point in the history
  • Loading branch information
Sobak committed Aug 31, 2024
1 parent d11b727 commit f7f2d3f
Show file tree
Hide file tree
Showing 3 changed files with 92 additions and 83 deletions.
27 changes: 15 additions & 12 deletions language/predefined/errorexception.xml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: e6376e04ed2526138e5b71e16168cf6bb269fa8a Maintainer: sobak Status: ready -->
<!-- EN-Revision: ced371fcb7a105f06a6a75672fbcd448271a3e3f Maintainer: sobak Status: ready -->
<!-- $Revision$ -->
<reference xml:id="class.errorexception" role="exception" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xi="http://www.w3.org/2001/XInclude">
<title>ErrorException</title>
Expand Down Expand Up @@ -82,31 +82,34 @@
<programlisting role="php">
<![CDATA[
<?php
function exception_error_handler(int $errno, string $errstr, string $errfile = null, int $errline) {
set_error_handler(function (int $errno, string $errstr, string $errfile, int $errline) {
if (!(error_reporting() & $errno)) {
// Ten kod błędu nie został uwzględniony w error_reporting
return;
}
if ($errno === E_DEPRECATED || $errno === E_USER_DEPRECATED) {
// Nie rzucaj wyjątku dla ostrzeżeń o przestarzałych funkcjonalnościach gdyż nowe lub
// niespodziewane uznanie rzeczy za przestarzałe popsułoby aplikację.
return;
}
throw new \ErrorException($errstr, 0, $errno, $errfile, $errline);
}
set_error_handler(exception_error_handler(...));
// Przed PHP 8.1.0 i wprowadzeniem wbudowanej składni callable, musi zostać użyta następująca składnia
// set_error_handler(__NAMESPACE__ . "\\exception_error_handler");
});
/* Wywołaj błąd */
strpos();
// Próba odserializowania błędnych danych wywołuje ostrzeżenie, które zostanie zamienione
// na wyjątek ErrorException przez funkcję obsługi błędów.
unserialize('popsute dane');
?>
]]>
</programlisting>
&example.outputs.similar;
<screen>
<![CDATA[
Fatal error: Uncaught exception 'ErrorException' with message 'strpos() expects at least 2 parameters, 0 given' in /home/bjori/tmp/ex.php:12
Fatal error: Uncaught ErrorException: unserialize(): Error at offset 0 of 12 bytes in test.php:16
Stack trace:
#0 [internal function]: exception_error_handler(2, 'strpos() expect...', '/home/bjori/php...', 12, Array)
#1 /home/bjori/php/cleandocs/test.php(12): strpos()
#0 [internal function]: {closure}(2, 'unserialize(): ...', 'test.php', 16)
#1 test.php(16): unserialize('popsute dane')
#2 {main}
thrown in /home/bjori/tmp/ex.php on line 12
thrown in test.php on line 16
]]>
</screen>
</example><!-- }}} -->
Expand Down
22 changes: 8 additions & 14 deletions language/predefined/stringable.xml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: 9eb4a46bba05da229be4c8f7a3cb64702e1a2f95 Maintainer: cyb0org Status: ready -->
<!-- EN-Revision: 3e519f4d1cd5dc0af3bf894bb32416f682a507d5 Maintainer: cyb0org Status: ready -->
<!-- $Revision$ -->
<reference xml:id="class.stringable" role="class" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xi="http://www.w3.org/2001/XInclude">

Expand Down Expand Up @@ -53,26 +53,20 @@
<![CDATA[
<?php
class IPv4Address implements Stringable {
private string $oct1;
private string $oct2;
private string $oct3;
private string $oct4;
public function __construct(string $oct1, string $oct2, string $oct3, string $oct4) {
$this->oct1 = $oct1;
$this->oct2 = $oct2;
$this->oct3 = $oct3;
$this->oct4 = $oct4;
}
public function __construct(
private string $oct1,
private string $oct2,
private string $oct3,
private string $oct4,
) {}
public function __toString(): string {
return "$this->oct1.$this->oct2.$this->oct3.$this->oct4";
}
}
function showStuff(string|Stringable $value) {
// Stringable zostanie tutaj skonwertowane do ciągu znaków
// poprzez wywołanie __toString.
// Dla obiektów implementujących Stringable zostaje niejawnie wywołana metoda __toString().
print $value;
}
Expand Down
126 changes: 69 additions & 57 deletions reference/classobj/examples.xml
Original file line number Diff line number Diff line change
@@ -1,70 +1,73 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- EN-Revision: 62d53f70bd8d83c2b5abf2b6d39b53657a2f41ae Maintainer: joeaccord Status: ready -->
<!-- EN-Revision: 6f11457f11d91834e1240c3351d8c4e289371b6d Maintainer: joeaccord Status: ready -->
<!-- $Revision$ -->
<!-- CREDITS: dombal, sobak -->


<appendix xml:id="classobj.examples">
&reftitle.examples;
<para>
W tym przykładzie najpierw zdefiniujemy bazową klasę i jej
rozszerzenie. Klasa bazowa opisuje normalne warzywo, czy jest
jadalne czy nie oraz jego kolor. Podklasa <varname>Szpinak</varname>
rozszerzenie. Klasa bazowa opisuje ogólne warzywo,
czy jest jadalne oraz jego kolor. Podklasa <varname>Szpinak</varname>
dodaje metodę pozwalającą go ugotować, i drugą, która pozwala
dowiedzieć się, czy jest ugotowany.
</para>
<para>
<example>
<title>classes.inc</title>
<title>Definicje klasy</title>
<para><varname>Warzywo</varname></para>
<programlisting role="php">
<![CDATA[
<?php
// klasa bazowa wraz z jej właściwościami i metodami
class Warzywo {
public $jadalne;
var $jadalne;
var $kolor;
public $kolor;
function __construct($jadalne, $kolor="zielony")
{
public function __construct($jadalne, $kolor="zielony")
{
$this->jadalne = $jadalne;
$this->kolor = $kolor;
}
function czy_jadalne()
{
public function czyJadalne()
{
return $this->jadalne;
}
function jaki_kolor()
{
public function pobierzKolor()
{
return $this->kolor;
}
}
} // koniec klasy Warzywo
?>
]]>
</programlisting>
<para><varname>Szpinak</varname></para>
<programlisting role="php">
<![CDATA[
<?php
// rozrzesza klasę bazową
class Szpinak extends Warzywo {
public $ugotowane = false;
var $ugotowane = false;
function __construct()
{
public function __construct()
{
$this->Warzywo(true, "zielone");
}
function ugotuj()
{
public function ugotuj()
{
$this->ugotowane = true;
}
function czy_ugotowane()
{
function czyUgotowane()
{
return $this->ugotowane;
}
} // koniec klasy Szpinak
}
?>
]]>
Expand All @@ -82,79 +85,89 @@ class Szpinak extends Warzywo {
<title>test_script.php</title>
<programlisting role="php">
<![CDATA[
<pre>
<?php
include "classes.inc";
// zarejestruj autoloader aby automatycznie ładować klasy
spl_autoload_register();
// funkcje użytkowe
function drukuj_wlasciwosci($obj)
function drukujWlasciwosci($obj)
{
foreach (get_object_vars($obj) as $wlasc => $wart) {
echo "\t$wlasc = $wart\n";
}
}
function drukuj_metody($obj)
function drukujMetody($obj)
{
$tab = get_class_methods(get_class($obj));
foreach ($tab as $metoda) {
echo "\tfunkcja $metoda()\n";
}
}
function przodkowie_klasy($obj, $klasa)
function przodkowieKlasy($obj, $klasa)
{
global $$obj;
if (is_subclass_of($GLOBALS[$obj], $klasa)) {
echo "Obiekt $obj należy do klasy ".get_class($GLOBALS[$obj]);
echo ", podklasy $klasa\n";
if (is_subclass_of($obj, $klasa)) {
echo "Obiekt należy do klasy " . get_class($obj);
echo ", a subclass of $klasa\n";
} else {
echo "Obiekt $obj nie należy do podklasy $klass\n";
echo "Obiekt nie należy do podklasy $klasa\n";
}
}
// tworzymy 2 egzemplarze obiektów
$warzywko = new Warzywo(true, "niebieski");
$lisciaste = new Szpinak();
// wydrukujemy informację o obiektach
echo "warzywko: KLASA ".get_class($warzywko)."\n";
echo "lisciaste: KLASA ".get_class($lisciaste);
echo ", PRZODEK ".get_parent_class($lisciaste)."\n";
echo "warzywko: KLASA " . get_class($warzywko) . "\n";
echo "lisciaste: KLASA " . get_class($lisciaste);
echo ", PRZODEK " . get_parent_class($lisciaste) . "\n";
// pokażmy właściwości warzywka
echo "\nwarzywko: Właściwości\n";
drukuj_wlasciwosci($warzywko);
drukujWlasciwosci($warzywko);
// i metody liściastego
echo "\nlisciaste: Metody\n";
drukuj_metody($lisciaste);
echo "\nliściaste: Metody\n";
drukujMetody($lisciaste);
echo "\nPrzodkowie:\n";
przodkowie_klasy("lisciaste", "Szpinak");
przodkowie_klasy("lisciaste", "Warzywo");
przodkowieKlasy($lisciaste, Szpinak::class);
przodkowieKlasy($lisciaste, Warzywo::class);
?>
</pre>
]]>
</programlisting>
&examples.outputs;
<screen>
<![CDATA[
warzywko: KLASA Warzywo
liściaste: KLASA Szpinak, PRZODEK Warzywo
warzywko: Właściwości
jadalne = 1
kolor = blue
liściaste: Metody
function __construct()
function ugotuj()
function czyUgotowane()
function czyJadalne()
function pobierzKolor()
Przodkowie:
Obiekt nie należy do podklasy Szpinak
Obiekt należy do klasy Szpinak, podklasy Warzywo
]]>
</screen>
<para>
Wartą odnotowania rzeczą w powyższym przykładzie jest to,
że obiekt <varname>$lisciaste</varname> jest egzemplarzem klasy
<classname>Szpinak</classname> która to jest podklasą klasy
<classname>Warzywo</classname>, i tak ostatnia część powyższego
skryptu pokaże na wyjściu:
</para>
<screen>
<![CDATA[
[...]
Przodkowie:
Obiekt lisciasty nie należy do podklasy Szpinak
Obiekt lisciasty należy do klasy Szpinak, podklasy Warzywo
]]>
</screen>
</example>
</para>
</appendix>
Expand All @@ -179,4 +192,3 @@ vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->

0 comments on commit f7f2d3f

Please sign in to comment.