cvs: phpdoc-ro /language/oop5 autoload.xml decon.xml visibility.xml

From: Date: Sat, 29 Mar 2008 14:18:49 +0000
Subject: cvs: phpdoc-ro /language/oop5 autoload.xml decon.xml visibility.xml
Groups: php.doc.ro 
Request: Send a blank email to doc-ro+get-384@lists.php.net to get a copy of this message
simionea Sat Mar 29 14:18:49 2008 UTC Modified files: /phpdoc-ro/language/oop5 autoload.xml decon.xml visibility.xml Log: Updated the file.

http://cvs.php.net/viewvc.cgi/phpdoc-ro/language/oop5/autoload.xml?r1=1.2&r2=1.3&diff_format=u Index: phpdoc-ro/language/oop5/autoload.xml diff -u phpdoc-ro/language/oop5/autoload.xml:1.2 phpdoc-ro/language/oop5/autoload.xml:1.3 --- phpdoc-ro/language/oop5/autoload.xml:1.2 Tue Sep 18 11:47:16 2007 +++ phpdoc-ro/language/oop5/autoload.xml Sat Mar 29 14:18:49 2008 @@ -1,37 +1,48 @@ <?xml version="1.0" encoding="utf-8"?> -<!-- $Revision: 1.2 $ --> -<!-- EN-Revision: 1.1 Maintainer: radical Status: translated --> +<!-- $Revision: 1.3 $ --> +<!-- EN-Revision: 1.10 Maintainer: radical Status: translated --> +<!-- CREDITS: simionea --> <sect1 xml:id="language.oop5.autoload" xmlns="http://docbook.org/ns/docbook"> <title>Autoîncărcarea claselor</title> <para> - Mulţi dezvoltatori care scriu aplicaţii orientate pe obiecte - crează un fişier PHP pentru fiecare clasă pe care o definesc. - O problema delicată era lista mare de fişiere ce trebuiau - incluse la inceputul fiecărui script. + Mulţi programatori care scriu aplicaţii orientate pe obiecte + crează câte un fişier PHP pentru fiecare clasă pe care o definesc. + O problemă delicată era lista mare de fişiere ce trebuiau + incluse la începutul fiecărui script. </para> <para> În PHP 5, acest lucru nu mai este necasar. Se poate defini funcţia __autoload care este apelată automat în cazul în care doriţi să folosiţi - o clasă care nu a fost încă definită. Apelelul la aceasta funcţie - oferă scriptuui o ultimă şansă de a defini clasa pentur a nu + o clasă care nu a fost încă definită. Apelul la această funcţie + oferă script-ului o ultimă şansă de a defini clasa pentru a nu termina cu eroare. </para> <note> <para> Excepţiile aruncate în __autoload nu pot fi captate într-un bloc <link linkend="language.exceptions">catch</link> şi rezultând - astfel eroare fatală. + astfel eroare fatală. </para> </note> <note> <para> - Această funcţie speciala nu este disponibila daca folosiţi PHP in mod CLI - <link linkend="features.commandline">mod interactiv</link>. + Această funcţie specială nu este disponibilă dacă folosiţi PHP în + <link linkend="features.commandline">mod CLI interactiv</link>. + </para> + </note> + <note> + <para> + Dacă denumirea clasei este utilizată de ex. în + <function>call_user_func</function>, atunci ea poate conţine caractere + periculoase, cum ar fi <literal>../</literal>. + Nu este recomandabil să utilizaţi datele introduse de utilizator în + asemenea funcţii, sau, cel puţin, să verificaţi ce s-a introdus în + <function>__autoload</function>. </para> </note> <para> <example> - <title>Exemplu autoîncărcarea</title> + <title>Exemplu cu autoîncărcare</title> <para> Acest exemplu încearcă să încarce clasele <literal>MyClass1</literal> şi <literal>MyClass2</literal> din fişierele <filename>MyClass1.php</filename> @@ -50,6 +61,30 @@ ]]> </programlisting> </example> + <example> + <para> + Acest exemplu încearcă să încarce interfaţa <literal>ITest</literal>. + </para> + <programlisting role="php"> +<![CDATA[ +<?php + +function __autoload($name) { + var_dump($name); +} + +class Foo implements ITest { +} + +/* +string(5) "ITest" + +Fatal error: Interface 'ITest' not found in ... +*/ +?> +]]> + </programlisting> + </example> </para> </sect1> http://cvs.php.net/viewvc.cgi/phpdoc-ro/language/oop5/decon.xml?r1=1.4&r2=1.5&diff_format=u Index: phpdoc-ro/language/oop5/decon.xml diff -u phpdoc-ro/language/oop5/decon.xml:1.4 phpdoc-ro/language/oop5/decon.xml:1.5 --- phpdoc-ro/language/oop5/decon.xml:1.4 Tue Sep 18 11:47:16 2007 +++ phpdoc-ro/language/oop5/decon.xml Sat Mar 29 14:18:49 2008 @@ -1,6 +1,7 @@ <?xml version="1.0" encoding="utf-8"?> -<!-- $Revision: 1.4 $ --> -<!-- EN-Revision: 1.1 Maintainer: radical Status: translated --> +<!-- $Revision: 1.5 $ --> +<!-- EN-Revision: 1.4 Maintainer: radical Status: translated --> +<!-- CREDITS: simionea --> <sect1 xml:id="language.oop5.decon" xmlns="http://docbook.org/ns/docbook"> <title>Constructori şi Destructori</title> @@ -12,20 +13,21 @@ <methodparam choice="opt"><parameter>...</parameter></methodparam> </methodsynopsis> <para> - PHP 5 permite dezvoltatorilor să definească constructori pentru clase. + PHP 5 permite programatorilor să definească constructori pentru clase. Clasele care au definit un constructor vor apela această metodă la fiecare - obiect nou creat, pentru ca acesta (obiectul) să fie utilizabil pentru - iniţializare înante de a fi folosit. + obiect nou creat, pentru ca acesta (obiectul) să fie utilizabil pentru + iniţializare înante de a fi folosit. </para> <note> <simpara> - Constructorul părinte nu este apelat implicit. Pentru a apela un - constructor părinte, trebuie să apelaţi - <function>parent::__construct</function> în clasa descendentă. + Constructorul-părinte nu este apelat implicit dacă clasa-fiică defineşte + un constructor. Pentru a apela un constructor-părinte, este necesar de a + apela <function>parent::__construct</function> din cadrul + constructorului-fiu. </simpara> </note> <example> - <title>folosirea metodei de definire a constructorilor</title> + <title>utilizarea noilor constructori unificaţi</title> <programlisting role="php"> <![CDATA[ <?php @@ -50,11 +52,11 @@ </example> <para> Pentru compatibilitate cu versiunile mai vechi, dacă PHP 5 nu găseşte - funcţia <function>__construct</function> pentru o clasă, va căuta - în formatul vechi o funcţie care are chiar numele clasei. + funcţia <function>__construct</function> pentru o clasă, va căuta + în formatul vechi o funcţie care are chiar numele clasei. Drept urmare, singura neconcordanţă în compatibilitate va fi atunci când - aţi folosit în clase funcţia <function>__construct</function> pentru - alte scopuri decât iniţializarea obiectului. + aţi folosit în clase funcţia <function>__construct</function> pentru + alte scopuri decât iniţializarea obiectului. </para> </sect2> @@ -65,10 +67,10 @@ <void /> </methodsynopsis> <para> - PHP 5 introduce un conceptul de distrugere a unui obiect similar cu cel - regăsit în alte limbaje de programare orientate pe obiecte (C++). - Metoda de distrugere va fi apelată imediat ce toate referinţele către - un anumit obiect dispar sau atunci când obiectul este distrus explicit. + PHP 5 introduce un concept de distrugere a unui obiect similar cu cel + regăsit în alte limbaje de programare orientate pe obiecte (C++). + Metoda de distrugere va fi apelată imediat ce toate referinţele către + un anumit obiect dispar sau atunci când obiectul este distrus explicit. </para> <example> <title>Exemplu destructor</title> @@ -92,10 +94,24 @@ </programlisting> </example> <para> - La fel ca la constructori, destructorii părinti nu vor fi apelaţi implicit. - Pentru a apela destructorul părinte trebuie să apelaţi explicit - <function>parent::__destruct</function> în destructorul descendent. + La fel ca la constructori, destructorii-părinti nu vor fi apelaţi implicit. + Pentru a apela destructorul-părinte trebuie să apelaţi explicit + <function>parent::__destruct</function> în destructorul descendent. </para> + <note> + <para> + Destructorii apelaţi la momentul terminării execuţiei scriptului au + antetele HTTP trimise deja. Directorul de lucru în timpul fazei de + deconectare a scriptului poate să difere în cazul anumitor SAPI-uri + (de ex. Apache). + </para> + </note> + <note> + <para> + Încercarea de a arunca o excepţie dintr-un destructor (apelat la momentul + terminării execuţiei scriptului) va cauza o eroare fatală. + </para> + </note> </sect2> </sect1> http://cvs.php.net/viewvc.cgi/phpdoc-ro/language/oop5/visibility.xml?r1=1.4&r2=1.5&diff_format=u Index: phpdoc-ro/language/oop5/visibility.xml diff -u phpdoc-ro/language/oop5/visibility.xml:1.4 phpdoc-ro/language/oop5/visibility.xml:1.5 --- phpdoc-ro/language/oop5/visibility.xml:1.4 Tue Sep 18 11:47:16 2007 +++ phpdoc-ro/language/oop5/visibility.xml Sat Mar 29 14:18:49 2008 @@ -1,15 +1,16 @@ <?xml version="1.0" encoding="utf-8"?> -<!-- $Revision: 1.4 $ --> -<!-- EN-Revision: 1.1 Maintainer: radical Status: translated --> +<!-- $Revision: 1.5 $ --> +<!-- EN-Revision: 1.4 Maintainer: radical Status: translated --> +<!-- CREDITS: simionea --> <sect1 xml:id="language.oop5.visibility" xmlns="http://docbook.org/ns/docbook"> <title>Vizibilitatea</title> <para> Vizibilitatea unei propietăţi sau a unei metode - poate fi definită prefixând declaraţia cu una din cuvintele + poate fi definită prefixând declaraţia cu unul din cuvintele cheie: public, protected sau private. Elementele (fie ele propietăţi sau metode) declarate public pot fi accesate oriunde. Elementele declarate protected limitează accesul la clasele - care moştenesc propietăţile sau metodele (precum şi la clasa + care moştenesc proprietăţile sau metodele (precum şi la clasa care le defineşte). În final, cele declarate private limitează vizibilitatea doar la clasa în care sunt definite. </para> @@ -42,7 +43,7 @@ } $obj = new ClassaMea(); -echo $obj->membru_public; // Funcţioneaza +echo $obj->membru_public; // Funcţionează echo $obj->membru_protected; // Eroare fatală echo $obj->membru_private; // Eroare fatală $obj->afiseazaBunaZiua(); // Afişează Eu sunt: Public, Eu sunt: Protected, Eu sunt: Private @@ -77,10 +78,9 @@ <note> <simpara> Metoda PHP 4 de a declara variabile folosind cuvântul cheie - <emphasis>var</emphasis> nu mai este valabilă pentru obiectele - din PHP 5. Pentru compatibilitate variabilele declarate - în PHP 5 cu <emphasis>var</emphasis> vor fi automat înzestrate - cu vizibilitate public, şi se va emite un warning de tip + <emphasis>var</emphasis> este încă susţinută din motive de + compatibilitate (fiind sinonim cuvântului cheie public). + În PHP 5 înainte de 5.1.3, utilizarea sa va emite o avertizare de tip <constant>E_STRICT</constant>. </simpara> </note> @@ -88,8 +88,8 @@ <sect2 xml:id="language.oop5.visiblity-methods"> <title>Vizibilitatea metodelor</title> <para> - Metodele claselor trebuie definite cu public, private, sau protected. Metodele - fără nici o declaraţie sunt implicit considerate public. + Metodele claselor trebuie definite cu public, private, sau protected. + Metodele fără nici o declaraţie sunt implicit considerate public. </para> <para> <example> @@ -98,23 +98,23 @@ <![CDATA[ <?php /** - * Definire ClasaMea + * Defineşte MyClass */ -class ClasaMea +class MyClass { - // Constructorul trebuie să fie public + // Declară un constructor public public function __construct() { } - // Declararea unei metode: public + // Declară o metodă publică public function MyPublic() { } - // Declararea unei metode: protected + // Declară o metodă protected protected function MyProtected() { } - // Declararea unei metode: private + // Declară o metodă private private function MyPrivate() { } - // This is public + // Aceasta este public function Foo() { $this->MyPublic(); @@ -125,28 +125,59 @@ $myclass = new MyClass; $myclass->MyPublic(); // Funcţionează -$myclass->MyProtected(); // Eroare Fatală -$myclass->MyPrivate(); // Eroare Fatală -$myclass->Foo(); // Public, Protected şi Private funcţionează +$myclass->MyProtected(); // Eroare fatală +$myclass->MyPrivate(); // Eroare fatală +$myclass->Foo(); // Cele Public, Protected şi Private funcţionează /** - * Define MyClass2 + * Defineşte MyClass2 */ class MyClass2 extends MyClass { - // This is public + // Aceasta este public function Foo2() { $this->MyPublic(); $this->MyProtected(); - $this->MyPrivate(); // Eroare Fatală + $this->MyPrivate(); // Eroare fatală } } $myclass2 = new MyClass2; $myclass2->MyPublic(); // Funcţionează -$myclass2->Foo2(); // Public şi Protected funcţionează, nu şi Private +$myclass2->Foo2(); // Public şi Protected funcţionează, dar nu şi Private + +class Bar +{ + public function test() { + $this->testPrivate(); + $this->testPublic(); + } + + public function testPublic() { + echo "Bar::testPublic\n"; + } + + private function testPrivate() { + echo "Bar::testPrivate\n"; + } +} + +class Foo extends Bar +{ + public function testPublic() { + echo "Foo::testPublic\n"; + } + + private function testPrivate() { + echo "Foo::testPrivate\n"; + } +} + +$myFoo = new foo(); +$myFoo->test(); // Bar::testPrivate + // Foo::testPublic ?> ]]> </programlisting>
« previous php.doc.ro (#384) next »