cvs: phpdoc-ar /language oop.xml
| From: | Hafid Benhadria | Date: | Sat, 29 May 2004 01:02:03 +0000 |
| Subject: | cvs: phpdoc-ar /language oop.xml | ||
| Groups: | php.doc.ar | ||
| Request: | Send a blank email to doc-ar+get-609@lists.php.net to get a copy of this message | ||
hafid Fri May 28 21:02:03 2004 EDT
Modified files:
/phpdoc-ar/language oop.xml
Log:
Final Partial Translation. EN1.52 Compatible. NOW ISO-8859-6.
http://cvs.php.net/diff.php/phpdoc-ar/language/oop.xml?r1=1.2&r2=1.3&ty=u Index: phpdoc-ar/language/oop.xml diff -u phpdoc-ar/language/oop.xml:1.2 phpdoc-ar/language/oop.xml:1.3 --- phpdoc-ar/language/oop.xml:1.2 Wed May 26 19:14:21 2004 +++ phpdoc-ar/language/oop.xml Fri May 28 21:02:03 2004 @@ -1,14 +1,14 @@ -<?xml version="1.0" encoding="WIN-1256"?> -<!-- $Revision: 1.2 $ --> -<!-- EN-Revision: 1.52 Maintainer: hafid Status: working --> +<?xml version="1.0" encoding="ISO-8859-6"?> +<!-- $Revision: 1.3 $ --> +<!-- EN-Revision: 1.52 Maintainer: hafid Status: ready --> <chapter id="language.oop"> - <title>ÇáÃÕäÇÝ "Classes" æÇáßÇÆäÇÊ "Objects"</title> + <title>ÇäÃÕæÇá "Classes" èÇäãÇÆæÇÊ "Objects"</title> <sect1 id="keyword.class"> - <title>ÇáÃÕäÇÝ: <literal>class</literal></title> + <title>ÇäÃÕæÇá: <literal>class</literal></title> <para> - "class" åí ÊÔßíáÉ ãä ÇáãõÊÛíøöÑÇÊ æÇáÏøæÇá ÇáÊøí ÊÚãá ãÚ - åÐå ÇáãõÊÛíøöÑÇÊ. ÊõÚóÑøóÝ "class" ÈÇÓÊÎÏÇã ÇáÕøíÛÉ ÇáÊøÇáíøÉ: + "class" çê ÊÔãêäÉ åæ ÇäåïÊÚêñðÑÇÊ èÇäÏñèÇä ÇäÊñê ÊÙåä åÙ + çÐç ÇäåïÊÚêñðÑÇÊ. ÊïÙîÑñîá "class" ÈÇÓÊÎÏÇå ÇäÕñêÚÉ ÇäÊñÇäêñÉ: </para> <para> <informalexample> @@ -16,15 +16,15 @@ <![CDATA[ <?php class Sella { - var $items; // ÃÛÑÇÖ Ýí ÓáøÊäÇ ááÊÓæøõÞ "shopping cart" + var $items; // ÃÚÑÇÖ áê Óäñ澂 ääÊÓèñïâ "shopping cart" - // ÇÖÇÝÉ $num ÓáÚ(ÜÉ) ãä ÇáÜ $artnr Åáì ÇáÓøáøÉ + // ÇÖÇáÉ $num ÓäÙ(àÉ) åæ Çäà $artnr Åäé ÇäÓñäñÉ function add_item($artnr, $num) { $this->items[$artnr] += $num; } - // äÒÚ $num ÓáÚ(ÜÉ) ãä ÇáÜ $artnr ãä ÇáÓøáøÉ + // æÒÙ $num ÓäÙ(àÉ) åæ Çäà $artnr åæ ÇäÓñäñÉ function remove_item($artnr, $num) { if ($this->items[$artnr] > $num) { @@ -42,15 +42,15 @@ </para> <para> - íÞæã åÐÇ ÈÊÚÑíÝ ÕäÝ "class" íõÏúÚóì Sella (ÓáøÉ) íÊßæøóä ãä ãÕÝæÝÉ - ÊÔÇÑßíøÉ "associative array" ãä ÇáÓøáÚ Ýí ÇáÓøáøÉ æßÐÇ ÏÇáÊíä áÇÖÇÝÉ æäÒÚ - ÃÛÑÇÖ ãä åÐå ÇáÓøáøÉ. + êâèå çÐÇ ÈÊÙÑêá Õæá "class" êïÏòÙîé Sella (ÓäñÉ) êÊãèñîæ åæ åÕáèáÉ + ÊÔÇÑãêñÉ "associative array" åæ ÇäÓñäÙ áê ÇäÓñäñÉ èãÐÇ ÏÇäÊêæ äÇÖÇáÉ èæÒÙ + ÃÚÑÇÖ åæ çÐç ÇäÓñäñÉ. </para> <warning> <simpara> - <emphasis>áíÓ</emphasis> ÈÇãßÇäß ÊÌÒÆÉ ÊÚÑíÝ ÕäÝò "class definition" ãÇ Åáì - ÚÏÉ ãáÝÇÊ Ãæ ÚÏÉ ãÞÇØÚ ãä PHP. áä íÚãá ãÇ íÃÊí: + <emphasis>äêÓ</emphasis> ÈÇåãÇæã ÊÌÒÆÉ ÊÙÑêá Õæáí "class definition" åÇ Åäé + ÙÏÉ åäáÇÊ Ãè ÙÏÉ åâÇ×Ù åæ PHP. äæ êÙåä åÇ êÃÊê: </simpara> <para> <informalexample> @@ -61,7 +61,7 @@ ?> <?php function test() { - print 'ÍÓäÇ'; + print 'ÍÓæÇ'; } } ?> @@ -72,66 +72,66 @@ </warning> <simpara> - ÊÕáÍ ÇáÊøäÈíåÇÊ ÇáÂÊíøÉ ãÚ PHP 4. + ÊÕäÍ ÇäÊñæÈêçÇÊ ÇäÂÊêñÉ åÙ PHP 4. </simpara> <caution> <simpara> - ÇáÅÓã <literal>stdClass</literal> ãõÓÊóÎúÏóã ÏÇÎáíÇ ãä ÞÈá - Zend æåæ ãÍÌæÒ. áíÓ ÈÇãßÇäß ÇãÊáÇß ÕäÝ íõÏúÚóì - <literal>stdClass</literal>¡ Ýí PHP. + ÇäÅÓå <literal>stdClass</literal> åïÓÊîÎòÏîå ÏÇÎäêÇ åæ âÈä + Zend èçè åÍÌèÒ. äêÓ ÈÇåãÇæã ÇåÊäÇã Õæá êïÏòÙîé + <literal>stdClass</literal>¬ áê PHP. </simpara> </caution> <caution> <simpara> - ÊÊÓã ÃÓãÇÁ ÇáÏøæÇá <literal>__sleep</literal> æ - <literal>__wakeup</literal> ÈßæäåÇ ÓÍÑíøÉ ãÚ ÃÕäÇÝ PHP. - áÇ íãßäß ÇãÊáÇß ÏæÇá ÊÍãá åÐå ÇáÃÓãÇÁ Ýí Ãíø ãä - ÃÕäÇÝß ÅáÇ ÅÐÇ ÑÛÈÊ Ýí ÇÔÑÇßåÇ ÈÇáÎÇÕíÉ ÇáÓøÍÑíøÉ "magic functionality". - áãÒíÏ ãä ÇáãÚáæãÇÊ¡ ÇÓÊÚÑÖ ãÇ Ýí ÇáÃÓÝá. + ÊÊÓå ÃÓåÇÁ ÇäÏñèÇä <literal>__sleep</literal> è + <literal>__wakeup</literal> ÈãèæçÇ ÓÍÑêñÉ åÙ ÃÕæÇá PHP. + äÇ êåãæã ÇåÊäÇã ÏèÇä ÊÍåä çÐç ÇäÃÓåÇÁ áê Ãêñ åæ + ÃÕæÇáã ÅäÇ ÅÐÇ ÑÚÈÊ áê ÇÔÑÇãçÇ ÈÇäÎÇÕêÉ ÇäÓñÍÑêñÉ "magic functionality". + äåÒêÏ åæ ÇäåÙäèåÇʬ ÇÓÊÙÑÖ åÇ áê ÇäÃÓáä. </simpara> </caution> <caution> <simpara> - ÊÍÌÒ PHP ßÇÝÉ ÃÓãÇÁ ÇáÏøæÇá ÇáÊøí ÊÈÏà ÈÜ __ Úáì ÃäøåÇ ÓÍÑíøÉ. - íõæÕóì ÈÃä áÇ ÊÓÊÎÏã ÃÓãÇÁ ÏæÇá ÈåÇ - __ Ýí PHP ÅáÇ ÅÐÇ ÑÛÈÊ Ýí ÈÚÖ ÇáÎÕÇÆÕ ÇáÓøÍÑíøÉ¡ ÇáãõæóËøóÞóÉ. + ÊÍÌÒ PHP ãÇáÉ ÃÓåÇÁ ÇäÏñèÇä ÇäÊñê ÊÈÏà Èà __ Ùäé ÃæñçÇ ÓÍÑêñÉ. + êïèÕîé ÈÃæ äÇ ÊÓÊÎÏå ÃÓåÇÁ ÏèÇä ÈçÇ + __ áê PHP ÅäÇ ÅÐÇ ÑÚÈÊ áê ÈÙÖ ÇäÎÕÇÆÕ ÇäÓñÍÑêñɬ ÇäåïèîËñîâîÉ. </simpara> </caution> <simpara> - Ýí PHP 4¡ íõÓúãóÍ ÝÞØ ÈÇáãõÓÊåøöáÇÊ ÇáËøÇÈÊÉ "constant initializers" ÇáÎÇÕÉ ÈãõÊÛíøöÑÇÊ <literal>var</literal>. - áÃÌá ÇÓÊåáÇá ãõÊÛíøöÑÇÊ ÈÞíã ÛíÑ-ËÇÈËÉ¡ - ÊÍÊÇÌ áÏÇáÉ ÇÓÊåáÇá "initialization function" íÊã ÇÓÊÏÚÇÄåÇ - ÂáíÇð ÚäÏ íÌÑí ÈäÇÁ ßÇÆä ÇäØáÇÞÇð ãä - ÇáÕøöäÝ. ãËá åÐå ÇáÏøÇáÉ ÊõÓãóì ÈÇáÈÇäíÉ "constructor" (ÇÓÊÚÑÖ ãÇ íÃÊí). + áê PHP 4¬ êïÓòåîÍ áâ× ÈÇäåïÓÊçñðäÇÊ ÇäËñÇÈÊÉ "constant initializers" ÇäÎÇÕÉ ÈåïÊÚêñðÑÇÊ <literal>var</literal>. + äÃÌä ÇÓÊçäÇä åïÊÚêñðÑÇÊ Èâêå ÚêÑ-ËÇÈËɬ + ÊÍÊÇÌ äÏÇäÉ ÇÓÊçäÇä "initialization function" êÊå ÇÓÊÏÙÇÄçÇ + ÂäêÇë ÙæÏ êÌÑê ÈæÇÁ ãÇÆæ Çæ×äÇâÇë åæ + ÇäÕñðæá. åËä çÐç ÇäÏñÇäÉ ÊïÓåîé ÈÇäÈÇæêÉ "constructor" (ÇÓÊÙÑÖ åÇ êÃÊê). </simpara> <informalexample> <programlisting role="php"> <![CDATA[ <?php class Sella { - /* áÇ ÔíÁ ãä åÐÇ ÓíÚãá Ýí PHP 4. */ + /* äÇ ÔêÁ åæ çÐÇ ÓêÙåä áê PHP 4. */ var $todays_date = date("Y-m-d"); var $name = $firstname; - var $owner = 'ÕáÇÍ ' . 'ÖíÝ'; - /* Ýí Ííä¡ ÓÊÚãá ÇáãÕÝæÝÇÊ ÇáÊøí ÊÊÖãä ÞíãÇ ËÇÈÊÉð. */ - var $items = array("ÑÇÆí", "ÊáÝÇÒ"); + var $owner = 'ÕäÇÍ ' . 'Öêá'; + /* áê Íêæ¬ ÓÊÙåä ÇäåÕáèáÇÊ ÇäÊñê ÊÊÖåæ âêåÇ ËÇÈÊÉë. */ + var $items = array("ÑÇÆê", "ÊäáÇÒ"); } -/* åßÐÇ íÌÈ Ãä ÊÊã ÇáÃãæÑ. */ +/* çãÐÇ êÌÈ Ãæ ÊÊå ÇäÃåèÑ. */ class Sella { var $todays_date; var $name; var $owner; - var $items = array("ÑÇÆí", "ÊáÝÇÒ"); + var $items = array("ÑÇÆê", "ÊäáÇÒ"); function Sella() { $this->todays_date = date("Y-m-d"); $this->name = $GLOBALS['firstname']; - /* ÅáÎ. . . */ + /* ÅäÎ. . . */ } } ?> @@ -140,9 +140,9 @@ </informalexample> <para> - ÇáÃÕäÇÝ åí ÚÈÇÑÉ Úä ÃäæÇÚ áÐáß Ýåí ÈãËÇÈÉ ÊãåíÏ ááãõÊÛíøöÑÇÊ - ÇáÍÇáíøÉ. Úáíß Ãä ÊäÔÆ ãõÊÛíøöÑÉ ãä ÇáäøæÚ ÇáãÑÛæÈ Ýíå ÈæÇÓØÉ - ãõÔÛøöá "operator": <literal>new</literal>. + ÇäÃÕæÇá çê ÙÈÇÑÉ Ùæ ÃæèÇÙ äÐäã áçê ÈåËÇÈÉ ÊåçêÏ ääåïÊÚêñðÑÇÊ + ÇäÍÇäêñÉ. Ùäêã Ãæ ÊæÔÆ åïÊÚêñðÑÉ åæ ÇäæñèÙ ÇäåÑÚèÈ áêç ÈèÇÓ×É + åïÔÚñðä "operator": <literal>new</literal>. </para> <informalexample> @@ -160,43 +160,43 @@ </informalexample> <para> - íõäÔöÄõ åÐÇ ÇáßÇÆäÇÊó <varname>$cart</varname> æ - <varname>$another_cart</varname>¡ æßáÇåãÇ ãä ÇáÕøäÝ Cart. ÊÊã ãäÇÏÇÉõ ÇáÏøóÇáÉó - add_item() ÇáÎÇÕÉ ÈÇáßÇÆä <varname>$cart</varname> ÈÛÑÖ ÇÖÇÝÉ ÛÑÖ 1 - ãä ÇáÓøáÚÉ ÑÞã 10 Åáì <varname>$cart</varname>. ÊÊã ÇÖÇÝÉ 3 ÃÛÑÇÖ ãä - ÇáÓøáÚÉ ÑÞã 0815 Åáì <varname>$another_cart</varname>. + êïæÔðÄï çÐÇ ÇäãÇÆæÇÊî <varname>$cart</varname> è + <varname>$another_cart</varname>¬ èãäÇçåÇ åæ ÇäÕñæá Cart. ÊÊå åæÇÏÇÉï ÇäÏñîÇäÉî + add_item() ÇäÎÇÕÉ ÈÇäãÇÆæ <varname>$cart</varname> ÈÚÑÖ ÇÖÇáÉ ÚÑÖ 1 + åæ ÇäÓñäÙÉ Ñâå 10 Åäé <varname>$cart</varname>. ÊÊå ÇÖÇáÉ 3 ÃÚÑÇÖ åæ + ÇäÓñäÙÉ Ñâå 0815 Åäé <varname>$another_cart</varname>. </para> <para> - ßáø ãä <varname>$cart</varname> æ <varname>$another_cart</varname> ÊãÊáßÇä - ÇáÏøæÇá add_item()¡ remove_item() æãõÊÛíøöÑÉ items. ÊõÚÊóÈóÑõ åÐå - ÏæÇá æãõÊÛíøöÑÇÊ ãõÊãÇíöÒÉ. íãßä Ãä ÊõÝßøöÑ ÈÇáßÇÆäÇÊ - ßÔíÁ ããÇËá ááãõÌáøÏÇÊ Ýí äÙÇã ãáÝÇÊíø. Ýí äÙÇã ãáÝÇÊíø ãÇ¡ íãßäß - ÇãÊáÇß ãáÝí <filename>ÇÞÑÃäí.TXT</filename> ãÎÊáÝíä ØÇáãÇ ÃäøåãÇ íÊæÇÌÏÇä Ýí ãõÌáøÏÇÊ - ãõÎÊáöÝÉ. ãËáãÇ ÇáÍÇá ãÚ ÇáãõÌáøÏÇÊ¡ ÍíË íÊæÌøÈ Úáíß ÑÞä - ÇÓã ÇáãÓÇÑ ßÇãáÇ ÈÛÑÖ ÈáæÛ ßáø ãáÝ ÇäØáÇÞÇ ãä ÇáãõÌáøÏ ÇáæÇÞÚ Ýí ÇáãÓÊæì ÇáÃÚáì "toplevel directory"¡ Úáíß Ãä - Ãä ÊõÍÏøöÏó ÇáÅÓã ÇáßÇãá ááÏÇáÉ ÇáÊøí ÊæøÏ ãäÇÏÇÊåÇ: Öãä ãÕØáÍÇÊ PHP¡ - ÓíÊãËá ÇáãõÌáøóÏ ÇáæÇÞÚ Ýí ÇáãÓÊæì ÇáÃÚáì Ýí ÇáãÌÇá ÇáÅÓãíø ÇáÔøÇãá "global namespace" Ýí Ííä ÓíÊãËá - ÝÇÕá ÅÓã ÇáãÓÇÑ "pathname separator" Ýí <literal>-></literal>. æåßÐÇ¡ ÝÅäø ÇáÃÓãÇÁ - <varname>$cart->items</varname> æ - <varname>$another_cart->items</varname> ÊõØúáóÞ Úáì ãõÊÛíøöÑÊíä ãÎÊáÝÊíä. - áÇÍÙ Ãäø ÇáãõÊÛíøöÑÉ ÊõÏúÚóì <varname>$cart->items</varname> æáíÓ - <varname>$cart->$items</varname> ããÇ íÚäí Ãäø ÅÓã ãõÊÛíøöÑÉ Ýí PHP íãÊáß - ÑãÒ ÏæáÇÑ ÃÍÇÏíø ÝÞØ. + ãäñ åæ <varname>$cart</varname> è <varname>$another_cart</varname> ÊåÊäãÇæ + ÇäÏñèÇä add_item()¬ remove_item() èåïÊÚêñðÑÉ items. ÊïÙÊîÈîÑï çÐç + ÏèÇä èåïÊÚêñðÑÇÊ åïÊåÇêðÒÉ. êåãæ Ãæ ÊïáãñðÑ ÈÇäãÇÆæÇÊ + ãÔêÁ ååÇËä ääåïÌäñÏÇÊ áê æØÇå åäáÇÊêñ. áê æØÇå åäáÇÊêñ åǬ êåãæã + ÇåÊäÇã åäáê <filename>ÇâÑÃæê.TXT</filename> åÎÊäáêæ ×ÇäåÇ ÃæñçåÇ êÊèÇÌÏÇæ áê åïÌäñÏÇÊ + åïÎÊäðáÉ. åËäåÇ ÇäÍÇä åÙ ÇäåïÌäñÏÇʬ ÍêË êÊèÌñÈ Ùäêã Ñâæ + ÇÓå ÇäåÓÇÑ ãÇåäÇ ÈÚÑÖ ÈäèÚ ãäñ åäá Çæ×äÇâÇ åæ ÇäåïÌäñÏ ÇäèÇâÙ áê ÇäåÓÊèé ÇäÃÙäé "toplevel directory"¬ Ùäêã Ãæ + Ãæ ÊïÍÏñðÏî ÇäÅÓå ÇäãÇåä ääÏÇäÉ ÇäÊñê ÊèñÏ åæÇÏÇÊçÇ: Öåæ åÕ×äÍÇÊ PHP¬ + ÓêÊåËä ÇäåïÌäñîÏ ÇäèÇâÙ áê ÇäåÓÊèé ÇäÃÙäé áê ÇäåÌÇä ÇäÅÓåêñ ÇäÔñÇåä "global namespace" áê Íêæ ÓêÊåËä + áÇÕä ÅÓå ÇäåÓÇÑ "pathname separator" áê <literal>-></literal>. èçãÐǬ áÅæñ ÇäÃÓåÇÁ + <varname>$cart->items</varname> è + <varname>$another_cart->items</varname> Êï×òäîâ Ùäé åïÊÚêñðÑÊêæ åÎÊäáÊêæ. + äÇÍØ Ãæñ ÇäåïÊÚêñðÑÉ ÊïÏòÙîé <varname>$cart->items</varname> èäêÓ + <varname>$cart->$items</varname> ååÇ êÙæê Ãæñ ÅÓå åïÊÚêñðÑÉ áê PHP êåÊäã + ÑåÒ ÏèäÇÑ ÃÍÇÏêñ áâ×. </para> <informalexample> <programlisting role="php"> <![CDATA[ <?php -// ÕÍíÍ¡ $ ÃÍÇÏí +// ÕÍêͬ $ ÃÍÇÏê $cart->items = array("10" => 1); -// ÛíÑ ÕÇáÍ¡ áÃäø $cart->$items ÊõÕÈöÍõ $cart->"" +// ÚêÑ ÕÇäͬ äÃæñ $cart->$items ÊïÕÈðÍï $cart->"" $cart->$items = array("10" => 1); -// ÕÍíÍ¡ áßä íãßä Ãä Êßæä Ãæ áÇ Êßæä ãÇ ßÇä ãÞÕæÏÇð ãäåÇ: -// $cart->$myvar ÊõÕÈöÍõ $cart->items +// ÕÍêͬ äãæ êåãæ Ãæ Êãèæ Ãè äÇ Êãèæ åÇ ãÇæ åâÕèÏÇë åæçÇ: +// $cart->$myvar ÊïÕÈðÍï $cart->items $myvar = 'items'; $cart->$myvar = array("10" => 1); ?> @@ -205,25 +205,25 @@ </informalexample> <para> - Öãä ÊÚÑíÝ ÕöäÝò ãÇ¡ áÇ ÊÚÑÝ ÊÍÊ Ãíø ÊÓãíÉ Óíßæä ÇáßÇÆäõ - ÞÇÈáÇ ááæáæÌ Ýí ÈÑäÇãÌß: ÚäÏ ßÊÇÈÉ ÕäÝ Cart¡ ßÇä - íõÌåóáõ Ãäø ÇáßÇÆä ÓíõÓóãóì - <varname>$cart</varname> Ãæ <varname>$another_cart</varname> áÇÍÞÇð. æåßÐÇ¡ - ÝÅäøå áíÓ ÈÇãßÇäß ßÊÇÈÉ <varname>$cart->items</varname> Öãä ÕäÝ Cart - äÝÓå. ÈÏáÇ ãä Ðáß¡ æáÃÌá ÇáÊøóãßøõä ãä æáæÌ ãÇ íÎøõÕå ãä ÏæÇá - æãõÊÛíøöÑÇÊ ÇäØáÇÞÇ ãä ÕäÝ ãÇ¡ íãßä ááãÑÁ Ãä íÓÊÎÏã ÔÈå-ÇáãõÊÛíøöÑÉ "pseudo-variable" - <varname>$this</varname> ÇáÊøí íãßä Ãä ÊÞÑà Úáì Ôßá 'ÃäÇ ÈÇáÐøÇÊ - my own' Ãæ 'ÇáßÇÆä ÇáÍÇáíø - current - object'. æåßÐÇ¡ íõãßä ÞÑÇÁÉ '<varname>$this->items[$artnr]</varname> += - <varname>$num</varname>' æßÃäøåÇ 'ÇÖÇÝÉ <varname>$num</varname> Åáì - ÇáÚÏøóÇÏ <varname>$artnr</varname> ÇáÎÇÕ ÈãÕÝæÝÊí ááÃÛÑÇÖ' Ãæ 'ÇÖÇÝÉ - <varname>$num</varname> Åáì ÇáÚÏøóÇÏ <varname>$artnr</varname> ÇáÎÇÕ - ÈãÕÝæÝÉ ÇáÃÛÑÇÖ Öãä ÇáßÇÆä ÇáÍÇáíø'. + Öåæ ÊÙÑêá Õðæáí åǬ äÇ ÊÙÑá ÊÍÊ Ãêñ ÊÓåêÉ Óêãèæ ÇäãÇÆæï + âÇÈäÇ ääèäèÌ áê ÈÑæÇåÌã: ÙæÏ ãÊÇÈÉ Õæá Cart¬ ãÇæ + êïÌçîäï Ãæñ ÇäãÇÆæ ÓêïÓîåîé + <varname>$cart</varname> Ãè <varname>$another_cart</varname> äÇÍâÇë. èçãÐǬ + áÅæñç äêÓ ÈÇåãÇæã ãÊÇÈÉ <varname>$cart->items</varname> Öåæ Õæá Cart + æáÓç. ÈÏäÇ åæ Ðä㬠èäÃÌä ÇäÊñîåãñïæ åæ èäèÌ åÇ êÎñïÕç åæ ÏèÇä + èåïÊÚêñðÑÇÊ Çæ×äÇâÇ åæ Õæá åǬ êåãæ ääåÑÁ Ãæ êÓÊÎÏå ÔÈç-ÇäåïÊÚêñðÑÉ "pseudo-variable" + <varname>$this</varname> ÇäÊñê êåãæ Ãæ ÊâÑà Ùäé Ôãä 'ÃæÇ ÈÇäÐñÇÊ - my own' Ãè 'ÇäãÇÆæ ÇäÍÇäêñ - current + object'. èçãÐǬ êïåãæ âÑÇÁÉ '<varname>$this->items[$artnr]</varname> += + <varname>$num</varname>' èãÃæñçÇ 'ÇÖÇáÉ <varname>$num</varname> Åäé + ÇäÙÏñîÇÏ <varname>$artnr</varname> ÇäÎÇÕ ÈåÕáèáÊê ääÃÚÑÇÖ' Ãè 'ÇÖÇáÉ + <varname>$num</varname> Åäé ÇäÙÏñîÇÏ <varname>$artnr</varname> ÇäÎÇÕ + ÈåÕáèáÉ ÇäÃÚÑÇÖ Öåæ ÇäãÇÆæ ÇäÍÇäêñ'. </para> <note> <para> - åäÇß ÈÚÖ ÇáÏøæÇá ÇáÌãíáÉ ááÊÚÇãá ãÚ ÇáÃÕäÇÝ æÇáßÇÆäÇÊ. áÑÈãÇ ÊÑÛÈ - Ýí ÇáÞÇÁ äÙÑÉ Úáì <link linkend="ref.classobj">ÏæÇá ÇáÃÕäÇÝ/ÇáßÇÆäÇÊ "Class/Object + çæÇã ÈÙÖ ÇäÏñèÇä ÇäÌåêäÉ ääÊÙÇåä åÙ ÇäÃÕæÇá èÇäãÇÆæÇÊ. äÑÈåÇ ÊÑÚÈ + áê ÇäâÇÁ æØÑÉ Ùäé <link linkend="ref.classobj">ÏèÇä ÇäÃÕæÇá/ÇäãÇÆæÇÊ "Class/Object Functions"</link>. </para> </note> @@ -233,19 +233,19 @@ <title><literal>extends</literal></title> <para> - ÛÇáÈÇ ãÇ ÊÍÊÇÌ Åáì ÃÕäÇÝ ÊÊÖãä ãõÊÛíøöÑÇÊ æÏæÇá ãõãÇËáÉ - áÕäÝ ÂÎÑ ãõÊæÇÌöÏ. Ýí ÇáæÇÞÚ¡ Åäøå áÚÇÏÉ ØíøöÈÉ Ãä - ÊõÚÑøöÝ ÕäÝÇ äæÚíøÇð "generic class" íãßä ÇÓÊÎÏÇãå Ýí ßÇÝÉ - ãÔÇÑíÚß æÊßííÝ åÐÇ ÇáÕøöäÝ ÈÍÓÈ ÍÇÌíÇÊ ßáø ãä - ãÔÇÑíÚß ÇáÎÇÕÉ. áÊÓåíá åÐÇ ÇáÃãÑ¡ íãßä ááÃÕäÇÝ Ãä Êßæä - ÊæÓÚÇÊ áÃÕäÇÝ ÃÎÑì. íÊæÝÑ ÇáÕøöäÝ ÇáãõæÓøóÚ Ãæ ÇáãõÔÊóÞ - Úáì ßÇÝÉ ãõÊÛíøöÑÇÊ æÏæÇá ÇáÕøäÝ ÇáÃÓÇÓíø (åÐÇ ãÇ - íõÓãóì 'æÑÇËÉ - inheritance' ÈÇáÑøÛã ãä æÇÞÚ Ãä áÇ ÃÍÏ ÞÏ ãÇÊ) æãÇ - ÊõÖíÝõå Åáì ÇáÊøÚÑíÝ ÇáãõæÓøóÚ. íÓÊÍíá - ÇáØøÑÍ ÇäØáÇÞÇ ãä ÕäÝò ãÇ Ãí ÅÒÇáÉ ÊÚÑíÝ ÃíøÉ - ÏæÇá Ãæ ãõÊÛíøöÑÇÊ ãÊæÇÌÏÉ. ÏÇÆãÇ ãÇ íÑÊÈØ ÇáÕøöäÝ ÇáãõæÓøóÚ ÊÈÚíÉð - ÈÕäÝ ÞÇÚÏíø æÇÍÏ ããÇ íÚäí Ãäø ÇáæÑÇËÉ ÇáãõÊÚÏøöÏÉ "multiple inheritance" - áíÓÊ ãÏÚæãÉð. íÊã ÊæÓíÚ ÇáÃÕäÇÝ ÈÇÓÊÎÏÇã ÇáßáãÉ ÇáãÝÊÇÍíøÉ 'extends'. + ÚÇäÈÇ åÇ ÊÍÊÇÌ Åäé ÃÕæÇá ÊÊÖåæ åïÊÚêñðÑÇÊ èÏèÇä åïåÇËäÉ + äÕæá ÂÎÑ åïÊèÇÌðÏ. áê ÇäèÇâÙ¬ Åæñç äÙÇÏÉ ×êñðÈÉ Ãæ + ÊïÙÑñðá ÕæáÇ æèÙêñÇë "generic class" êåãæ ÇÓÊÎÏÇåç áê ãÇáÉ + åÔÇÑêÙã èÊãêêá çÐÇ ÇäÕñðæá ÈÍÓÈ ÍÇÌêÇÊ ãäñ åæ + åÔÇÑêÙã ÇäÎÇÕÉ. äÊÓçêä çÐÇ ÇäÃåѬ êåãæ ääÃÕæÇá Ãæ Êãèæ + ÊèÓÙÇÊ äÃÕæÇá ÃÎÑé. êÊèáÑ ÇäÕñðæá ÇäåïèÓñîÙ Ãè ÇäåïÔÊîâ + Ùäé ãÇáÉ åïÊÚêñðÑÇÊ èÏèÇä ÇäÕñæá ÇäÃÓÇÓêñ (çÐÇ åÇ + êïÓåîé 'èÑÇËÉ - inheritance' ÈÇäÑñÚå åæ èÇâÙ Ãæ äÇ ÃÍÏ âÏ åÇÊ) èåÇ + ÊïÖêáïç Åäé ÇäÊñÙÑêá ÇäåïèÓñîÙ. êÓÊÍêä + Çä×ñÑÍ Çæ×äÇâÇ åæ Õæáí åÇ Ãê ÅÒÇäÉ ÊÙÑêá ÃêñÉ + ÏèÇä Ãè åïÊÚêñðÑÇÊ åÊèÇÌÏÉ. ÏÇÆåÇ åÇ êÑÊÈ× ÇäÕñðæá ÇäåïèÓñîÙ ÊÈÙêÉë + ÈÕæá âÇÙÏêñ èÇÍÏ ååÇ êÙæê Ãæñ ÇäèÑÇËÉ ÇäåïÊÙÏñðÏÉ "multiple inheritance" + äêÓÊ åÏÙèåÉë. êÊå ÊèÓêÙ ÇäÃÕæÇá ÈÇÓÊÎÏÇå ÇäãäåÉ ÇäåáÊÇÍêñÉ 'extends'. </para> <informalexample> @@ -265,72 +265,72 @@ </informalexample> <para> - íÞæã åÐÇ ÈÊÚÑíÝ ÕäÝ íõÓãì Named_Cart íÊæÝÑ Úáì ßÇÝÉ ãõÊÛíøöÑÇÊ æÏæÇá - Cart ÅÖÇÝÉ Åáì ãõÊÛíøöÑÉ ÅÖÇÝíøÉ åí <varname>$owner</varname> æßÐÇ - ÏÇáÉ ÅÖÇÝíøÉ åí set_owner(). ÃäÔÆ ÓáøÉ ãõÓãÇÉ "named cart" ÈÇáØøÑíÞÉ ÇáãõÚÊÇÏÉ - æÓÊÊãßä ãä ÊÚííä æãÚÑÝÉ ãÇáöß ÇáÓøáÇÊ. áÇ ÒÇá ÈÇãßÇäß ÇÓÊÎÏÇã ÏæÇá ÓáøÉ - ÚÇÏíøÉ Úáì ÓáÇøÊ ãõÓãóÇÉ: + êâèå çÐÇ ÈÊÙÑêá Õæá êïÓåé Named_Cart êÊèáÑ Ùäé ãÇáÉ åïÊÚêñðÑÇÊ èÏèÇä + Cart ÅÖÇáÉ Åäé åïÊÚêñðÑÉ ÅÖÇáêñÉ çê <varname>$owner</varname> èãÐÇ + ÏÇäÉ ÅÖÇáêñÉ çê set_owner(). ÃæÔÆ ÓäñÉ åïÓåÇÉ "named cart" ÈÇä×ñÑêâÉ ÇäåïÙÊÇÏÉ + èÓÊÊåãæ åæ ÊÙêêæ èåÙÑáÉ åÇäðã ÇäÓñäÇÊ. äÇ ÒÇä ÈÇåãÇæã ÇÓÊÎÏÇå ÏèÇä ÓäñÉ + ÙÇÏêñÉ Ùäé ÓäÇñÊ åïÓåîÇÉ: </para> <informalexample> <programlisting role="php"> <![CDATA[ <?php -$ncart = new Named_Cart; // ÇäÔÇÁ ÓáøÉ ãõÓãóÇÉ -$ncart->set_owner("kris"); // ÊÓãíÉ åÐå ÇáÓøáøÉ -print $ncart->owner; // ØÈÇÚÉ ÃÓãÇÁ ãÇáßí ÇáÓøáøÉ -$ncart->add_item("10", 1); // (ÎÇÕíÉ ãæÑæËÉ Úä ÇáÓøáøÉ) +$ncart = new Named_Cart; // ÇæÔÇÁ ÓäñÉ åïÓåîÇÉ +$ncart->set_owner("kris"); // ÊÓåêÉ çÐç ÇäÓñäñÉ +print $ncart->owner; // ×ÈÇÙÉ ÃÓåÇÁ åÇäãê ÇäÓñäñÉ +$ncart->add_item("10", 1); // (ÎÇÕêÉ åèÑèËÉ Ùæ ÇäÓñäñÉ) ?> ]]> </programlisting> </informalexample> <para> - íõÓãóì åÐÇ ÃíÖÇ ÈÚáÇÞÉ "æÇáöÏ-ØÝá / parent-child". ÊäÔÆ ÕöäÝÇð¡ - ãä ãÓÊæì ÇáæÇáÏ¡ æÊÓÊÎÏã <literal>extends</literal> ÈÛÑÖ ÇäÔÇÁ ÖöäÝ ÌÏíÏ - <emphasis>íÞæã</emphasis> Úáì ÇáÕøöäÝ ÇáæÇáöÏ "parent class": ÇáÕøöäÝ ÇáØøöÝá "child class". íãßäß - ÍÊì ÇÓÊÎÏÇã åÐÇ ÇáÕøöäÝ ÇáØøöÝá ÇáÌÏíÏ æÇäÔÇÁ ÕäÝ ÂÎÑ íÞæã Úáì åÐÇ ÇáÕøöäÝ - ÇáØøöÝá. + êïÓåîé çÐÇ ÃêÖÇ ÈÙäÇâÉ "èÇäðÏ-×áä / parent-child". ÊæÔÆ ÕðæáÇë¬ + åæ åÓÊèé ÇäèÇäϬ èÊÓÊÎÏå <literal>extends</literal> ÈÚÑÖ ÇæÔÇÁ Öðæá ÌÏêÏ + <emphasis>êâèå</emphasis> Ùäé ÇäÕñðæá ÇäèÇäðÏ "parent class": ÇäÕñðæá Çä×ñðáä "child class". êåãæã + ÍÊé ÇÓÊÎÏÇå çÐÇ ÇäÕñðæá Çä×ñðáä ÇäÌÏêÏ èÇæÔÇÁ Õæá ÂÎÑ êâèå Ùäé çÐÇ ÇäÕñðæá + Çä×ñðáä. </para> <note> <para> - íÌÈ ÊÚÑíÝ ÇáÃÕäÇÝ ÞÈá ÇÓÊÎÏÇãåÇ! ÅÐÇ ÑÛÈÊ Ãä íõæóÓøöÚó ÇáÕøöäÝõ - <literal>Named_Cart</literal> ÇáÕøöäÝó - <literal>Cart</literal>¡ ÓíÊæÌÈ Úáíß ÊÚÑíÝ ÇáÕøöäÝ - <literal>Cart</literal> ÃæáÇð. ÅÐÇ ÃÑÏÊ ÇäÔÇÁ ÕäÝ ÂÎÑ íõÏúÚóì - <literal>Yellow_named_cart</literal> íÞæã Úáì ÇáÕøöäÝ - <literal>Named_Cart</literal>¡ Óíßæä Úáíß ÊÚÑíÝ - <literal>Named_Cart</literal> ÃæáÇð. áÇÎÊÕÇÑ ÇáÃãæÑ: ÇáÊøÑÊíÈ ÇáÐøí íÊã - Èå ÊÚÑíÝ ÇáÃÕäÇÝ ãõåöã. + êÌÈ ÊÙÑêá ÇäÃÕæÇá âÈä ÇÓÊÎÏÇåçÇ! ÅÐÇ ÑÚÈÊ Ãæ êïèîÓñðÙî ÇäÕñðæáï + <literal>Named_Cart</literal> ÇäÕñðæáî + <literal>Cart</literal>¬ ÓêÊèÌÈ Ùäêã ÊÙÑêá ÇäÕñðæá + <literal>Cart</literal> ÃèäÇë. ÅÐÇ ÃÑÏÊ ÇæÔÇÁ Õæá ÂÎÑ êïÏòÙîé + <literal>Yellow_named_cart</literal> êâèå Ùäé ÇäÕñðæá + <literal>Named_Cart</literal>¬ Óêãèæ Ùäêã ÊÙÑêá + <literal>Named_Cart</literal> ÃèäÇë. äÇÎÊÕÇÑ ÇäÃåèÑ: ÇäÊñÑÊêÈ ÇäÐñê êÊå + Èç ÊÙÑêá ÇäÃÕæÇá åïçðå. </para> </note> </sect1> <sect1 id="language.oop.constructor"> - <title>ÇáÈÇäíÇÊ: <literal>Constructors</literal></title> + <title>ÇäÈÇæêÇÊ: <literal>Constructors</literal></title> <caution> <simpara> - ÈÍÓÈ PHP 3 Ãæ PHP 4¡ ÊÊÕÑÝ ÇáÈóÇäöíóÇÊ ÈÕæÑÉ ãÊÛÇíÑÉ. ÊõÝÖøóá ÈÞæÉ - ÏáÇÆáíÉ PHP 4. + ÈÍÓÈ PHP 3 Ãè PHP 4¬ ÊÊÕÑá ÇäÈîÇæðêîÇÊ ÈÕèÑÉ åÊÚÇêÑÉ. ÊïáÖñîä ÈâèÉ + ÏäÇÆäêÉ PHP 4. </simpara> </caution> <para> - ÇáÈÇäíÇÊ åí ÏæÇá Ýí ÕäÝ ÊÊã ãäÇÏÇÊåÇ ÂáíÇ - ÚäÏ ÇäÔÇÁ ãËíá "instance" ÌÏíÏ áÕöäÝ¡ ÈæÇÓØÉ - <literal>new</literal>. Ýí PHP 3¡ - ÊÕÈÍ ÏÇáÉ ãÇ ÈÇäíÉð ÚäÏãÇ ÊÊæÝÑ Úáì äÝÓ ÇáÅÓÇã ãËá - ÇáÕøöäÝ. Ýí PHP 4¡ ÊÕÈÍ ÏÇáÉ ãÇ ÈÇäíÉð ÚäÏãÇ - ÊÊæÝÑ Úáì äÝÓ ÇáÅÓã ãËá ÇáÕøöäÝ ÇáÐøí ÚõÑøöÝÊ Èå - - ÇáÝÑÞ ÏÞíÞ áßäå ÍÇÓã (ÇÓÊÚÑÖ ãÇ íÃÊí). + ÇäÈÇæêÇÊ çê ÏèÇä áê Õæá ÊÊå åæÇÏÇÊçÇ ÂäêÇ + ÙæÏ ÇæÔÇÁ åËêä "instance" ÌÏêÏ äÕðæá¬ ÈèÇÓ×É + <literal>new</literal>. áê PHP 3¬ + ÊÕÈÍ ÏÇäÉ åÇ ÈÇæêÉë ÙæÏåÇ ÊÊèáÑ Ùäé æáÓ ÇäÅÓÇå åËä + ÇäÕñðæá. áê PHP 4¬ ÊÕÈÍ ÏÇäÉ åÇ ÈÇæêÉë ÙæÏåÇ + ÊÊèáÑ Ùäé æáÓ ÇäÅÓå åËä ÇäÕñðæá ÇäÐñê ÙïÑñðáÊ Èç - + ÇäáÑâ Ïâêâ äãæç ÍÇÓå (ÇÓÊÙÑÖ åÇ êÃÊê). </para> <informalexample> <programlisting role="php"> <![CDATA[ <?php -// íÚãá ãÚ PHP 3 æ PHP 4. +// êÙåä åÙ PHP 3 è PHP 4. class Auto_Cart extends Cart { function Auto_Cart() { $this->add_item("10", 1); @@ -342,31 +342,31 @@ </informalexample> <para> - íõÚÑøöÝõ åÐÇ ÕöäÝ Auto_Cart æåæ ÚÈÇÑÉ Úä ÓáøÉ "Cart" ÅÖÇÝÉ Åáì ÈÇäíÉ - ÊÞæã ÈÇÓÊåáÇá ÇáÓøáøÉ ÈÛÑÖ æÇÍÏ ãä ÇáÓøáÚÉ ÑÞã "10" - Ýí ßáø ãÑøÉ íÌÑí ÝíåÇ ÇäÔÇÁ ÝíåÇ Auto_Cart ÌÏíÏ ÈæÇÓØÉ "new". ÈÇãßÇä ÇáÈÇäíÇÊ - ÃÎÐ ÏáÇÆá "arguments"¡ æÇáÊíø íãßä Ãä Êßæä ÇÎÊíÇÑíøÉ¡ ããÇ - íÌÚáåÇ ÃßËÑ ÞÇÈáíÉ ááÇÓÊÎÏÇã ÈÔßá ãõÚúÊóÈóÑ. ááÇÓÊãÑÇÑ Ýí ÇáÞÏÑÉ Úáì ÇÓÊÎÏÇã ÇáÕøöäÝ - ãä Ïæä ÇáãóÚúáóãóÇÊ "parameters"¡ íÊæÌÈ ÌÚá ßÇÝÉ ÇáãóÚúáóãóÇÊ¡ ÈÇáäøÓÈÉ ááÈÇäíÇÊ¡ - ÇÎÊíÇÑíøÉ ÈÊÞÏíã Þíã ÇÝÊÑÇÖíøÉ. + êïÙÑñðáï çÐÇ Õðæá Auto_Cart èçè ÙÈÇÑÉ Ùæ ÓäñÉ "Cart" ÅÖÇáÉ Åäé ÈÇæêÉ + Êâèå ÈÇÓÊçäÇä ÇäÓñäñÉ ÈÚÑÖ èÇÍÏ åæ ÇäÓñäÙÉ Ñâå "10" + áê ãäñ åÑñÉ êÌÑê áêçÇ ÇæÔÇÁ áêçÇ Auto_Cart ÌÏêÏ ÈèÇÓ×É "new". ÈÇåãÇæ ÇäÈÇæêÇÊ + ÃÎÐ ÏäÇÆä "arguments"¬ èÇäÊêñ êåãæ Ãæ Êãèæ ÇÎÊêÇÑêñɬ ååÇ + êÌÙäçÇ ÃãËÑ âÇÈäêÉ ääÇÓÊÎÏÇå ÈÔãä åïÙòÊîÈîÑ. ääÇÓÊåÑÇÑ áê ÇäâÏÑÉ Ùäé ÇÓÊÎÏÇå ÇäÕñðæá + åæ Ïèæ ÇäåîÙòäîåîÇÊ "parameters"¬ êÊèÌÈ ÌÙä ãÇáÉ ÇäåîÙòäîåîÇʬ ÈÇäæñÓÈÉ ääÈÇæêÇʬ + ÇÎÊêÇÑêñÉ ÈÊâÏêå âêå ÇáÊÑÇÖêñÉ. </para> <informalexample> <programlisting role="php"> <![CDATA[ <?php -// íÚãá ãÚ PHP 3 æ PHP 4. +// êÙåä åÙ PHP 3 è PHP 4. class Constructor_Cart extends Cart { function Constructor_Cart($item = "10", $num = 1) { $this->add_item ($item, $num); } } -// ÇÈÊíÇÚ äÝÓ ÇáÈÖÇÆÚ ÇáãõãøöáóÉ ÇáÞÏíãÉ. +// ÇÈÊêÇÙ æáÓ ÇäÈÖÇÆÙ ÇäåïåñðäîÉ ÇäâÏêåÉ. $default_cart = new Constructor_Cart; -// ÇÈÊíÇÚ ÍÞíÞíø... +// ÇÈÊêÇÙ Íâêâêñ... $different_cart = new Constructor_Cart("20", 17); ?> @@ -375,16 +375,16 @@ </informalexample> <para> - íãßäß ÃíÖÇ ÇÓÊÎÏÇã ãõÔÛøöá <literal>@</literal> ÈÛÑÖ - <emphasis>ßÊã "mute"</emphasis> ÇáÃÎØÇÁ ÇáØøóÇÑÆÉ Ýí ÇáÈÇäíÉ¡ Úáì ÓÈíá ÇáãËÇá: + êåãæã ÃêÖÇ ÇÓÊÎÏÇå åïÔÚñðä <literal>@</literal> ÈÚÑÖ + <emphasis>ãÊå "mute"</emphasis> ÇäÃÎ×ÇÁ Çä×ñîÇÑÆÉ áê ÇäÈÇæêɬ Ùäé ÓÈêä ÇäåËÇä: <literal>@new</literal>. </para> <caution> <simpara> - Ýí PHP 3¡ ÊÊæÝÑ Úáì ÇáÃÕäÇÝ ÇáãõÔÊøóÞóÉ æÇáÈÇäíÇÊ Úáì ÚÏÏ ãä - ÇáÊøóÞííÏÇÊ "limitations". íÌÈ ÞÑÇÁÉ ÇáÃãËáÉ ÇáÂÊíøóÉ ÈÇÍÊÑÇÓ - áÝåã åÐå ÇáÊøÞííÏÇÊ. + áê PHP 3¬ ÊÊèáÑ Ùäé ÇäÃÕæÇá ÇäåïÔÊñîâîÉ èÇäÈÇæêÇÊ Ùäé ÙÏÏ åæ + ÇäÊñîâêêÏÇÊ "limitations". êÌÈ âÑÇÁÉ ÇäÃåËäÉ ÇäÂÊêñîÉ ÈÇÍÊÑÇÓ + äáçå çÐç ÇäÊñâêêÏÇÊ. </simpara> </caution> @@ -394,17 +394,17 @@ <?php class A { function A() { - echo "ÃäÇ ÈÇäíÉ A.<br />\n"; + echo "ÃæÇ ÈÇæêÉ A.<br />\n"; } } class B extends A { function C() { - echo "ÃäÇ ÏÇáÉ ÇÚÊíÇÏíøÉ.<br />\n"; + echo "ÃæÇ ÏÇäÉ ÇÙÊêÇÏêñÉ.<br />\n"; } } -// áÇ ÈÇäíÉ íÌÑí ãäÇÏÇÊåÇ Ýí PHP 3. +// äÇ ÈÇæêÉ êÌÑê åæÇÏÇÊçÇ áê PHP 3. $b = new B; ?> ]]> @@ -412,17 +412,17 @@ </informalexample> <para> - Ýí PHP 3¡ æáÇ ÃíÉ ÈÇäíÉ ÊÊã ãäÇÏÇÊåÇ Ýí ÇáãËÇá ÇáÚáæíø. - ÇáÞÇÚÏÉ Ýí PHP 3 åí: 'ÈÇäíÉ ãÇ åí ÚÈÇÑÉ Úä ÏÇáÉ áåÇ äÝÓ - ÇáÅÓã ãËá ÇáÕøöäÝ.'. ÅÓã ÇáÕøöäÝ åæ B æáíÓ åäÇß - ÃíøÉ ÏÇáÉ ÊõÏÚóì B() Ýí ÇáÕøöäÝ B. áã íÍÏË ÔíÁ. + áê PHP 3¬ èäÇ ÃêÉ ÈÇæêÉ ÊÊå åæÇÏÇÊçÇ áê ÇäåËÇä ÇäÙäèêñ. + ÇäâÇÙÏÉ áê PHP 3 çê: 'ÈÇæêÉ åÇ çê ÙÈÇÑÉ Ùæ ÏÇäÉ äçÇ æáÓ + ÇäÅÓå åËä ÇäÕñðæá.'. ÅÓå ÇäÕñðæá çè B èäêÓ çæÇã + ÃêñÉ ÏÇäÉ ÊïÏÙîé B() áê ÇäÕñðæá B. äå êÍÏË ÔêÁ. </para> <para> - Êãø ÊÞæíã åÐÇ ÇáÃãÑ Ýí PHP 4 ÈÅÏÎÇá ÞÇÚÏÉ ÃÎÑì: ÅÐÇ áã íÊæÝÑ ÕöäÝñ ãÇ - Úáì ÈÇäíÉ¡ ÝÅäøóå íÊã ãäÇÏÇÉ ÈÇäíÉ ÇáÕøöäÝ ÇáÞÇÚÏíø "base class"¡ - Åä æõÌöÏ. ÇáãËÇá ÇáÃÚáì íÄÏí Åáì ØÈÇÚÉ - 'ÃäÇ ÈÇäíÉ A.<br />' Ýí PHP 4. + Êåñ Êâèêå çÐÇ ÇäÃåÑ áê PHP 4 ÈÅÏÎÇä âÇÙÏÉ ÃÎÑé: ÅÐÇ äå êÊèáÑ Õðæáì åÇ + Ùäé ÈÇæêɬ áÅæñîç êÊå åæÇÏÇÉ ÈÇæêÉ ÇäÕñðæá ÇäâÇÙÏêñ "base class"¬ + Åæ èïÌðÏ. ÇäåËÇä ÇäÃÙäé êÄÏê Åäé ×ÈÇÙÉ + 'ÃæÇ ÈÇæêÉ A.<br />' áê PHP 4. </para> <informalexample> @@ -433,13 +433,13 @@ { function A() { - echo "ÃäÇ ÈÇäíÉ A.<br />\n"; + echo "ÃæÇ ÈÇæêÉ A.<br />\n"; } function B() { - echo "ÃäÇ ÏÇáÉ ÇÚÊíÇÏíøÉ ÊõÏúÚóì B Ýí ÇáÕøöäÝ A.<br />\n"; - echo "áÓÊ ÈÇäíÉ Ýí A.<br />\n"; + echo "ÃæÇ ÏÇäÉ ÇÙÊêÇÏêñÉ ÊïÏòÙîé B áê ÇäÕñðæá A.<br />\n"; + echo "äÓÊ ÈÇæêÉ áê A.<br />\n"; } } @@ -447,11 +447,11 @@ { function C() { - echo "ÃäÇ ÏÇáÉ ÇÚÊíÇÏíøÉ.<br />\n"; + echo "ÃæÇ ÏÇäÉ ÇÙÊêÇÏêñÉ.<br />\n"; } } -// ÓíÄÏí åÐÇ Åáì ãäÇÏÇÉ B() Úáì ÃäøåÇ ÈÇäíÉ. +// ÓêÄÏê çÐÇ Åäé åæÇÏÇÉ B() Ùäé ÃæñçÇ ÈÇæêÉ. $b = new B; ?> ]]> @@ -459,43 +459,43 @@ </informalexample> <para> - Ýí PHP 3¡ ÇáÏøÇáÉ B() Ýí ÇáÕøöäÝ A ÓÊõÕÈöÍ ÝÌÃÉ - ÈÇäíÉð Ýí ÇáÕøöäÝ B ÈÇáÑøÛã ãä ÚÏã ãÞÕæÏíÉ ÔíÁ ãä åÐÇ ÇáÞÈíá. - ÇáÞÇÚÏÉ Ýí PHP 3 åí: 'ÈÇäíÉñ ãÇ åí ÏÇáÉ áåÇ äÝÓ - ÇáÅÓã ãËá ÇáÕøöäÝ.'. áÇ ÊßÊÑË PHP 3 ÅÐÇ Êãø ÊÚÑíÝ ÇáÏøÇáÉ - Ýí ÇáÕøöäÝ B Ãæ ÅÐÇ ÊãøÊ æÑÇËÊåÇ. + áê PHP 3¬ ÇäÏñÇäÉ B() áê ÇäÕñðæá A ÓÊïÕÈðÍ áÌÃÉ + ÈÇæêÉë áê ÇäÕñðæá B ÈÇäÑñÚå åæ ÙÏå åâÕèÏêÉ ÔêÁ åæ çÐÇ ÇäâÈêä. + ÇäâÇÙÏÉ áê PHP 3 çê: 'ÈÇæêÉì åÇ çê ÏÇäÉ äçÇ æáÓ + ÇäÅÓå åËä ÇäÕñðæá.'. äÇ ÊãÊÑË PHP 3 ÅÐÇ Êåñ ÊÙÑêá ÇäÏñÇäÉ + áê ÇäÕñðæá B Ãè ÅÐÇ ÊåñÊ èÑÇËÊçÇ. </para> <para> - Êãø ÊÞæíã åÐÇ ÇáÃãÑ Ýí PHP 4 ÈÊÚÏíá ÇáÞÇÚÏÉ Åáì: 'ÈÇäíÉñ ãÇ - åí ÏÇáÉ áåÇ äÝÓ ÇáÅÓã ãËá ÇáÕøöäÝ ÇáÐøí ÌÑì ÊÚÑíÝåÇ - Èå.'. æåßÐÇ¡ ÝÅäøå ÈÜPHP 4¡ ÇáÕøöäÝ B áä íÊæÝÑ Úáì ÏÇáÉ ÈÇäíøÉ¡ - ÈãÈÇÏÑÉ ÐÇÊíøÉ¡ æÓÊÊã ãäÇÏÇÉ ÈÇäíÉ ÇáÕøöäÝ ÇáÞÇÚÏíø - áíõØúÈóÚ 'ÃäÇ ÈÇäíÉ A.<br />'. + Êåñ Êâèêå çÐÇ ÇäÃåÑ áê PHP 4 ÈÊÙÏêä ÇäâÇÙÏÉ Åäé: 'ÈÇæêÉì åÇ + çê ÏÇäÉ äçÇ æáÓ ÇäÅÓå åËä ÇäÕñðæá ÇäÐñê ÌÑé ÊÙÑêáçÇ + Èç.'. èçãÐǬ áÅæñç ÈàPHP 4¬ ÇäÕñðæá B äæ êÊèáÑ Ùäé ÏÇäÉ ÈÇæêñɬ + ÈåÈÇÏÑÉ ÐÇÊêñɬ èÓÊÊå åæÇÏÇÉ ÈÇæêÉ ÇäÕñðæá ÇäâÇÙÏêñ + äêï×òÈîÙ 'ÃæÇ ÈÇæêÉ A.<br />'. </para> <caution> <simpara> - áÇ PHP 3 æáÇ PHP 4 ÊõäÇÏí ÈÇäíÇÊ ÇáÕøöäÝ ÇáÞÇÚÏíø - ÂáíÇ ÇäØáÇÞÇð ãä ÈÇäíÉ ÕöäÝ ãõÔÊøóÞ. ÊÞÚ Úáì ÚÇÊöÞß - ãÓÄæáíÉ äÔÑ äÏÇÁ ÇáÈÇäíÇÊ - ÃÝÞíÇð ÍíË íáíÞ ÇáãÞÇã. + äÇ PHP 3 èäÇ PHP 4 ÊïæÇÏê ÈÇæêÇÊ ÇäÕñðæá ÇäâÇÙÏêñ + ÂäêÇ Çæ×äÇâÇë åæ ÈÇæêÉ Õðæá åïÔÊñîâ. ÊâÙ Ùäé ÙÇÊðâã + åÓÄèäêÉ æÔÑ æÏÇÁ ÇäÈÇæêÇÊ + ÃáâêÇë ÍêË êäêâ ÇäåâÇå. </simpara> </caution> <note> <simpara> - áíÓÊ åäÇß åÇÏãÇÊ "destructors" Ýí PHP 3 Ãæ PHP 4. íãßäß ÇÓÊÎÏÇã - <function>register_shutdown_function</function> ÈÏáÇ ãä Ðáß - ÈÛÑÖ ãõÍÇßÇÉ ãõÚÙóã ÊÃËíÑÇÊ ÇáåÇÏãÇÊ. + äêÓÊ çæÇã çÇÏåÇÊ "destructors" áê PHP 3 Ãè PHP 4. êåãæã ÇÓÊÎÏÇå + <function>register_shutdown_function</function> ÈÏäÇ åæ Ðäã + ÈÚÑÖ åïÍÇãÇÉ åïÙØîå ÊÃËêÑÇÊ ÇäçÇÏåÇÊ. </simpara> </note> <para> - ÇáåÇÏãÇÊ åí ÏæÇá ÊÊã ãäÇÏÇÊåÇ ÂáíÇ - ÚäÏ ÊÍØíã ßÇÆä ãÇ¡ ÅãÇ ÈæÇÓØÉ <function>unset</function> - Ãæ ÈÈÓÇØÉ ÈÇáÎÑæÌ ãä ÇáãÏì "scope". áíÓÊ åäÇß åÇÏãÇÊ - Ýí PHP. + ÇäçÇÏåÇÊ çê ÏèÇä ÊÊå åæÇÏÇÊçÇ ÂäêÇ + ÙæÏ ÊÍ×êå ãÇÆæ åǬ ÅåÇ ÈèÇÓ×É <function>unset</function> + Ãè ÈÈÓÇ×É ÈÇäÎÑèÌ åæ ÇäåÏé "scope". äêÓÊ çæÇã çÇÏåÇÊ + áê PHP. </para> </sect1> @@ -504,15 +504,15 @@ <caution> <simpara> - The following is valid for PHP 4 and later only. + åÇ êÃÊê êÕäÍ áâ× äàPHP 4 èåÇ êäêçÇ. </simpara> </caution> <para> - Sometimes it is useful to refer to functions and variables - in base classes or to refer to functions in classes that - have not yet any instances. The :: operator is being used - for this. + åæ ÇäåáêÏ ÃÍêÇæÇë ÇäÅÍÇäÉ Åäé ÏèÇä èåïÊÚêñðÑÇÊ + áê ÇäÃÕæÇá ÇäâÇÙÏêñÉ Ãè ÇäÅÍÇäÉ Åäé ÏèÇä áê ÃÕæÇá + äÇ ÊÊèáñÑ ÈÙÏ Ùäé Ãêñ åËêä. êïÓòÊîÎòÏîå åïÔÚñðä :: + äçÐÇ ÇäÚÑÖ. </para> <informalexample> @@ -521,28 +521,28 @@ <?php class A { function example() { - echo "I am the original function A::example().<br />\n"; + echo "ÃæÇ ÇäÏñÇäÉ ÇäÃÕäêñÉ A::example().<br />\n"; } } class B extends A { function example() { - echo "I am the redefined function B::example().<br />\n"; + echo "ÃæÇ ÇäÏñÇäÉ B::example()¬ ÇäåïÙÇÏ ÊÙÑêáçÇ.<br />\n"; A::example(); } } -// there is no object of class A. -// this will print -// I am the original function A::example().<br /> +// äêÓ çæÇã ãÇÆæ åæ ÇäÕñðæá A. +// ÓêÄÏê çÐÇ Åäé ×ÈÇÙÉ +// ÃæÇ ÇäÏñÇäÉ ÇäÃÕäêñîÉ A::example().<br /> A::example(); -// create an object of class B. +// ÅæÔÇÁ ãÇÆæ åæ ÇäÕñðæá B. $b = new B; -// this will print -// I am the redefined function B::example().<br /> -// I am the original function A::example().<br /> +// ÓêÄÏê çÐÇ Åäé ×ÈÇÙÉ +// ÃæÇ ÇäÏñÇäÉ B::example()¬ ÇäåïÙÇÏ ÊÙÑêáçÇ.<br /> +// ÃæÇ ÇäÏñÇäÉ ÇäÃÕäêñÉ A::example().<br /> $b->example(); ?> ]]> @@ -550,36 +550,36 @@ </informalexample> <para> - The above example calls the function example() in - class A, but there is no object of class A, so that - we cannot write $a->example() or similar. Instead we - call example() as a 'class function', that is, as a - function of the class itself, not any object of that - class. + êæÇÏê ÇäåËÇä ÇäÙäèêñ ÇäÏñÇäÉî example() áê + ÇäÕñðæá A äãæ äêÓ çæÇã ãÇÆæ åæ ÇäÕñðæá A¬ äÐäã + êÊÙÐÑ ÙäêæÇ ãÊÇÈÉ $a->example() Ãè åÇ êÔÈç ÈÐäã. ÈÏäÇ åæ Ðä㬠+ ææÇÏê example() Ùäé ÃæñçÇ 'ÏÇäÉ Õðæá - class function'¬ Ãê¬ + ãÏÇäÉ åæ ÇäÕñðæá æáÓç èäêÓ Ãê ãÇÆæ åæ çÐÇ + ÇäÕñðæá. </para> <para> - There are class functions, but there are no class variables. - In fact, there is no object at all at the time of the call. - Thus, a class function may not use any object variables (but - it can use local and global variables), and it may no use - <varname>$this</varname> at all. + ÊèÌÏ ÏèÇä ääÃÕæÇá "class functions" äãæ äÇ ÊèÌÏ åïÊÚêñðÑÇÊ ääÃÕæÇá "class variables". + áê ÇäèÇâÙ¬ äêÓÊ çæÇã ãÇÆæ ÈÊÇÊÇë¬ ÎäÇä èçäÉ ÇäåæÇÏÇÉ. + ÈÇäÊñÇäê¬ äÇ ÊÓÊ×êÙ ÏÇäÉ Õðæá ÇÓÊÎÏÇå ÃêñÉ åïÊÚêñðÑÇÊ ãÇÆæ "object variables" (äãæ + ÊÓÊ×êÙ ÇÓÊÎÏÇå åïÊÚêñðÑÇÊ åÍäêñÉ èÔÇåäÉ)¬ èäêÓ ÈÇåãÇæçÇ ÇÓÊÎÏÇå + <varname>$this</varname> ÈÊÇÊÇë. </para> <para> - In the above example, class B redefines the function example(). - The original definition in class A is shadowed - and no longer available, unless you are referring specifically - to the implementation of example() in class A using the - ::-operator. Write A::example() to do this (in fact, you - should be writing parent::example(), as shown in the next - section). + áê ÇäåËÇä ÇäÙäèêñ¬ êâèå ÇäÕñðæá B ÈÅÙÇÏÉ ÊÙÑêá ÇäÏñÇäÉ example(). + ÇäÊñÙÑêá ÇäÃÕäêñ áê ÇäÕñðæá A åïØîäñîä + èäå êÙïÏ åïÊÇÍÇë ÅäÇ ÅÐÇ ãæÊ ÈÕÏÏ ÇäÅÍÇäÉ ÎÕêÕÇ + Åäé ÅÏÑÇÌ "implementation" example() áê ÇäÕñðæá A ÈÇÓÊÎÏÇå + åïÔÚñðä ::. ÇãÊÈ A::example() ääâêÇå ÈçÐÇ (áê ÇäèÇâÙ¬ + êÊèÌÈ Ùäêã ãÊÇÈÉ parent::example()¬ åËäåÇ çè åïèÖñîÍ áê Çäåâ×Ù + ÇäÂÊêñ). </para> <para> - In this context, there is a current object and it may have object - variables. Thus, when used from WITHIN an object function, you may use - <varname>$this</varname> and object variables. + áê çÐÇ ÇäÓñðêÇ⬠çæÇã ãÇÆæ ÍÇäêñ èäÑÈåÇ äÏêç åïÊÚêñðÑÇÊ ãÇÆæêñÉ "object + variables". èçãÐǬ áÙæÏ ÇÓÊÎÏÇåç Çæ×äÇâÇ åæ ÏÇÎä ÏÇäÉ ãÇÆæêñÉ "object function"¬ êåãæã ÇÓÊÎÏÇå + <varname>$this</varname> èÇäåïÊÚêñðÑÇÊ ÇäãÇÆæêñÉ. </para> </sect1> @@ -588,22 +588,22 @@ <title><literal>parent</literal></title> <para> - You may find yourself writing code that refers to - variables and functions in base classes. This is - particularly true if your derived class is a refinement - or specialisation of code in your base class. + êåãæ Ãæ ÊÌÏ æáÓã ÈÕÏÏ ãÊÇÈÉ ÔêáÑÉ ÊïÍðêäï Åäé + åïÊÚêñðÑÇÊ èÏèÇä áê ÇäÃÕæÇá ÇäâÇÙÏêñÉ. êÕÏïâ çÐÇ + ÎÇÕÉ ÅÐÇ ãÇæ Õðæáã ÇäåïÔÊñîâ ÙÈÇÑÉ Ùæ ÊÕáêÉ + Ãè ÊÎÕêÕ ÔêáÑÉ áê Õðæáðã ÇäâÇÙÏêñ. </para> <para> - Instead of using the literal name of the base class in your - code, you should be using the special name - <literal>parent</literal>, which refers to the name of your - base class as given in the <literal>extends</literal> - declaration of your class. By doing this, you avoid using the - name of your base class in more than one place. Should - your inheritance tree change during implementation, the - change is easily made by simply changing the - <literal>extends</literal> declaration of your class. + ÈÏäÇ åæ ÇÓÊÎÏÇå ÇäÅÓå ÇäÍÑáêñ ääÕðæá ÇäâÇÙÏêñ áê + ÔêáÑÊ㬠êÊèÌñîÈ Ùäêã ÇÓÊÎÏÇå ÇäÅÓå ÇäÎÇÕ + <literal>parent</literal> ÇäÐñê êïÍêä Åäé ÅÓå + Õðæáðã ÇäâÇÙÏêñ åËäåÇ çè åïÙò×îé áê ÊÕÑêÍ <literal>extends</literal> + ÇäÎÇÕ ÈÕðæáã. ÈÇäâêÇå ÈçÐǬ Êãèæ ÈÕÏÏ ÊÌæñïÈ ÇÓÊÎÏÇå + ÅÓå Õðæáã ÇäâÇÙÏêñ áê ÃãËÑ åæ åãÇæ. Åæ ×Ñà + èÊÚêñîÑÊ ÔÌÑÉ ÇäèÑÇËÉ "inheritance tree" áê ÇËæÇÁ ÇäÅÏÑÇÌ "implementation"¬ áÅæñ + ÇäÊñÚêêÑ êÍÏË ÈÓçèäÉ åæ ÎäÇä åÌÑÏ ÊÚêêÑ + ÊÕÑêÍ <literal>extends</literal> ÇäÎÇÕ ÈÕðæáã. </para> <informalexample> @@ -612,20 +612,20 @@ <?php class A { function example() { - echo "I am A::example() and provide basic functionality.<br />\n"; + echo "ÃæÇ A::example() èÃèáñðÑ èØÇÆáêÉ âÇÙÏêñÉ.<br />\n"; } } class B extends A { function example() { - echo "I am B::example() and provide additional functionality.<br />\n"; + echo "ÃæÇ B::example() èÃèáñðÑ èØÇÆáêÉ ÅÖÇáêñÉ.<br />\n"; parent::example(); } } $b = new B; -// This will call B::example(), which will in turn call A::example(). +// ÓêïæÇÏê çÐÇ B::example() ÇäÐñê ÈÏèÑç ÓêïæÇÏê A::example(). $b->example(); ?> ]]> @@ -634,44 +634,44 @@ </sect1> <sect1 id="language.oop.serialization"> - <title>Serializing objects - objects in sessions</title> + <title>ÓîäòÓîäîÉ "Serializing" ÇäãÇÆæÇÊ - ÇäãÇÆæÇÊ áê ÇäÌäÓÇÊ</title> <note> <simpara> - In PHP 3, objects will lose their class association - throughout the process of serialization and unserialization. - The resulting variable is of type object, but has no class - and no methods, thus it is pretty useless (it has become - just like an array with a funny syntax). + áê PHP 3¬ ÊîáòâðÏï ÇäãÇÆæÇÊï ÊÔÇÑïãçÇ ÇäÕñðæáêñ "class association" + Ùäé ÇåÊÏÇÏ ÓêÑèÑÉ ÇäÓñäòÓîäîÉ "serialization" èÅÒÇäÉ ÇäÓñäòÓîäîÉ "unserialization". + ÇäåïÊÚêñðÑÉ ÇäÍÇÕðäÉ çê åæ æèÙ ÇäãÇÆæÇÊ äãæñçÇ äÇ ÊÊèáîÑ Ùäé Õðæá + èäÇ Ùäé åæÇçÌ "methods"¬ èçãÐÇ ÃÕÈÍ ÇäÃåÑ Ïèæ áÇÆÏÉ ÊïÐãîÑ (ÃÕÈÍ + ãåïÌÑñîÏ åÕáèáÉ ÐÇÊ ÕðêÇÚÉ ÚÑêÈÉ). </simpara> </note> <caution> <simpara> - The following information is valid for PHP 4 only. + ÇäåÙäèåÇÊ ÇäÊñÇäêñÉ ÊÕäïÍ åÙ PHP 4 áâ×. </simpara> </caution> <para> - <function>serialize</function> returns a string containing a - byte-stream representation of any value that can be stored in - PHP. <function>unserialize</function> can use this string to - recreate the original variable values. Using serialize to - save an object will save all variables in an object. The - functions in an object will not be saved, only the name of - the class. + ÊïÑÌðÙï <function>serialize</function> ÓðäÓðäÉ æÕêñîÉ "string" ÊÊÖåæ + ÊåËêäÇ Ïáâê-ÇäÈÇêÊÇÊ "byte-stream representation" äÃêñÉ âêåÉ êåãæ ÍáØçÇ áê + PHP. êåãæ äà<function>unserialize</function> ÇÓÊÎÏÇå çÐç ÇäÓñÄäÓäÉ ÇäæñÕêñÉ + äÅÙÇÏÉ ÇæÔÇÁ âêå ÇäåïÊÚêñðÑÉ ÇäÃÕäêñîÉ. Åæñ ÇÓÊÎÏÇå serialize ÈÚÑÖ + ÍáØ ãÇÆæ åÇ êÄÏê Åäé ÍáØ ãÇáÉ ÇäåïÊÚêñðÑÇÊ áê ãÇÆæí åÇ. äæ + êÊå ÍáØ ÇäÏñèÇä ÇäåÊèÇÌÏÉ áê ãÇÆæ åǬ áâ× ÅÓå + ÇäÕñðæá. </para> <para> - In order to be able to <function>unserialize</function> an object, the - class of that object needs to be defined. That is, if you have an object - <varname>$a</varname> of class A on page1.php and serialize this, you'll - get a string that refers to class A and contains all values of variabled - contained in <varname>$a</varname>. If you want to be able to unserialize - this on page2.php, recreating <varname>$a</varname> of class A, the - definition of class A must be present in page2.php. This can be done for - example by storing the class definition of class A in an include file and - including this file in both page1.php and page2.php. + ÈÚÑÖ ÇäÊïåãñïæ åæ ÅÒÇäÉ ÓîäòÓîäîÉ "<function>unserialize</function>" ãÇÆæí åǬ êÍÊÇÌ + Õðæá çÐÇ ÇäãÇÆæ äÃæ êïÙÑñîá. ÈåÙæé Ãæñç ÅÐÇ ãÇæ äÏêã ãÇÆæì åÇ + <varname>$a</varname> åæ ÇäÕñðæá A Ùäé safha1.php èâïåÊî ÈÓîäòÓîäîÊðçð "serialize"¬ áÅæñîã + ÓÊÍÕïä Ùäé ÓðäòÓðäîÉ æÕêñîÉ "string" ÊïÍêäï Åäé ÇäÕñðæá A èÊÍÊèê ãÇáÉ âêå ÇäåïÊÚêñðÑÇÊ + ÇäåïÍÊèÇÉ áê <varname>$a</varname>. ÅÐÇ ÑÚÈÊ áê Ãæ ÊÊåãæ åæ ÅÒÇäÉ ÓîäòÓîäîÉ "unserialize" + çÐÇ Ùäé safha2.php¬ ÈÅÙÇÏÉ ÇæÔÇÁ <varname>$a</varname> åæ ÇäÕñðæá A¬ áÅæñ + ÊÙÑêá ÇäÕñðæá A êÌÈ Ãæ êãèæ ÍÇÖÑÇ áê safha2.php. êåãæ ÇäâêÇå ÈçÐǬ Ùäé ÓÈêä + ÇäåËÇä¬ åæ ÎäÇä ÍáØ ÊÙÑêá ÇäÕñðæá ÇäÎÇÕ ÈÇäÕñðæá A áê åäá ÊÖåêæêñ "include file" + èÊÖåêæ çÐÇ Çäåäá áê ãäñ åæ safha1.php è safha2.php. </para> <informalexample> @@ -688,26 +688,26 @@ } } -// page1.php: +// safha1.php: include("classa.inc"); $a = new A; $s = serialize($a); - // store $s somewhere where page2.php can find it. + // ÍáØ $s áê åãÇæ åÇ ÍêË êåãæ äà safha2.php ÅêÌÇÏç. $fp = fopen("store", "w"); fwrite($fp, $s); fclose($fp); -// page2.php: +// safha2.php: - // this is needed for the unserialize to work properly. + // çæÇã ÍÇÌÉ äçÐÇ ÍÊé ÊÙåä ÅÒÇäÉ ÇäÓîäòÓîäîÉ ÈÔãä ÕÍêÍ. include("classa.inc"); $s = implode("", @file("store")); $a = unserialize($s); - // now use the function show_one() of the $a object. + // ÇäÂæ¬ ÇÓÊÎÏå ÇäÏñÇäÉ show_one() ÇäÎÇÕÉ ÈÇäãÇÆðæ $a . $a->show_one(); ?> ]]> @@ -715,72 +715,72 @@ </informalexample> <para> - If you are using sessions and use <function>session_register</function> - to register objects, these objects are serialized automatically - at the end of each PHP page, and are unserialized automatically on - each of the following pages. This basically means that these objects - can show up on any of your pages once they become part of your - session. + ÅÐÇ ãïæÊ ÈÕÏÏ ÇÓÊÎÏÇå ÇäÌäÓÇÊ èãÐÇ <function>session_register</function> + ÈÚÑÖ ÊÓÌêä ÇäãÇÆðæÇʬ áÅæñç ÊÊå ÓîäòÓîäîÉ çÐç ÇäãÇÆðæÇʬ ÈÕèÑÉ Âäêñîɬ + ÙæÏ æçÇêÉ ãäñ ÕáÍÉ PHP èãÐäã ÊÊå ÅÒÇäÉ ÓîäòÓîäîÊçǬ ÈÕèÑÉ Âäêñîɬ + ÙæÏ ãäñ åæ ÇäÕñäÅÍÇÊ ÇäÊñÇäêñîÉ. êÙæê çÐǬ ÌèçÑêÇë¬ Ãæñ çÐç ÇäãÇÆæÇÊ + êåãæçÇ ÇäØñïçèÑ áê Ãêñ åæ ÕáÍÇÊã ÈåÌÑÏ Ãæ ÊïÕÈÍ ÌÒÁÇë åæ + ÌäÓÊã. </para> <para> - It is strongly recommended that you include the class - definitions of all such registered objects on all of your - pages, even if you do not actually use these classes on all - of your pages. If you don't and an object is being - unserialized without its class definition being present, it - will lose its class association and become an object of class - <literal>stdClass</literal> without any functions available - at all, that is, it will become quite useless. + êïèÕîé ÈâèÉ Ãæ Êâèå ÈÊÖåêæ ÇäÊñîÙÑêáÇÊ + ÇäÕñðæáêñîÉ ÇäÎÇÕÉ ÈåËä çÐç ÇäãÇÆæÇÊ ÇäåïÓÌñîäɬ ãÇáÉë¬ Ùäé ãäñ + ÕáÍÇÊã ÍÊé èÅæ äå Êãæ ÈÕÏÏ ÇÓÊÎÏÇå çÐç ÇäÃÕæÇᬠÍÇäêǬ Ùäé ãÇáÉ + ÕáÍÇÊã. ÅÐÇ äå Êâïå ÈÐäã èÍÏË Ãæ ÃÒêäÊ ÓîäòÓîäîÉ ãÇÆæ + åæ Ïèæ ÍÖèÑ ÊÙÑêáç ÇäÕñðæáêñ¬ áÅæñ + ÓêáâðÏ ÊÔÇÑãç ÇäÕñðæáêñ "class association" èêïÕÈͬ ãïäñðêÇë¬ ãÇÆæÇë åæ ÇäÕñðæá + <literal>stdClass</literal> åæ Ïèæ ÃêñÉ ÏèÇä åïÊÇÍÉ + ååÇ êÙæê Ãæñç ÓêÕÈÍ ÚêÑ åïáêÏí ÈÊÇÊÇë. </para> <para> - So if in the example above <varname>$a</varname> became part of a session - by running <literal>session_register("a")</literal>, you should include the - file <literal>classa.inc</literal> on all of your pages, not only page1.php - and page2.php. + ÈÇäÊñÇäê¬ ÅÐÇ ÃÕÈÍ <varname>$a</varname>¬ áê ÇäåËÇä ÇäÙïäèêñ¬ ÌÒÁÇë åæ ÌäÓÉí åÇ + åæ ÎäÇä ÊÔÚêä <literal>session_register("a")</literal>¬ áÅæñîç êÊèÌñîÈ Ùäêã ÊÖåêæ + Çäåäá <literal>classa.inc</literal> ÈãÇáÉ ÕáÍÇÊã èäêÓ áâ× safha1.php + è safha2.php. </para> </sect1> <sect1 id="language.oop.magic-functions"> - <title>The magic functions <literal>__sleep</literal> and <literal>__wakeup</literal></title> + <title>ÇäÏñèÇä ÇäÓñðÍÑêñîÉ <literal>__sleep</literal> è <literal>__wakeup</literal></title> <para> - <function>serialize</function> checks if your class has a function with - the magic name <literal>__sleep</literal>. If so, that function is - being run prior to any serialization. It can clean up the object - and is supposed to return an array with the names of all variables - of that object that should be serialized. + ÊÊáâñîÏ <function>serialize</function> ÅÐÇ ãÇæ Õðæáã êÊèáñîÑ Ùäé Ùäé ÏÇäÉ ÊåÊäã + ÇäÅÓå ÇäÓñðÍÑêñ <literal>__sleep</literal>. Åæ ãÇæ ÇäÃåÑ ãÐä㬠áÅæñîç êÊå ÊÔÚêä çÐç ÇäÏñÇäÉ + âÈä ÃêñÉ ÙåäêÉ ÓîäòÓîäîÉ "serialization". êåãæçÇ ÊæØêá ÇäãÇÆæ + èêïáÊîÑîÖ ÃæñîçÇ ÓÊïÑÌðÙï åÕáèáÉë ÈÃÓåÇÁ ãÇáÉ åïÊÚêñðÑÇÊ + çÐÇ ÇäãÇÆæ ÇäåïÊèÌñðÈ ÓîäòÓîäîÊçÇ. </para> <para> - The intended use of <literal>__sleep</literal> is to close any - database connections that object may have, committing pending - data or perform similar cleanup tasks. Also, the function is - useful if you have very large objects which need not be - saved completely. + ÇäÇÓÊÎÏÇå ÇäåïÈòÊîÚîé åæ <literal>__sleep</literal> çè ÅÚäÇâ ÃêñîÉ + ÇÊÕÇäÇÊ ÈÇäâèÇÙÏ ÇäÈêÇæêñÉ êåãæ Ãæ êåÊäãçÇ çÐÇ ÇäãÇÆæ¬ ÊÙçñïÏ ÇäÈêÇæÇÊ + ÇäÙÇäðâîÉ Ãè ÃÏÇÁ åçÇå ÊæØêá ååÇËäÉ. ãÐä㬠áÅæñ ÇäÏñÇäÉ Êãèæ + åïáêÏÉ ÅÐÇ ãæÊ ÊåÊäã ãÇÆæÇÊ ãÈêÑÉ ÌÏÇë äêÓÊ ÈÍÇÌÉ Ãæ + ÊïÍáîØî ÈÊåÇåçÇ. </para> <para> - Conversely, <function>unserialize</function> checks for the - presence of a function with the magic name - <literal>__wakeup</literal>. If present, this function can - reconstruct any resources that object may have. + ÙãÓêÇë¬ ÊÊáâñîÏ <function>unserialize</function> + èÌèÏ ÏÇäÉ ÊåÊäã ÇäÅÓå ÇäÓñðÍÑêñ + <literal>__wakeup</literal>. Åæ èïÌðϬ áÅæñ çÐç ÇäÏñÇäÉ êãèæ ÈÇåãÇæçÇ + ÅÙÇÏÉ ÈæÇÁ ÃêñÉ åèÇÑÏ êåÊäãçÇ çÐÇ ÇäãÇÆæ. </para> <para> - The intended use of <literal>__wakeup</literal> is to - reestablish any database connections that may have been lost - during serialization and perform other reinitialization - tasks. + ÇäÇÓÊÎÏÇå ÇäåïÈÊîÚîé åæ <literal>__wakeup</literal> çè + ÅÙÇÏÉ ÊÃÓêÓ ÃêñÉ ÇÊÕÇäÇÊ ÈÇäâèÇÙÏ ÇäÈêÇæêñÉ êåãæ ÃæñçÇ áïâðÏîÊ + áê ÃËæÇÁ ÙåäêÉ ÇäÓîäòÓîäîÉ èÊÃÏêÉ åçÇå ÃÎÑé + äÅÒÇäÉ ÇäÓîäòÓîäîÉ. </para> </sect1> <sect1 id="language.oop.newref"> - <title>References inside the constructor</title> + <title>ÇäÅÍÇäÇÊ Öåæ ÇäÈÇæêÉ "References inside the constructor"</title> <para> - Creating references within the constructor can lead to confusing - results. This tutorial-like section helps you to avoid problems. + êåãæ äÇæÔÇÁ ÇäÅÍÇäÇÊ Öåæ ÇäÈÇæêÉ Ãæ êÄÏê Åäé ÊÔèêÔ + ÇäæñîÊÇÆÌ. çÐÇ ÇäáÕä¬ ÇäÔñîÈêç ÈÇäÏñÑÓ¬ êÓÇÙÏã Ùäé ÊáÇÏê ÇäåÔÇãä. <informalexample> <programlisting role="php"> @@ -788,12 +788,12 @@ <?php class Foo { function Foo($name) { - // create a reference inside the global array $globalref + // ÅæÔÇÁ ÅÍÇäÉ Öåæ ÇäåÕáèáÉ ÇäÔñîÇåðäÉ $globalref global $globalref; $globalref[] = &$this; - // set name to passed value + // ÊÙêêæ ÅÓå äÃÌä ÇäâêåÉ ÇäåïåîÑñîÑîÉ $this->setName($name); - // and put it out + // èÇÓÊÎÑÇÌçÇ $this->echoName(); } @@ -812,92 +812,92 @@ </para> <para> - Let us check out if there is a difference between - <varname>$bar1</varname> which has been created using - the copy <literal>=</literal> operator and - <varname>$bar2</varname> which has been created using - the reference <literal>=&</literal> operator... + äæÊáâñîÏ ÇäÂæ Åæ ãÇæ çæÇã áÑâ Èêæ + <varname>$bar1</varname> ÇäÊñê ÃïæÔðÆîÊ ÈÇÓÊÎÏÇå + åïÔÚñðä ÇäæñîÓÎ <literal>=</literal> + è <varname>$bar2</varname> ÇäÊñê ÃïæÔðÆîÊ ÈÇÓÊÎÏÇå + åïÔÚñðä ÇäÅÍÇäÉ <literal>=&</literal> ... <informalexample> <programlisting role="php"> <![CDATA[ <?php -$bar1 = new Foo('set in constructor'); +$bar1 = new Foo('åïÙêñîæ áê ÇäÈÇæêÉ'); $bar1->echoName(); $globalref[0]->echoName(); -/* output: -set in constructor -set in constructor -set in constructor */ +/* ÇäåïÎòÑîÌ: +åïÙêñîæ áê ÇäÈÇæêÉ +åïÙêñîæ áê ÇäÈÇæêÉ +åïÙêñîæ áê ÇäÈÇæêÉ */ -$bar2 =& new Foo('set in constructor'); +$bar2 =& new Foo('åïÙêñîæ áê ÇäÈÇæêÉ'); $bar2->echoName(); $globalref[1]->echoName(); -/* output: -set in constructor -set in constructor -set in constructor */ +/* ÇäåïÎòÑîÌ: +åïÙêñîæ áê ÇäÈÇæêÉ +åïÙêñîæ áê ÇäÈÇæêÉ +åïÙêñîæ áê ÇäÈÇæêÉ */ ?> ]]> </programlisting> </informalexample> </para> <para> - Apparently there is no difference, but in fact there is a - very significant one: <varname>$bar1</varname> and - <varname>$globalref[0]</varname> are _NOT_ referenced, they - are NOT the same variable. This is because "new" does not - return a reference by default, instead it returns a copy. + ØÇçÑêÇë¬ äêÓ çæÇã åæ áÑâ äãæ¬ áê ÇäèÇâÙ¬ çæÇã + áÑâ ÌÏñ åïÙÊÈîÑ: <varname>$bar1</varname> è + <varname>$globalref[0]</varname> _ÚêÑ_ åïÍÇäîÉ "referenced"¬ ÇäÃåÑ + äÇ êÊÙäñîâ ÈæáÓ ÇäåïÊÚêñðÑÉ. çÐÇ äÃæñ "new" äÇ + ÊïÑÌðÙï ÅÍÇäɬ ÈÔãä ÇáÊÑÇÖêñ¬ ÈÏäÇ åæ Ðä㬠ÊïÑÌðÙ æïÓÎîÉ. <note> <simpara> - There is no performance loss (since PHP 4 and up use reference - counting) returning copies instead of references. On the - contrary it is most often better to simply work with copies - instead of references, because creating references takes some - time where creating copies virtually takes no time (unless none - of them is a large array or object and one of them gets changed - and the other(s) one(s) subsequently, then it would be wise to - use references to change them all concurrently). + äêÓ çæÇã åæ áâÏÇæ áê ÇäÃÏÇÁ "performance loss" (ÈÇÙÊÈÇÑ Ãæñ PHP 4¬ èÃÍÏˬ ÊÓÊÎÏå ÙÏñ ÇäÅÍÇäÇÊ "reference + counting") åïÑòÌðÙîÉë æïÓÎÇë ÈÏäÇ åæ ÇäÅÍÇäÇÊ. Ùäé + ÇäÙãÓ¬ åæ ÇäÃáÖä ÈãËêÑ ÇäÙåä ÈÈÓÇ×É ÈæÓÎ + ÈÏäÇ åæ ÇäÅÍÇäÇÊ äÃæñ ÅæÔÇÁ ÇäÅÍÇäÇÊ êÍÊÇÌ äÈÙÖ + ÇäèâÊ ÍêË Ãæñ ÅæÔÇÁ æïÓÎ äÇ êÃÎЬ ØÇçÑêÇë¬ Ãêñ èâÊ (ÅäÇ ÅÐÇ + äå Êãæ ÅÍÏÇçÇ ÙÈÇÑÉ Ùæ åÕáèáÉ Ãè ãÇÆæÇ ãÈêÑÇë èÊÚêñîÑÊ ÅÍÏÇçÇ + áêåÇ ÊÚêñîÑÊ ÇäÃÎÑé(ÇäÃÎÑêÇÊ) ÊðÈÇÙÇë¬ ÍêæçÇ êãèæ åæ ÇäÃÙâä + ÇÓÊÎÏÇå ÇäÅÍÇäÇÊ ÈÚÑÖ ÊÚêêÑçÇ ãäñçǬ ÈÔãä Âæêñ). </simpara> </note> - To prove what is written above let us watch the code below. + äÊèÖêÍ åÇ ãïÊðÈî áê ÇäÃÙäé¬ ääæØÑ Åäé ÇäÔñðêáÑÉ áê ÇäÃÓáä. <informalexample> <programlisting role="php"> <![CDATA[ <?php -// now we will change the name. what do you expect? -// you could expect that both $bar1 and $globalref[0] change their names... -$bar1->setName('set from outside'); +// ÇäÂæ¬ ÓæïÚêñðÑ ÇäÅÓå. åÇÐÇ ÊÊèâñîÙ¿ +// êåãæ Ãæ ÊÊèâñîÙ Ãæñ ãäÇ åæ $bar1 è $globalref[0] ÓÊïÚêñðÑ ÃÓåÇÁçÇ... +$bar1->setName('åïÙêñîæ Åæ×äÇâÇ åæ ÇäÎÇÑÌ'); -// as mentioned before this is not the case. +// åËäåÇ ÃïÔêÑ Åäêç åæ âÈä¬ äêÓ ÇäÃåÑ ãÐäã ÇäÂæ. $bar1->echoName(); $globalref[0]->echoName(); -/* output: -set from outside -set in constructor */ +/* ÇäåïÎòÑîÌ: +åïÙêñîæ Åæ×äÇâÇ åæ ÇäÎÇÑÌ +åïÙêñîæ áê ÇäÈÇæêÉ */ -// let us see what is different with $bar2 and $globalref[1] -$bar2->setName('set from outside'); +// äæÑé ÇäÂæ åÇ çè åïÎÊäá Èêæ $bar2 è $globalref[1] +$bar2->setName('åïÙêñîæ Åæ×äÇâÇ åæ ÇäÎÇÑÌ'); -// luckily they are not only equal, they are the same variable -// thus $bar2->name and $globalref[1]->name are the same too +// äÍÓæ ÇäÍØ¬ çê äêÓÊ áâ× åÊÓÇèêñÉ Èä èãÐäã çê ÙÈÇÑÉ Ùæ æáÓ ÇäåïÊÚêñðÑÉ. +// èçãÐǬ áÅæñ $bar2->name è $globalref[1]->name çê æáÓçÇ ÃêÖÇë $bar2->echoName(); $globalref[1]->echoName(); -/* output: -set from outside -set from outside */ +/* ÇäåïÎòÑîÌ: +åïÙêñîæ Åæ×äÇâÇ åæ ÇäÎÇÑÌ +åïÙêñîæ Åæ×äÇâÇ åæ ÇäÎÇÑÌ */ ?> ]]> </programlisting> </informalexample> </para> <para> - Another final example, try to understand it. + åËÇä ÃÎêÑ ÂÎѬ ÍÇèä Êáçñåç. <informalexample> <programlisting role="php"> @@ -906,7 +906,7 @@ class A { function A($i) { $this->value = $i; - // try to figure out why we do not need a reference here + // ÍÇèä åÙÑáÉ äåÇÐÇ äÇ æÍÊÇÌ Åäé ÅÍÇäÉ çæÇ $this->b = new B($this); } @@ -930,8 +930,8 @@ } } -// try to understand why using a simple copy here would yield -// in an undesired result in the *-marked line +// ÍÇèä áçå äåÇÐÇ êåãæ äÇÓÊÎÏÇå æÓÎÉ ÈÓê×É çæÇ Ãæ êÄÏê +// Åäé æÊêÌÉ ÚêÑ åïÍÈÐñîÉ áê ÇäÓñ×Ñ ÇäåïÙäñîå Èà * $a =& new A(10); $a->createRef(); @@ -949,7 +949,7 @@ ]]> </programlisting> <para> - This example will output: + ÓêÓÊÕÏÑ ÇäåËÇä ÇäÊñÇäêñ ÇäåïÎòÑîÌ: </para> <screen> <![CDATA[ @@ -966,17 +966,17 @@ </sect1> <sect1 id="language.oop.object-comparison-php4"> - <title>Comparing objects in PHP 4</title> + <title>åïâÇÑæÉ ÇäãÇÆæÇÊ áê PHP 4</title> <para> - In PHP 4, objects are compared in a very simple manner, namely: Two object - instances are equal if they have the same attributes and values, and are - instances of the same class. Similar rules are applied when comparing two - objects using the identity operator (<literal>===</literal>). + áê PHP 4¬ ÊÊå ÇäåïâÇÑæÉ Èêæ ÇäãÇÆæÇÊ È×ÑêâÉ ÌÏ ÈÓê×ɬ çê: êãèæ åËêäÇ ãÇÆæêæ + "object instances" åïÊÓÇèêñêæ ÅÐÇ ãÇæÇ êåÊäãÇæ æáÓ ÇäÓñðåÇÊ èÇäâðêå èãÇæÇ + åËêäÇæ åæ æáÓ ÇäÕñðæá. Êæ×Èâ æáÓ ÇäâèÇÙÏ ÙæÏ ÇäåâÇÑæÉ Èêæ + ÇäãÇÆæÇÊ ÙæÏ ÇÓÊÎÏÇå åïÔÚñðä ÇäçèêÉ "identity operator" (<literal>===</literal>). </para> <para> - If we were to execute the code in the example below: + ÅÐÇ ãæÇ ÈÕÏÏ ÊæáêÐ ÇäÔñðêáÑÉ áê ÇäåËÇä ÇäÓñïäêñ: <example> - <title>Example of object comparison in PHP 4</title> + <title>åËÇä Ùæ ÇäåâÇÑæÉ Èêæ ÇäãÇÆæÇÊ áê PHP 4</title> <programlisting role='php'> <![CDATA[ <?php @@ -1020,13 +1020,13 @@ $r = new SwitchableFlag(); -echo "Compare instances created with the same parameters\n"; +echo "åïâÇÑæÉ åËêäÇÊ åïæÔîÃîÉ ÈæáÓ ÇäåîÙòäîåîÇÊ\n"; compareObjects($o, $q); -echo "\nCompare instances created with different parameters\n"; +echo "\nåïâÇÑæÉ åîËêäÇÊ åïæÔîÃîÉ ÈåîÙòäîåîÇÊ åïÎÊäáÉ\n"; compareObjects($o, $p); -echo "\nCompare an instance of a parent class with one from a subclass\n"; +echo "\nåâÇÑæÉ åËêä åæ Õðæá èÇäðÏ åÙ åËêä åæ Õðæá áÑÙêñ\n"; compareObjects($o, $r); ?> ]]> @@ -1034,34 +1034,34 @@ </example> We will see: <screen> -Compare instances created with the same parameters +åâÇÑæÉ åËêäÇÊ åïæÔîÇîÉ ÈæáÓ ÇäåîÙòäîåîÇÊ o1 == o2 : TRUE o1 != o2 : FALSE o1 === o2 : TRUE o1 !== o2 : FALSE -Compare instances created with different parameters +åâÇÑæÉ åËêäÇÊ åïæÔîÇîÉ ÈåîÙòäîåîÇÊ åïÎÊäáÉ o1 == o2 : FALSE o1 != o2 : TRUE o1 === o2 : FALSE o1 !== o2 : TRUE -Compare an instance of a parent class with one from a subclass +åâÇÑæÉ åËêä åæ Õðæá èÇäðÏ åÙ åËêä åæ Õðæá áÑÙêñ o1 == o2 : FALSE o1 != o2 : TRUE o1 === o2 : FALSE o1 !== o2 : TRUE </screen> - Which is the output we will expect to obtain given the comparison rules - above. Only instances with the same values for their attributes and from the same - class are considered equal and identical. + èçè ÇäåïÎòÑîÌ ÇäÐñê æÊèâñÙç ääÍÕèä ÈåïâÊÖé âèÇÙÏ ÇäåâÇÑæÉ¬ + ÇäÊñê áê ÇäÃÙäé. áâ× ÇäåËêäÇÊ ÇäåÇäðãÉ äæáÓ Çäâêå ÇäÎÇÕÉ ÈÓðåÇÊçÇ èåæ æáÓ + ÇäÕñðæá çê ÇäÊñê ÊïÙÊîÈîÑ åÊÓÇèêñÉ èåïÊÔÇÈçÉ. </para> <para> - Even in the cases where we have object composition, the same comparison - rules apply. In the example below we create a container class that stores - an associative array of <classname>Flag</classname> objects. + ÍÊé áê ÇäÍÇäÇÊ ÇäÊñê æåÊäã áêçÇ ÊÑãêÈÇë ãÇÆæÇÊêñÇë "object composition"¬ Êæ×Èâ æáÓ + âèÇÙÏ ÇäåâÇÑæÉ. áê ÇäåËÇä ÇäÓñïáäêñ¬ ææÔÆ ÕðæáÇë ÍÇèêñÇë "container class" êâèå ÈÍáØ + åÕáèáÉ ÊÔÇÑãêñÉ åæ ãÇÆæÇÊ <classname>Flag</classname>. <example> - <title>Compound object comparisons in PHP 4</title> + <title>ÇäåâÇÑæÉ Èêæ ãÇÆæÇÊ åïÑãñîÈîÉ áê PHP 4</title> <programlisting role='php'> <![CDATA[ <?php @@ -1090,24 +1090,24 @@ $v = new FlagSet(array('flag1'=>$q, 'flag2'=>$p)); $w = new FlagSet(array('flag1'=>$q)); -echo "\nComposite objects u(o,p) and v(q,p)\n"; +echo "\nãÇÆæÇÊ åïÑãñîÈîÉ u(o,p) è v(q,p)\n"; compareObjects($u, $v); -echo "\nu(o,p) and w(q)\n"; +echo "\nu(o,p) è w(q)\n"; compareObjects($u, $w); ?> ]]> </programlisting> </example> - Which gives the expected output: + åÇ êïÙ×ê ÇäåïÎòÑîÌ ÇäåïÊèâñîÙ: <screen> -Composite objects u(o,p) and v(q,p) +ÇäãÇÆæÇÊ ÇäåïÑãñîÈîÉ u(o,p) è v(q,p) o1 == o2 : TRUE o1 != o2 : FALSE o1 === o2 : TRUE o1 !== o2 : FALSE -u(o,p) and w(q) +u(o,p) è w(q) o1 == o2 : FALSE o1 != o2 : TRUE o1 === o2 : FALSE @@ -1117,28 +1117,28 @@ </sect1> <sect1 id="language.oop.object-comparison-php5"> - <title>Comparing objects in PHP 5</title> + <title>åâÇÑæÉ ÇäãÇÆæÇÊ áê PHP 5</title> &warn.experimental; <para> - In PHP 5, object comparison is a more complicated than in PHP 4 and more - in accordance to what one will expect from an Object Oriented Language - (not that PHP 5 is such a language). + áê PHP 5¬ ÊÊÓñðå åâÇÑæÉ ÇäãÇÆæÇÊ ÈÇäÊñÙâêñÏ ÇäÒñÇÆÏ åâÇÑæÉ ÈàPHP 4 èÃãËÑ + èáâÇë äåÇ êÊèâñÙç ÇäåÑÁ åæ äÚÉ ãÇÆæêñÉ ÇäåæÍé "Object Oriented Language" + (äêÓ äÃæñ PHP 5 çê åËä çÐç ÇääñïÚÉ). </para> <para> - When using the comparison operator (<literal>==</literal>), - object variables are compared in a simple manner, namely: Two object - instances are equal if they have the same attributes and values, and are - instances of the same class. + ÙæÏ ÇÓÊÎÏÇå åïÔÚñðä ÇäåâÇÑæÉ (<literal>==</literal>)¬ + áÅæñç ÊÊå ÇäåâÇÑæÉ Èêæ ÇäåïÊÚêñðÑÇÊ ÇäãÇÆæêñîÉ È×ÑêâÉ ÈÓê×ɬ çê: êãèæ åËêäÇ ãÇÆæêæ + åïÊÓÇèêñêæ ÅÐÇ ãÇæÇ êåÊäãÇæ æáÓ ÇäÓñðåÇÊ èÇäâêå èãÇæÇ + åËêäêæ åæ æáÓ ÇäÕñðæá. </para> <para> - On the other hand, when using the identity operator (<literal>===</literal>), - object variables are identical if and only if they refer to the same - instance of the same class. + åæ ÌçÉ ÃÎÑé¬ ÙæÏ ÇÓÊÎÏÇå åïÔÚñðä ÇäçèêÉ (<literal>===</literal>)¬ + Êãèæ ÇäåïÊÚêñðÑÇÊ ÇäãÇÆæêñîÉ åïÊÔÇÈçÉ ÅÐÇ èáâ× ÅÐÇ ãÇæÊ ÊïÍêä Åäé æáÓ + ÇäåËêä åæ æáÓ ÇäÕñðæá. </para> <para> - An example will clarify these rules. + åËÇä äÊèÖêÍ çÐç ÇäâèÇÙÏ. <example> - <title>Example of object comparison in PHP 5</title> + <title>åËÇä Ùæ åâÇÑæÉ ÇäãÇÆæÇÊ "object comparison" áê PHP 5</title> <programlisting role='php'> <![CDATA[ <?php @@ -1178,33 +1178,33 @@ $q = $o; $r = new OtherFlag(); -echo "Two instances of the same class\n"; +echo "åËêäêæ åæ æáÓ ÇäÕñðæá\n"; compareObjects($o, $p); -echo "\nTwo references to the same instance\n"; +echo "\nÅÍÇäÊêæ äæáÓ ÇäåËêä\n"; compareObjects($o, $q); -echo "\nInstances of two different classes\n"; +echo "\nåËêäÇÊ åæ Õðæáêæ åïÎÊäáêæ\n"; compareObjects($o, $r); ?> ]]> </programlisting> </example> - This example will output: + çÐÇ ÇäåËÇä ÓêÓÊÕÏÑ ÇäåïÎòÑîÌ: <screen> -Two instances of the same class +åËêäêæ åæ æáÓ ÇäÕñðæá o1 == o2 : TRUE o1 != o2 : FALSE o1 === o2 : FALSE o1 !== o2 : TRUE -Two references to the same instance +ÅÍÇäÊêæ äæáÓ ÇäåËêä o1 == o2 : TRUE o1 != o2 : FALSE o1 === o2 : TRUE o1 !== o2 : FALSE -Instances of two different classes +åËêäÇÊ åæ Õðæáêæ åïÎÊäáêæ o1 == o2 : FALSE o1 != o2 : TRUE o1 === o2 : FALSE @@ -1234,3 +1234,5 @@ vim: et tw=78 syn=sgml vi: ts=1 sw=1 --> + +
http://cvs.php.net/diff.php/phpdoc-ar/language/oop.xml?r1=1.2&r2=1.3&ty=u Index: phpdoc-ar/language/oop.xml diff -u phpdoc-ar/language/oop.xml:1.2 phpdoc-ar/language/oop.xml:1.3 --- phpdoc-ar/language/oop.xml:1.2 Wed May 26 19:14:21 2004 +++ phpdoc-ar/language/oop.xml Fri May 28 21:02:03 2004 @@ -1,14 +1,14 @@ -<?xml version="1.0" encoding="WIN-1256"?> -<!-- $Revision: 1.2 $ --> -<!-- EN-Revision: 1.52 Maintainer: hafid Status: working --> +<?xml version="1.0" encoding="ISO-8859-6"?> +<!-- $Revision: 1.3 $ --> +<!-- EN-Revision: 1.52 Maintainer: hafid Status: ready --> <chapter id="language.oop"> - <title>ÇáÃÕäÇÝ "Classes" æÇáßÇÆäÇÊ "Objects"</title> + <title>ÇäÃÕæÇá "Classes" èÇäãÇÆæÇÊ "Objects"</title> <sect1 id="keyword.class"> - <title>ÇáÃÕäÇÝ: <literal>class</literal></title> + <title>ÇäÃÕæÇá: <literal>class</literal></title> <para> - "class" åí ÊÔßíáÉ ãä ÇáãõÊÛíøöÑÇÊ æÇáÏøæÇá ÇáÊøí ÊÚãá ãÚ - åÐå ÇáãõÊÛíøöÑÇÊ. ÊõÚóÑøóÝ "class" ÈÇÓÊÎÏÇã ÇáÕøíÛÉ ÇáÊøÇáíøÉ: + "class" çê ÊÔãêäÉ åæ ÇäåïÊÚêñðÑÇÊ èÇäÏñèÇä ÇäÊñê ÊÙåä åÙ + çÐç ÇäåïÊÚêñðÑÇÊ. ÊïÙîÑñîá "class" ÈÇÓÊÎÏÇå ÇäÕñêÚÉ ÇäÊñÇäêñÉ: </para> <para> <informalexample> @@ -16,15 +16,15 @@ <![CDATA[ <?php class Sella { - var $items; // ÃÛÑÇÖ Ýí ÓáøÊäÇ ááÊÓæøõÞ "shopping cart" + var $items; // ÃÚÑÇÖ áê Óäñ澂 ääÊÓèñïâ "shopping cart" - // ÇÖÇÝÉ $num ÓáÚ(ÜÉ) ãä ÇáÜ $artnr Åáì ÇáÓøáøÉ + // ÇÖÇáÉ $num ÓäÙ(àÉ) åæ Çäà $artnr Åäé ÇäÓñäñÉ function add_item($artnr, $num) { $this->items[$artnr] += $num; } - // äÒÚ $num ÓáÚ(ÜÉ) ãä ÇáÜ $artnr ãä ÇáÓøáøÉ + // æÒÙ $num ÓäÙ(àÉ) åæ Çäà $artnr åæ ÇäÓñäñÉ function remove_item($artnr, $num) { if ($this->items[$artnr] > $num) { @@ -42,15 +42,15 @@ </para> <para> - íÞæã åÐÇ ÈÊÚÑíÝ ÕäÝ "class" íõÏúÚóì Sella (ÓáøÉ) íÊßæøóä ãä ãÕÝæÝÉ - ÊÔÇÑßíøÉ "associative array" ãä ÇáÓøáÚ Ýí ÇáÓøáøÉ æßÐÇ ÏÇáÊíä áÇÖÇÝÉ æäÒÚ - ÃÛÑÇÖ ãä åÐå ÇáÓøáøÉ. + êâèå çÐÇ ÈÊÙÑêá Õæá "class" êïÏòÙîé Sella (ÓäñÉ) êÊãèñîæ åæ åÕáèáÉ + ÊÔÇÑãêñÉ "associative array" åæ ÇäÓñäÙ áê ÇäÓñäñÉ èãÐÇ ÏÇäÊêæ äÇÖÇáÉ èæÒÙ + ÃÚÑÇÖ åæ çÐç ÇäÓñäñÉ. </para> <warning> <simpara> - <emphasis>áíÓ</emphasis> ÈÇãßÇäß ÊÌÒÆÉ ÊÚÑíÝ ÕäÝò "class definition" ãÇ Åáì - ÚÏÉ ãáÝÇÊ Ãæ ÚÏÉ ãÞÇØÚ ãä PHP. áä íÚãá ãÇ íÃÊí: + <emphasis>äêÓ</emphasis> ÈÇåãÇæã ÊÌÒÆÉ ÊÙÑêá Õæáí "class definition" åÇ Åäé + ÙÏÉ åäáÇÊ Ãè ÙÏÉ åâÇ×Ù åæ PHP. äæ êÙåä åÇ êÃÊê: </simpara> <para> <informalexample> @@ -61,7 +61,7 @@ ?> <?php function test() { - print 'ÍÓäÇ'; + print 'ÍÓæÇ'; } } ?> @@ -72,66 +72,66 @@ </warning> <simpara> - ÊÕáÍ ÇáÊøäÈíåÇÊ ÇáÂÊíøÉ ãÚ PHP 4. + ÊÕäÍ ÇäÊñæÈêçÇÊ ÇäÂÊêñÉ åÙ PHP 4. </simpara> <caution> <simpara> - ÇáÅÓã <literal>stdClass</literal> ãõÓÊóÎúÏóã ÏÇÎáíÇ ãä ÞÈá - Zend æåæ ãÍÌæÒ. áíÓ ÈÇãßÇäß ÇãÊáÇß ÕäÝ íõÏúÚóì - <literal>stdClass</literal>¡ Ýí PHP. + ÇäÅÓå <literal>stdClass</literal> åïÓÊîÎòÏîå ÏÇÎäêÇ åæ âÈä + Zend èçè åÍÌèÒ. äêÓ ÈÇåãÇæã ÇåÊäÇã Õæá êïÏòÙîé + <literal>stdClass</literal>¬ áê PHP. </simpara> </caution> <caution> <simpara> - ÊÊÓã ÃÓãÇÁ ÇáÏøæÇá <literal>__sleep</literal> æ - <literal>__wakeup</literal> ÈßæäåÇ ÓÍÑíøÉ ãÚ ÃÕäÇÝ PHP. - áÇ íãßäß ÇãÊáÇß ÏæÇá ÊÍãá åÐå ÇáÃÓãÇÁ Ýí Ãíø ãä - ÃÕäÇÝß ÅáÇ ÅÐÇ ÑÛÈÊ Ýí ÇÔÑÇßåÇ ÈÇáÎÇÕíÉ ÇáÓøÍÑíøÉ "magic functionality". - áãÒíÏ ãä ÇáãÚáæãÇÊ¡ ÇÓÊÚÑÖ ãÇ Ýí ÇáÃÓÝá. + ÊÊÓå ÃÓåÇÁ ÇäÏñèÇä <literal>__sleep</literal> è + <literal>__wakeup</literal> ÈãèæçÇ ÓÍÑêñÉ åÙ ÃÕæÇá PHP. + äÇ êåãæã ÇåÊäÇã ÏèÇä ÊÍåä çÐç ÇäÃÓåÇÁ áê Ãêñ åæ + ÃÕæÇáã ÅäÇ ÅÐÇ ÑÚÈÊ áê ÇÔÑÇãçÇ ÈÇäÎÇÕêÉ ÇäÓñÍÑêñÉ "magic functionality". + äåÒêÏ åæ ÇäåÙäèåÇʬ ÇÓÊÙÑÖ åÇ áê ÇäÃÓáä. </simpara> </caution> <caution> <simpara> - ÊÍÌÒ PHP ßÇÝÉ ÃÓãÇÁ ÇáÏøæÇá ÇáÊøí ÊÈÏà ÈÜ __ Úáì ÃäøåÇ ÓÍÑíøÉ. - íõæÕóì ÈÃä áÇ ÊÓÊÎÏã ÃÓãÇÁ ÏæÇá ÈåÇ - __ Ýí PHP ÅáÇ ÅÐÇ ÑÛÈÊ Ýí ÈÚÖ ÇáÎÕÇÆÕ ÇáÓøÍÑíøÉ¡ ÇáãõæóËøóÞóÉ. + ÊÍÌÒ PHP ãÇáÉ ÃÓåÇÁ ÇäÏñèÇä ÇäÊñê ÊÈÏà Èà __ Ùäé ÃæñçÇ ÓÍÑêñÉ. + êïèÕîé ÈÃæ äÇ ÊÓÊÎÏå ÃÓåÇÁ ÏèÇä ÈçÇ + __ áê PHP ÅäÇ ÅÐÇ ÑÚÈÊ áê ÈÙÖ ÇäÎÕÇÆÕ ÇäÓñÍÑêñɬ ÇäåïèîËñîâîÉ. </simpara> </caution> <simpara> - Ýí PHP 4¡ íõÓúãóÍ ÝÞØ ÈÇáãõÓÊåøöáÇÊ ÇáËøÇÈÊÉ "constant initializers" ÇáÎÇÕÉ ÈãõÊÛíøöÑÇÊ <literal>var</literal>. - áÃÌá ÇÓÊåáÇá ãõÊÛíøöÑÇÊ ÈÞíã ÛíÑ-ËÇÈËÉ¡ - ÊÍÊÇÌ áÏÇáÉ ÇÓÊåáÇá "initialization function" íÊã ÇÓÊÏÚÇÄåÇ - ÂáíÇð ÚäÏ íÌÑí ÈäÇÁ ßÇÆä ÇäØáÇÞÇð ãä - ÇáÕøöäÝ. ãËá åÐå ÇáÏøÇáÉ ÊõÓãóì ÈÇáÈÇäíÉ "constructor" (ÇÓÊÚÑÖ ãÇ íÃÊí). + áê PHP 4¬ êïÓòåîÍ áâ× ÈÇäåïÓÊçñðäÇÊ ÇäËñÇÈÊÉ "constant initializers" ÇäÎÇÕÉ ÈåïÊÚêñðÑÇÊ <literal>var</literal>. + äÃÌä ÇÓÊçäÇä åïÊÚêñðÑÇÊ Èâêå ÚêÑ-ËÇÈËɬ + ÊÍÊÇÌ äÏÇäÉ ÇÓÊçäÇä "initialization function" êÊå ÇÓÊÏÙÇÄçÇ + ÂäêÇë ÙæÏ êÌÑê ÈæÇÁ ãÇÆæ Çæ×äÇâÇë åæ + ÇäÕñðæá. åËä çÐç ÇäÏñÇäÉ ÊïÓåîé ÈÇäÈÇæêÉ "constructor" (ÇÓÊÙÑÖ åÇ êÃÊê). </simpara> <informalexample> <programlisting role="php"> <![CDATA[ <?php class Sella { - /* áÇ ÔíÁ ãä åÐÇ ÓíÚãá Ýí PHP 4. */ + /* äÇ ÔêÁ åæ çÐÇ ÓêÙåä áê PHP 4. */ var $todays_date = date("Y-m-d"); var $name = $firstname; - var $owner = 'ÕáÇÍ ' . 'ÖíÝ'; - /* Ýí Ííä¡ ÓÊÚãá ÇáãÕÝæÝÇÊ ÇáÊøí ÊÊÖãä ÞíãÇ ËÇÈÊÉð. */ - var $items = array("ÑÇÆí", "ÊáÝÇÒ"); + var $owner = 'ÕäÇÍ ' . 'Öêá'; + /* áê Íêæ¬ ÓÊÙåä ÇäåÕáèáÇÊ ÇäÊñê ÊÊÖåæ âêåÇ ËÇÈÊÉë. */ + var $items = array("ÑÇÆê", "ÊäáÇÒ"); } -/* åßÐÇ íÌÈ Ãä ÊÊã ÇáÃãæÑ. */ +/* çãÐÇ êÌÈ Ãæ ÊÊå ÇäÃåèÑ. */ class Sella { var $todays_date; var $name; var $owner; - var $items = array("ÑÇÆí", "ÊáÝÇÒ"); + var $items = array("ÑÇÆê", "ÊäáÇÒ"); function Sella() { $this->todays_date = date("Y-m-d"); $this->name = $GLOBALS['firstname']; - /* ÅáÎ. . . */ + /* ÅäÎ. . . */ } } ?> @@ -140,9 +140,9 @@ </informalexample> <para> - ÇáÃÕäÇÝ åí ÚÈÇÑÉ Úä ÃäæÇÚ áÐáß Ýåí ÈãËÇÈÉ ÊãåíÏ ááãõÊÛíøöÑÇÊ - ÇáÍÇáíøÉ. Úáíß Ãä ÊäÔÆ ãõÊÛíøöÑÉ ãä ÇáäøæÚ ÇáãÑÛæÈ Ýíå ÈæÇÓØÉ - ãõÔÛøöá "operator": <literal>new</literal>. + ÇäÃÕæÇá çê ÙÈÇÑÉ Ùæ ÃæèÇÙ äÐäã áçê ÈåËÇÈÉ ÊåçêÏ ääåïÊÚêñðÑÇÊ + ÇäÍÇäêñÉ. Ùäêã Ãæ ÊæÔÆ åïÊÚêñðÑÉ åæ ÇäæñèÙ ÇäåÑÚèÈ áêç ÈèÇÓ×É + åïÔÚñðä "operator": <literal>new</literal>. </para> <informalexample> @@ -160,43 +160,43 @@ </informalexample> <para> - íõäÔöÄõ åÐÇ ÇáßÇÆäÇÊó <varname>$cart</varname> æ - <varname>$another_cart</varname>¡ æßáÇåãÇ ãä ÇáÕøäÝ Cart. ÊÊã ãäÇÏÇÉõ ÇáÏøóÇáÉó - add_item() ÇáÎÇÕÉ ÈÇáßÇÆä <varname>$cart</varname> ÈÛÑÖ ÇÖÇÝÉ ÛÑÖ 1 - ãä ÇáÓøáÚÉ ÑÞã 10 Åáì <varname>$cart</varname>. ÊÊã ÇÖÇÝÉ 3 ÃÛÑÇÖ ãä - ÇáÓøáÚÉ ÑÞã 0815 Åáì <varname>$another_cart</varname>. + êïæÔðÄï çÐÇ ÇäãÇÆæÇÊî <varname>$cart</varname> è + <varname>$another_cart</varname>¬ èãäÇçåÇ åæ ÇäÕñæá Cart. ÊÊå åæÇÏÇÉï ÇäÏñîÇäÉî + add_item() ÇäÎÇÕÉ ÈÇäãÇÆæ <varname>$cart</varname> ÈÚÑÖ ÇÖÇáÉ ÚÑÖ 1 + åæ ÇäÓñäÙÉ Ñâå 10 Åäé <varname>$cart</varname>. ÊÊå ÇÖÇáÉ 3 ÃÚÑÇÖ åæ + ÇäÓñäÙÉ Ñâå 0815 Åäé <varname>$another_cart</varname>. </para> <para> - ßáø ãä <varname>$cart</varname> æ <varname>$another_cart</varname> ÊãÊáßÇä - ÇáÏøæÇá add_item()¡ remove_item() æãõÊÛíøöÑÉ items. ÊõÚÊóÈóÑõ åÐå - ÏæÇá æãõÊÛíøöÑÇÊ ãõÊãÇíöÒÉ. íãßä Ãä ÊõÝßøöÑ ÈÇáßÇÆäÇÊ - ßÔíÁ ããÇËá ááãõÌáøÏÇÊ Ýí äÙÇã ãáÝÇÊíø. Ýí äÙÇã ãáÝÇÊíø ãÇ¡ íãßäß - ÇãÊáÇß ãáÝí <filename>ÇÞÑÃäí.TXT</filename> ãÎÊáÝíä ØÇáãÇ ÃäøåãÇ íÊæÇÌÏÇä Ýí ãõÌáøÏÇÊ - ãõÎÊáöÝÉ. ãËáãÇ ÇáÍÇá ãÚ ÇáãõÌáøÏÇÊ¡ ÍíË íÊæÌøÈ Úáíß ÑÞä - ÇÓã ÇáãÓÇÑ ßÇãáÇ ÈÛÑÖ ÈáæÛ ßáø ãáÝ ÇäØáÇÞÇ ãä ÇáãõÌáøÏ ÇáæÇÞÚ Ýí ÇáãÓÊæì ÇáÃÚáì "toplevel directory"¡ Úáíß Ãä - Ãä ÊõÍÏøöÏó ÇáÅÓã ÇáßÇãá ááÏÇáÉ ÇáÊøí ÊæøÏ ãäÇÏÇÊåÇ: Öãä ãÕØáÍÇÊ PHP¡ - ÓíÊãËá ÇáãõÌáøóÏ ÇáæÇÞÚ Ýí ÇáãÓÊæì ÇáÃÚáì Ýí ÇáãÌÇá ÇáÅÓãíø ÇáÔøÇãá "global namespace" Ýí Ííä ÓíÊãËá - ÝÇÕá ÅÓã ÇáãÓÇÑ "pathname separator" Ýí <literal>-></literal>. æåßÐÇ¡ ÝÅäø ÇáÃÓãÇÁ - <varname>$cart->items</varname> æ - <varname>$another_cart->items</varname> ÊõØúáóÞ Úáì ãõÊÛíøöÑÊíä ãÎÊáÝÊíä. - áÇÍÙ Ãäø ÇáãõÊÛíøöÑÉ ÊõÏúÚóì <varname>$cart->items</varname> æáíÓ - <varname>$cart->$items</varname> ããÇ íÚäí Ãäø ÅÓã ãõÊÛíøöÑÉ Ýí PHP íãÊáß - ÑãÒ ÏæáÇÑ ÃÍÇÏíø ÝÞØ. + ãäñ åæ <varname>$cart</varname> è <varname>$another_cart</varname> ÊåÊäãÇæ + ÇäÏñèÇä add_item()¬ remove_item() èåïÊÚêñðÑÉ items. ÊïÙÊîÈîÑï çÐç + ÏèÇä èåïÊÚêñðÑÇÊ åïÊåÇêðÒÉ. êåãæ Ãæ ÊïáãñðÑ ÈÇäãÇÆæÇÊ + ãÔêÁ ååÇËä ääåïÌäñÏÇÊ áê æØÇå åäáÇÊêñ. áê æØÇå åäáÇÊêñ åǬ êåãæã + ÇåÊäÇã åäáê <filename>ÇâÑÃæê.TXT</filename> åÎÊäáêæ ×ÇäåÇ ÃæñçåÇ êÊèÇÌÏÇæ áê åïÌäñÏÇÊ + åïÎÊäðáÉ. åËäåÇ ÇäÍÇä åÙ ÇäåïÌäñÏÇʬ ÍêË êÊèÌñÈ Ùäêã Ñâæ + ÇÓå ÇäåÓÇÑ ãÇåäÇ ÈÚÑÖ ÈäèÚ ãäñ åäá Çæ×äÇâÇ åæ ÇäåïÌäñÏ ÇäèÇâÙ áê ÇäåÓÊèé ÇäÃÙäé "toplevel directory"¬ Ùäêã Ãæ + Ãæ ÊïÍÏñðÏî ÇäÅÓå ÇäãÇåä ääÏÇäÉ ÇäÊñê ÊèñÏ åæÇÏÇÊçÇ: Öåæ åÕ×äÍÇÊ PHP¬ + ÓêÊåËä ÇäåïÌäñîÏ ÇäèÇâÙ áê ÇäåÓÊèé ÇäÃÙäé áê ÇäåÌÇä ÇäÅÓåêñ ÇäÔñÇåä "global namespace" áê Íêæ ÓêÊåËä + áÇÕä ÅÓå ÇäåÓÇÑ "pathname separator" áê <literal>-></literal>. èçãÐǬ áÅæñ ÇäÃÓåÇÁ + <varname>$cart->items</varname> è + <varname>$another_cart->items</varname> Êï×òäîâ Ùäé åïÊÚêñðÑÊêæ åÎÊäáÊêæ. + äÇÍØ Ãæñ ÇäåïÊÚêñðÑÉ ÊïÏòÙîé <varname>$cart->items</varname> èäêÓ + <varname>$cart->$items</varname> ååÇ êÙæê Ãæñ ÅÓå åïÊÚêñðÑÉ áê PHP êåÊäã + ÑåÒ ÏèäÇÑ ÃÍÇÏêñ áâ×. </para> <informalexample> <programlisting role="php"> <![CDATA[ <?php -// ÕÍíÍ¡ $ ÃÍÇÏí +// ÕÍêͬ $ ÃÍÇÏê $cart->items = array("10" => 1); -// ÛíÑ ÕÇáÍ¡ áÃäø $cart->$items ÊõÕÈöÍõ $cart->"" +// ÚêÑ ÕÇäͬ äÃæñ $cart->$items ÊïÕÈðÍï $cart->"" $cart->$items = array("10" => 1); -// ÕÍíÍ¡ áßä íãßä Ãä Êßæä Ãæ áÇ Êßæä ãÇ ßÇä ãÞÕæÏÇð ãäåÇ: -// $cart->$myvar ÊõÕÈöÍõ $cart->items +// ÕÍêͬ äãæ êåãæ Ãæ Êãèæ Ãè äÇ Êãèæ åÇ ãÇæ åâÕèÏÇë åæçÇ: +// $cart->$myvar ÊïÕÈðÍï $cart->items $myvar = 'items'; $cart->$myvar = array("10" => 1); ?> @@ -205,25 +205,25 @@ </informalexample> <para> - Öãä ÊÚÑíÝ ÕöäÝò ãÇ¡ áÇ ÊÚÑÝ ÊÍÊ Ãíø ÊÓãíÉ Óíßæä ÇáßÇÆäõ - ÞÇÈáÇ ááæáæÌ Ýí ÈÑäÇãÌß: ÚäÏ ßÊÇÈÉ ÕäÝ Cart¡ ßÇä - íõÌåóáõ Ãäø ÇáßÇÆä ÓíõÓóãóì - <varname>$cart</varname> Ãæ <varname>$another_cart</varname> áÇÍÞÇð. æåßÐÇ¡ - ÝÅäøå áíÓ ÈÇãßÇäß ßÊÇÈÉ <varname>$cart->items</varname> Öãä ÕäÝ Cart - äÝÓå. ÈÏáÇ ãä Ðáß¡ æáÃÌá ÇáÊøóãßøõä ãä æáæÌ ãÇ íÎøõÕå ãä ÏæÇá - æãõÊÛíøöÑÇÊ ÇäØáÇÞÇ ãä ÕäÝ ãÇ¡ íãßä ááãÑÁ Ãä íÓÊÎÏã ÔÈå-ÇáãõÊÛíøöÑÉ "pseudo-variable" - <varname>$this</varname> ÇáÊøí íãßä Ãä ÊÞÑà Úáì Ôßá 'ÃäÇ ÈÇáÐøÇÊ - my own' Ãæ 'ÇáßÇÆä ÇáÍÇáíø - current - object'. æåßÐÇ¡ íõãßä ÞÑÇÁÉ '<varname>$this->items[$artnr]</varname> += - <varname>$num</varname>' æßÃäøåÇ 'ÇÖÇÝÉ <varname>$num</varname> Åáì - ÇáÚÏøóÇÏ <varname>$artnr</varname> ÇáÎÇÕ ÈãÕÝæÝÊí ááÃÛÑÇÖ' Ãæ 'ÇÖÇÝÉ - <varname>$num</varname> Åáì ÇáÚÏøóÇÏ <varname>$artnr</varname> ÇáÎÇÕ - ÈãÕÝæÝÉ ÇáÃÛÑÇÖ Öãä ÇáßÇÆä ÇáÍÇáíø'. + Öåæ ÊÙÑêá Õðæáí åǬ äÇ ÊÙÑá ÊÍÊ Ãêñ ÊÓåêÉ Óêãèæ ÇäãÇÆæï + âÇÈäÇ ääèäèÌ áê ÈÑæÇåÌã: ÙæÏ ãÊÇÈÉ Õæá Cart¬ ãÇæ + êïÌçîäï Ãæñ ÇäãÇÆæ ÓêïÓîåîé + <varname>$cart</varname> Ãè <varname>$another_cart</varname> äÇÍâÇë. èçãÐǬ + áÅæñç äêÓ ÈÇåãÇæã ãÊÇÈÉ <varname>$cart->items</varname> Öåæ Õæá Cart + æáÓç. ÈÏäÇ åæ Ðä㬠èäÃÌä ÇäÊñîåãñïæ åæ èäèÌ åÇ êÎñïÕç åæ ÏèÇä + èåïÊÚêñðÑÇÊ Çæ×äÇâÇ åæ Õæá åǬ êåãæ ääåÑÁ Ãæ êÓÊÎÏå ÔÈç-ÇäåïÊÚêñðÑÉ "pseudo-variable" + <varname>$this</varname> ÇäÊñê êåãæ Ãæ ÊâÑà Ùäé Ôãä 'ÃæÇ ÈÇäÐñÇÊ - my own' Ãè 'ÇäãÇÆæ ÇäÍÇäêñ - current + object'. èçãÐǬ êïåãæ âÑÇÁÉ '<varname>$this->items[$artnr]</varname> += + <varname>$num</varname>' èãÃæñçÇ 'ÇÖÇáÉ <varname>$num</varname> Åäé + ÇäÙÏñîÇÏ <varname>$artnr</varname> ÇäÎÇÕ ÈåÕáèáÊê ääÃÚÑÇÖ' Ãè 'ÇÖÇáÉ + <varname>$num</varname> Åäé ÇäÙÏñîÇÏ <varname>$artnr</varname> ÇäÎÇÕ + ÈåÕáèáÉ ÇäÃÚÑÇÖ Öåæ ÇäãÇÆæ ÇäÍÇäêñ'. </para> <note> <para> - åäÇß ÈÚÖ ÇáÏøæÇá ÇáÌãíáÉ ááÊÚÇãá ãÚ ÇáÃÕäÇÝ æÇáßÇÆäÇÊ. áÑÈãÇ ÊÑÛÈ - Ýí ÇáÞÇÁ äÙÑÉ Úáì <link linkend="ref.classobj">ÏæÇá ÇáÃÕäÇÝ/ÇáßÇÆäÇÊ "Class/Object + çæÇã ÈÙÖ ÇäÏñèÇä ÇäÌåêäÉ ääÊÙÇåä åÙ ÇäÃÕæÇá èÇäãÇÆæÇÊ. äÑÈåÇ ÊÑÚÈ + áê ÇäâÇÁ æØÑÉ Ùäé <link linkend="ref.classobj">ÏèÇä ÇäÃÕæÇá/ÇäãÇÆæÇÊ "Class/Object Functions"</link>. </para> </note> @@ -233,19 +233,19 @@ <title><literal>extends</literal></title> <para> - ÛÇáÈÇ ãÇ ÊÍÊÇÌ Åáì ÃÕäÇÝ ÊÊÖãä ãõÊÛíøöÑÇÊ æÏæÇá ãõãÇËáÉ - áÕäÝ ÂÎÑ ãõÊæÇÌöÏ. Ýí ÇáæÇÞÚ¡ Åäøå áÚÇÏÉ ØíøöÈÉ Ãä - ÊõÚÑøöÝ ÕäÝÇ äæÚíøÇð "generic class" íãßä ÇÓÊÎÏÇãå Ýí ßÇÝÉ - ãÔÇÑíÚß æÊßííÝ åÐÇ ÇáÕøöäÝ ÈÍÓÈ ÍÇÌíÇÊ ßáø ãä - ãÔÇÑíÚß ÇáÎÇÕÉ. áÊÓåíá åÐÇ ÇáÃãÑ¡ íãßä ááÃÕäÇÝ Ãä Êßæä - ÊæÓÚÇÊ áÃÕäÇÝ ÃÎÑì. íÊæÝÑ ÇáÕøöäÝ ÇáãõæÓøóÚ Ãæ ÇáãõÔÊóÞ - Úáì ßÇÝÉ ãõÊÛíøöÑÇÊ æÏæÇá ÇáÕøäÝ ÇáÃÓÇÓíø (åÐÇ ãÇ - íõÓãóì 'æÑÇËÉ - inheritance' ÈÇáÑøÛã ãä æÇÞÚ Ãä áÇ ÃÍÏ ÞÏ ãÇÊ) æãÇ - ÊõÖíÝõå Åáì ÇáÊøÚÑíÝ ÇáãõæÓøóÚ. íÓÊÍíá - ÇáØøÑÍ ÇäØáÇÞÇ ãä ÕäÝò ãÇ Ãí ÅÒÇáÉ ÊÚÑíÝ ÃíøÉ - ÏæÇá Ãæ ãõÊÛíøöÑÇÊ ãÊæÇÌÏÉ. ÏÇÆãÇ ãÇ íÑÊÈØ ÇáÕøöäÝ ÇáãõæÓøóÚ ÊÈÚíÉð - ÈÕäÝ ÞÇÚÏíø æÇÍÏ ããÇ íÚäí Ãäø ÇáæÑÇËÉ ÇáãõÊÚÏøöÏÉ "multiple inheritance" - áíÓÊ ãÏÚæãÉð. íÊã ÊæÓíÚ ÇáÃÕäÇÝ ÈÇÓÊÎÏÇã ÇáßáãÉ ÇáãÝÊÇÍíøÉ 'extends'. + ÚÇäÈÇ åÇ ÊÍÊÇÌ Åäé ÃÕæÇá ÊÊÖåæ åïÊÚêñðÑÇÊ èÏèÇä åïåÇËäÉ + äÕæá ÂÎÑ åïÊèÇÌðÏ. áê ÇäèÇâÙ¬ Åæñç äÙÇÏÉ ×êñðÈÉ Ãæ + ÊïÙÑñðá ÕæáÇ æèÙêñÇë "generic class" êåãæ ÇÓÊÎÏÇåç áê ãÇáÉ + åÔÇÑêÙã èÊãêêá çÐÇ ÇäÕñðæá ÈÍÓÈ ÍÇÌêÇÊ ãäñ åæ + åÔÇÑêÙã ÇäÎÇÕÉ. äÊÓçêä çÐÇ ÇäÃåѬ êåãæ ääÃÕæÇá Ãæ Êãèæ + ÊèÓÙÇÊ äÃÕæÇá ÃÎÑé. êÊèáÑ ÇäÕñðæá ÇäåïèÓñîÙ Ãè ÇäåïÔÊîâ + Ùäé ãÇáÉ åïÊÚêñðÑÇÊ èÏèÇä ÇäÕñæá ÇäÃÓÇÓêñ (çÐÇ åÇ + êïÓåîé 'èÑÇËÉ - inheritance' ÈÇäÑñÚå åæ èÇâÙ Ãæ äÇ ÃÍÏ âÏ åÇÊ) èåÇ + ÊïÖêáïç Åäé ÇäÊñÙÑêá ÇäåïèÓñîÙ. êÓÊÍêä + Çä×ñÑÍ Çæ×äÇâÇ åæ Õæáí åÇ Ãê ÅÒÇäÉ ÊÙÑêá ÃêñÉ + ÏèÇä Ãè åïÊÚêñðÑÇÊ åÊèÇÌÏÉ. ÏÇÆåÇ åÇ êÑÊÈ× ÇäÕñðæá ÇäåïèÓñîÙ ÊÈÙêÉë + ÈÕæá âÇÙÏêñ èÇÍÏ ååÇ êÙæê Ãæñ ÇäèÑÇËÉ ÇäåïÊÙÏñðÏÉ "multiple inheritance" + äêÓÊ åÏÙèåÉë. êÊå ÊèÓêÙ ÇäÃÕæÇá ÈÇÓÊÎÏÇå ÇäãäåÉ ÇäåáÊÇÍêñÉ 'extends'. </para> <informalexample> @@ -265,72 +265,72 @@ </informalexample> <para> - íÞæã åÐÇ ÈÊÚÑíÝ ÕäÝ íõÓãì Named_Cart íÊæÝÑ Úáì ßÇÝÉ ãõÊÛíøöÑÇÊ æÏæÇá - Cart ÅÖÇÝÉ Åáì ãõÊÛíøöÑÉ ÅÖÇÝíøÉ åí <varname>$owner</varname> æßÐÇ - ÏÇáÉ ÅÖÇÝíøÉ åí set_owner(). ÃäÔÆ ÓáøÉ ãõÓãÇÉ "named cart" ÈÇáØøÑíÞÉ ÇáãõÚÊÇÏÉ - æÓÊÊãßä ãä ÊÚííä æãÚÑÝÉ ãÇáöß ÇáÓøáÇÊ. áÇ ÒÇá ÈÇãßÇäß ÇÓÊÎÏÇã ÏæÇá ÓáøÉ - ÚÇÏíøÉ Úáì ÓáÇøÊ ãõÓãóÇÉ: + êâèå çÐÇ ÈÊÙÑêá Õæá êïÓåé Named_Cart êÊèáÑ Ùäé ãÇáÉ åïÊÚêñðÑÇÊ èÏèÇä + Cart ÅÖÇáÉ Åäé åïÊÚêñðÑÉ ÅÖÇáêñÉ çê <varname>$owner</varname> èãÐÇ + ÏÇäÉ ÅÖÇáêñÉ çê set_owner(). ÃæÔÆ ÓäñÉ åïÓåÇÉ "named cart" ÈÇä×ñÑêâÉ ÇäåïÙÊÇÏÉ + èÓÊÊåãæ åæ ÊÙêêæ èåÙÑáÉ åÇäðã ÇäÓñäÇÊ. äÇ ÒÇä ÈÇåãÇæã ÇÓÊÎÏÇå ÏèÇä ÓäñÉ + ÙÇÏêñÉ Ùäé ÓäÇñÊ åïÓåîÇÉ: </para> <informalexample> <programlisting role="php"> <![CDATA[ <?php -$ncart = new Named_Cart; // ÇäÔÇÁ ÓáøÉ ãõÓãóÇÉ -$ncart->set_owner("kris"); // ÊÓãíÉ åÐå ÇáÓøáøÉ -print $ncart->owner; // ØÈÇÚÉ ÃÓãÇÁ ãÇáßí ÇáÓøáøÉ -$ncart->add_item("10", 1); // (ÎÇÕíÉ ãæÑæËÉ Úä ÇáÓøáøÉ) +$ncart = new Named_Cart; // ÇæÔÇÁ ÓäñÉ åïÓåîÇÉ +$ncart->set_owner("kris"); // ÊÓåêÉ çÐç ÇäÓñäñÉ +print $ncart->owner; // ×ÈÇÙÉ ÃÓåÇÁ åÇäãê ÇäÓñäñÉ +$ncart->add_item("10", 1); // (ÎÇÕêÉ åèÑèËÉ Ùæ ÇäÓñäñÉ) ?> ]]> </programlisting> </informalexample> <para> - íõÓãóì åÐÇ ÃíÖÇ ÈÚáÇÞÉ "æÇáöÏ-ØÝá / parent-child". ÊäÔÆ ÕöäÝÇð¡ - ãä ãÓÊæì ÇáæÇáÏ¡ æÊÓÊÎÏã <literal>extends</literal> ÈÛÑÖ ÇäÔÇÁ ÖöäÝ ÌÏíÏ - <emphasis>íÞæã</emphasis> Úáì ÇáÕøöäÝ ÇáæÇáöÏ "parent class": ÇáÕøöäÝ ÇáØøöÝá "child class". íãßäß - ÍÊì ÇÓÊÎÏÇã åÐÇ ÇáÕøöäÝ ÇáØøöÝá ÇáÌÏíÏ æÇäÔÇÁ ÕäÝ ÂÎÑ íÞæã Úáì åÐÇ ÇáÕøöäÝ - ÇáØøöÝá. + êïÓåîé çÐÇ ÃêÖÇ ÈÙäÇâÉ "èÇäðÏ-×áä / parent-child". ÊæÔÆ ÕðæáÇë¬ + åæ åÓÊèé ÇäèÇäϬ èÊÓÊÎÏå <literal>extends</literal> ÈÚÑÖ ÇæÔÇÁ Öðæá ÌÏêÏ + <emphasis>êâèå</emphasis> Ùäé ÇäÕñðæá ÇäèÇäðÏ "parent class": ÇäÕñðæá Çä×ñðáä "child class". êåãæã + ÍÊé ÇÓÊÎÏÇå çÐÇ ÇäÕñðæá Çä×ñðáä ÇäÌÏêÏ èÇæÔÇÁ Õæá ÂÎÑ êâèå Ùäé çÐÇ ÇäÕñðæá + Çä×ñðáä. </para> <note> <para> - íÌÈ ÊÚÑíÝ ÇáÃÕäÇÝ ÞÈá ÇÓÊÎÏÇãåÇ! ÅÐÇ ÑÛÈÊ Ãä íõæóÓøöÚó ÇáÕøöäÝõ - <literal>Named_Cart</literal> ÇáÕøöäÝó - <literal>Cart</literal>¡ ÓíÊæÌÈ Úáíß ÊÚÑíÝ ÇáÕøöäÝ - <literal>Cart</literal> ÃæáÇð. ÅÐÇ ÃÑÏÊ ÇäÔÇÁ ÕäÝ ÂÎÑ íõÏúÚóì - <literal>Yellow_named_cart</literal> íÞæã Úáì ÇáÕøöäÝ - <literal>Named_Cart</literal>¡ Óíßæä Úáíß ÊÚÑíÝ - <literal>Named_Cart</literal> ÃæáÇð. áÇÎÊÕÇÑ ÇáÃãæÑ: ÇáÊøÑÊíÈ ÇáÐøí íÊã - Èå ÊÚÑíÝ ÇáÃÕäÇÝ ãõåöã. + êÌÈ ÊÙÑêá ÇäÃÕæÇá âÈä ÇÓÊÎÏÇåçÇ! ÅÐÇ ÑÚÈÊ Ãæ êïèîÓñðÙî ÇäÕñðæáï + <literal>Named_Cart</literal> ÇäÕñðæáî + <literal>Cart</literal>¬ ÓêÊèÌÈ Ùäêã ÊÙÑêá ÇäÕñðæá + <literal>Cart</literal> ÃèäÇë. ÅÐÇ ÃÑÏÊ ÇæÔÇÁ Õæá ÂÎÑ êïÏòÙîé + <literal>Yellow_named_cart</literal> êâèå Ùäé ÇäÕñðæá + <literal>Named_Cart</literal>¬ Óêãèæ Ùäêã ÊÙÑêá + <literal>Named_Cart</literal> ÃèäÇë. äÇÎÊÕÇÑ ÇäÃåèÑ: ÇäÊñÑÊêÈ ÇäÐñê êÊå + Èç ÊÙÑêá ÇäÃÕæÇá åïçðå. </para> </note> </sect1> <sect1 id="language.oop.constructor"> - <title>ÇáÈÇäíÇÊ: <literal>Constructors</literal></title> + <title>ÇäÈÇæêÇÊ: <literal>Constructors</literal></title> <caution> <simpara> - ÈÍÓÈ PHP 3 Ãæ PHP 4¡ ÊÊÕÑÝ ÇáÈóÇäöíóÇÊ ÈÕæÑÉ ãÊÛÇíÑÉ. ÊõÝÖøóá ÈÞæÉ - ÏáÇÆáíÉ PHP 4. + ÈÍÓÈ PHP 3 Ãè PHP 4¬ ÊÊÕÑá ÇäÈîÇæðêîÇÊ ÈÕèÑÉ åÊÚÇêÑÉ. ÊïáÖñîä ÈâèÉ + ÏäÇÆäêÉ PHP 4. </simpara> </caution> <para> - ÇáÈÇäíÇÊ åí ÏæÇá Ýí ÕäÝ ÊÊã ãäÇÏÇÊåÇ ÂáíÇ - ÚäÏ ÇäÔÇÁ ãËíá "instance" ÌÏíÏ áÕöäÝ¡ ÈæÇÓØÉ - <literal>new</literal>. Ýí PHP 3¡ - ÊÕÈÍ ÏÇáÉ ãÇ ÈÇäíÉð ÚäÏãÇ ÊÊæÝÑ Úáì äÝÓ ÇáÅÓÇã ãËá - ÇáÕøöäÝ. Ýí PHP 4¡ ÊÕÈÍ ÏÇáÉ ãÇ ÈÇäíÉð ÚäÏãÇ - ÊÊæÝÑ Úáì äÝÓ ÇáÅÓã ãËá ÇáÕøöäÝ ÇáÐøí ÚõÑøöÝÊ Èå - - ÇáÝÑÞ ÏÞíÞ áßäå ÍÇÓã (ÇÓÊÚÑÖ ãÇ íÃÊí). + ÇäÈÇæêÇÊ çê ÏèÇä áê Õæá ÊÊå åæÇÏÇÊçÇ ÂäêÇ + ÙæÏ ÇæÔÇÁ åËêä "instance" ÌÏêÏ äÕðæá¬ ÈèÇÓ×É + <literal>new</literal>. áê PHP 3¬ + ÊÕÈÍ ÏÇäÉ åÇ ÈÇæêÉë ÙæÏåÇ ÊÊèáÑ Ùäé æáÓ ÇäÅÓÇå åËä + ÇäÕñðæá. áê PHP 4¬ ÊÕÈÍ ÏÇäÉ åÇ ÈÇæêÉë ÙæÏåÇ + ÊÊèáÑ Ùäé æáÓ ÇäÅÓå åËä ÇäÕñðæá ÇäÐñê ÙïÑñðáÊ Èç - + ÇäáÑâ Ïâêâ äãæç ÍÇÓå (ÇÓÊÙÑÖ åÇ êÃÊê). </para> <informalexample> <programlisting role="php"> <![CDATA[ <?php -// íÚãá ãÚ PHP 3 æ PHP 4. +// êÙåä åÙ PHP 3 è PHP 4. class Auto_Cart extends Cart { function Auto_Cart() { $this->add_item("10", 1); @@ -342,31 +342,31 @@ </informalexample> <para> - íõÚÑøöÝõ åÐÇ ÕöäÝ Auto_Cart æåæ ÚÈÇÑÉ Úä ÓáøÉ "Cart" ÅÖÇÝÉ Åáì ÈÇäíÉ - ÊÞæã ÈÇÓÊåáÇá ÇáÓøáøÉ ÈÛÑÖ æÇÍÏ ãä ÇáÓøáÚÉ ÑÞã "10" - Ýí ßáø ãÑøÉ íÌÑí ÝíåÇ ÇäÔÇÁ ÝíåÇ Auto_Cart ÌÏíÏ ÈæÇÓØÉ "new". ÈÇãßÇä ÇáÈÇäíÇÊ - ÃÎÐ ÏáÇÆá "arguments"¡ æÇáÊíø íãßä Ãä Êßæä ÇÎÊíÇÑíøÉ¡ ããÇ - íÌÚáåÇ ÃßËÑ ÞÇÈáíÉ ááÇÓÊÎÏÇã ÈÔßá ãõÚúÊóÈóÑ. ááÇÓÊãÑÇÑ Ýí ÇáÞÏÑÉ Úáì ÇÓÊÎÏÇã ÇáÕøöäÝ - ãä Ïæä ÇáãóÚúáóãóÇÊ "parameters"¡ íÊæÌÈ ÌÚá ßÇÝÉ ÇáãóÚúáóãóÇÊ¡ ÈÇáäøÓÈÉ ááÈÇäíÇÊ¡ - ÇÎÊíÇÑíøÉ ÈÊÞÏíã Þíã ÇÝÊÑÇÖíøÉ. + êïÙÑñðáï çÐÇ Õðæá Auto_Cart èçè ÙÈÇÑÉ Ùæ ÓäñÉ "Cart" ÅÖÇáÉ Åäé ÈÇæêÉ + Êâèå ÈÇÓÊçäÇä ÇäÓñäñÉ ÈÚÑÖ èÇÍÏ åæ ÇäÓñäÙÉ Ñâå "10" + áê ãäñ åÑñÉ êÌÑê áêçÇ ÇæÔÇÁ áêçÇ Auto_Cart ÌÏêÏ ÈèÇÓ×É "new". ÈÇåãÇæ ÇäÈÇæêÇÊ + ÃÎÐ ÏäÇÆä "arguments"¬ èÇäÊêñ êåãæ Ãæ Êãèæ ÇÎÊêÇÑêñɬ ååÇ + êÌÙäçÇ ÃãËÑ âÇÈäêÉ ääÇÓÊÎÏÇå ÈÔãä åïÙòÊîÈîÑ. ääÇÓÊåÑÇÑ áê ÇäâÏÑÉ Ùäé ÇÓÊÎÏÇå ÇäÕñðæá + åæ Ïèæ ÇäåîÙòäîåîÇÊ "parameters"¬ êÊèÌÈ ÌÙä ãÇáÉ ÇäåîÙòäîåîÇʬ ÈÇäæñÓÈÉ ääÈÇæêÇʬ + ÇÎÊêÇÑêñÉ ÈÊâÏêå âêå ÇáÊÑÇÖêñÉ. </para> <informalexample> <programlisting role="php"> <![CDATA[ <?php -// íÚãá ãÚ PHP 3 æ PHP 4. +// êÙåä åÙ PHP 3 è PHP 4. class Constructor_Cart extends Cart { function Constructor_Cart($item = "10", $num = 1) { $this->add_item ($item, $num); } } -// ÇÈÊíÇÚ äÝÓ ÇáÈÖÇÆÚ ÇáãõãøöáóÉ ÇáÞÏíãÉ. +// ÇÈÊêÇÙ æáÓ ÇäÈÖÇÆÙ ÇäåïåñðäîÉ ÇäâÏêåÉ. $default_cart = new Constructor_Cart; -// ÇÈÊíÇÚ ÍÞíÞíø... +// ÇÈÊêÇÙ Íâêâêñ... $different_cart = new Constructor_Cart("20", 17); ?> @@ -375,16 +375,16 @@ </informalexample> <para> - íãßäß ÃíÖÇ ÇÓÊÎÏÇã ãõÔÛøöá <literal>@</literal> ÈÛÑÖ - <emphasis>ßÊã "mute"</emphasis> ÇáÃÎØÇÁ ÇáØøóÇÑÆÉ Ýí ÇáÈÇäíÉ¡ Úáì ÓÈíá ÇáãËÇá: + êåãæã ÃêÖÇ ÇÓÊÎÏÇå åïÔÚñðä <literal>@</literal> ÈÚÑÖ + <emphasis>ãÊå "mute"</emphasis> ÇäÃÎ×ÇÁ Çä×ñîÇÑÆÉ áê ÇäÈÇæêɬ Ùäé ÓÈêä ÇäåËÇä: <literal>@new</literal>. </para> <caution> <simpara> - Ýí PHP 3¡ ÊÊæÝÑ Úáì ÇáÃÕäÇÝ ÇáãõÔÊøóÞóÉ æÇáÈÇäíÇÊ Úáì ÚÏÏ ãä - ÇáÊøóÞííÏÇÊ "limitations". íÌÈ ÞÑÇÁÉ ÇáÃãËáÉ ÇáÂÊíøóÉ ÈÇÍÊÑÇÓ - áÝåã åÐå ÇáÊøÞííÏÇÊ. + áê PHP 3¬ ÊÊèáÑ Ùäé ÇäÃÕæÇá ÇäåïÔÊñîâîÉ èÇäÈÇæêÇÊ Ùäé ÙÏÏ åæ + ÇäÊñîâêêÏÇÊ "limitations". êÌÈ âÑÇÁÉ ÇäÃåËäÉ ÇäÂÊêñîÉ ÈÇÍÊÑÇÓ + äáçå çÐç ÇäÊñâêêÏÇÊ. </simpara> </caution> @@ -394,17 +394,17 @@ <?php class A { function A() { - echo "ÃäÇ ÈÇäíÉ A.<br />\n"; + echo "ÃæÇ ÈÇæêÉ A.<br />\n"; } } class B extends A { function C() { - echo "ÃäÇ ÏÇáÉ ÇÚÊíÇÏíøÉ.<br />\n"; + echo "ÃæÇ ÏÇäÉ ÇÙÊêÇÏêñÉ.<br />\n"; } } -// áÇ ÈÇäíÉ íÌÑí ãäÇÏÇÊåÇ Ýí PHP 3. +// äÇ ÈÇæêÉ êÌÑê åæÇÏÇÊçÇ áê PHP 3. $b = new B; ?> ]]> @@ -412,17 +412,17 @@ </informalexample> <para> - Ýí PHP 3¡ æáÇ ÃíÉ ÈÇäíÉ ÊÊã ãäÇÏÇÊåÇ Ýí ÇáãËÇá ÇáÚáæíø. - ÇáÞÇÚÏÉ Ýí PHP 3 åí: 'ÈÇäíÉ ãÇ åí ÚÈÇÑÉ Úä ÏÇáÉ áåÇ äÝÓ - ÇáÅÓã ãËá ÇáÕøöäÝ.'. ÅÓã ÇáÕøöäÝ åæ B æáíÓ åäÇß - ÃíøÉ ÏÇáÉ ÊõÏÚóì B() Ýí ÇáÕøöäÝ B. áã íÍÏË ÔíÁ. + áê PHP 3¬ èäÇ ÃêÉ ÈÇæêÉ ÊÊå åæÇÏÇÊçÇ áê ÇäåËÇä ÇäÙäèêñ. + ÇäâÇÙÏÉ áê PHP 3 çê: 'ÈÇæêÉ åÇ çê ÙÈÇÑÉ Ùæ ÏÇäÉ äçÇ æáÓ + ÇäÅÓå åËä ÇäÕñðæá.'. ÅÓå ÇäÕñðæá çè B èäêÓ çæÇã + ÃêñÉ ÏÇäÉ ÊïÏÙîé B() áê ÇäÕñðæá B. äå êÍÏË ÔêÁ. </para> <para> - Êãø ÊÞæíã åÐÇ ÇáÃãÑ Ýí PHP 4 ÈÅÏÎÇá ÞÇÚÏÉ ÃÎÑì: ÅÐÇ áã íÊæÝÑ ÕöäÝñ ãÇ - Úáì ÈÇäíÉ¡ ÝÅäøóå íÊã ãäÇÏÇÉ ÈÇäíÉ ÇáÕøöäÝ ÇáÞÇÚÏíø "base class"¡ - Åä æõÌöÏ. ÇáãËÇá ÇáÃÚáì íÄÏí Åáì ØÈÇÚÉ - 'ÃäÇ ÈÇäíÉ A.<br />' Ýí PHP 4. + Êåñ Êâèêå çÐÇ ÇäÃåÑ áê PHP 4 ÈÅÏÎÇä âÇÙÏÉ ÃÎÑé: ÅÐÇ äå êÊèáÑ Õðæáì åÇ + Ùäé ÈÇæêɬ áÅæñîç êÊå åæÇÏÇÉ ÈÇæêÉ ÇäÕñðæá ÇäâÇÙÏêñ "base class"¬ + Åæ èïÌðÏ. ÇäåËÇä ÇäÃÙäé êÄÏê Åäé ×ÈÇÙÉ + 'ÃæÇ ÈÇæêÉ A.<br />' áê PHP 4. </para> <informalexample> @@ -433,13 +433,13 @@ { function A() { - echo "ÃäÇ ÈÇäíÉ A.<br />\n"; + echo "ÃæÇ ÈÇæêÉ A.<br />\n"; } function B() { - echo "ÃäÇ ÏÇáÉ ÇÚÊíÇÏíøÉ ÊõÏúÚóì B Ýí ÇáÕøöäÝ A.<br />\n"; - echo "áÓÊ ÈÇäíÉ Ýí A.<br />\n"; + echo "ÃæÇ ÏÇäÉ ÇÙÊêÇÏêñÉ ÊïÏòÙîé B áê ÇäÕñðæá A.<br />\n"; + echo "äÓÊ ÈÇæêÉ áê A.<br />\n"; } } @@ -447,11 +447,11 @@ { function C() { - echo "ÃäÇ ÏÇáÉ ÇÚÊíÇÏíøÉ.<br />\n"; + echo "ÃæÇ ÏÇäÉ ÇÙÊêÇÏêñÉ.<br />\n"; } } -// ÓíÄÏí åÐÇ Åáì ãäÇÏÇÉ B() Úáì ÃäøåÇ ÈÇäíÉ. +// ÓêÄÏê çÐÇ Åäé åæÇÏÇÉ B() Ùäé ÃæñçÇ ÈÇæêÉ. $b = new B; ?> ]]> @@ -459,43 +459,43 @@ </informalexample> <para> - Ýí PHP 3¡ ÇáÏøÇáÉ B() Ýí ÇáÕøöäÝ A ÓÊõÕÈöÍ ÝÌÃÉ - ÈÇäíÉð Ýí ÇáÕøöäÝ B ÈÇáÑøÛã ãä ÚÏã ãÞÕæÏíÉ ÔíÁ ãä åÐÇ ÇáÞÈíá. - ÇáÞÇÚÏÉ Ýí PHP 3 åí: 'ÈÇäíÉñ ãÇ åí ÏÇáÉ áåÇ äÝÓ - ÇáÅÓã ãËá ÇáÕøöäÝ.'. áÇ ÊßÊÑË PHP 3 ÅÐÇ Êãø ÊÚÑíÝ ÇáÏøÇáÉ - Ýí ÇáÕøöäÝ B Ãæ ÅÐÇ ÊãøÊ æÑÇËÊåÇ. + áê PHP 3¬ ÇäÏñÇäÉ B() áê ÇäÕñðæá A ÓÊïÕÈðÍ áÌÃÉ + ÈÇæêÉë áê ÇäÕñðæá B ÈÇäÑñÚå åæ ÙÏå åâÕèÏêÉ ÔêÁ åæ çÐÇ ÇäâÈêä. + ÇäâÇÙÏÉ áê PHP 3 çê: 'ÈÇæêÉì åÇ çê ÏÇäÉ äçÇ æáÓ + ÇäÅÓå åËä ÇäÕñðæá.'. äÇ ÊãÊÑË PHP 3 ÅÐÇ Êåñ ÊÙÑêá ÇäÏñÇäÉ + áê ÇäÕñðæá B Ãè ÅÐÇ ÊåñÊ èÑÇËÊçÇ. </para> <para> - Êãø ÊÞæíã åÐÇ ÇáÃãÑ Ýí PHP 4 ÈÊÚÏíá ÇáÞÇÚÏÉ Åáì: 'ÈÇäíÉñ ãÇ - åí ÏÇáÉ áåÇ äÝÓ ÇáÅÓã ãËá ÇáÕøöäÝ ÇáÐøí ÌÑì ÊÚÑíÝåÇ - Èå.'. æåßÐÇ¡ ÝÅäøå ÈÜPHP 4¡ ÇáÕøöäÝ B áä íÊæÝÑ Úáì ÏÇáÉ ÈÇäíøÉ¡ - ÈãÈÇÏÑÉ ÐÇÊíøÉ¡ æÓÊÊã ãäÇÏÇÉ ÈÇäíÉ ÇáÕøöäÝ ÇáÞÇÚÏíø - áíõØúÈóÚ 'ÃäÇ ÈÇäíÉ A.<br />'. + Êåñ Êâèêå çÐÇ ÇäÃåÑ áê PHP 4 ÈÊÙÏêä ÇäâÇÙÏÉ Åäé: 'ÈÇæêÉì åÇ + çê ÏÇäÉ äçÇ æáÓ ÇäÅÓå åËä ÇäÕñðæá ÇäÐñê ÌÑé ÊÙÑêáçÇ + Èç.'. èçãÐǬ áÅæñç ÈàPHP 4¬ ÇäÕñðæá B äæ êÊèáÑ Ùäé ÏÇäÉ ÈÇæêñɬ + ÈåÈÇÏÑÉ ÐÇÊêñɬ èÓÊÊå åæÇÏÇÉ ÈÇæêÉ ÇäÕñðæá ÇäâÇÙÏêñ + äêï×òÈîÙ 'ÃæÇ ÈÇæêÉ A.<br />'. </para> <caution> <simpara> - áÇ PHP 3 æáÇ PHP 4 ÊõäÇÏí ÈÇäíÇÊ ÇáÕøöäÝ ÇáÞÇÚÏíø - ÂáíÇ ÇäØáÇÞÇð ãä ÈÇäíÉ ÕöäÝ ãõÔÊøóÞ. ÊÞÚ Úáì ÚÇÊöÞß - ãÓÄæáíÉ äÔÑ äÏÇÁ ÇáÈÇäíÇÊ - ÃÝÞíÇð ÍíË íáíÞ ÇáãÞÇã. + äÇ PHP 3 èäÇ PHP 4 ÊïæÇÏê ÈÇæêÇÊ ÇäÕñðæá ÇäâÇÙÏêñ + ÂäêÇ Çæ×äÇâÇë åæ ÈÇæêÉ Õðæá åïÔÊñîâ. ÊâÙ Ùäé ÙÇÊðâã + åÓÄèäêÉ æÔÑ æÏÇÁ ÇäÈÇæêÇÊ + ÃáâêÇë ÍêË êäêâ ÇäåâÇå. </simpara> </caution> <note> <simpara> - áíÓÊ åäÇß åÇÏãÇÊ "destructors" Ýí PHP 3 Ãæ PHP 4. íãßäß ÇÓÊÎÏÇã - <function>register_shutdown_function</function> ÈÏáÇ ãä Ðáß - ÈÛÑÖ ãõÍÇßÇÉ ãõÚÙóã ÊÃËíÑÇÊ ÇáåÇÏãÇÊ. + äêÓÊ çæÇã çÇÏåÇÊ "destructors" áê PHP 3 Ãè PHP 4. êåãæã ÇÓÊÎÏÇå + <function>register_shutdown_function</function> ÈÏäÇ åæ Ðäã + ÈÚÑÖ åïÍÇãÇÉ åïÙØîå ÊÃËêÑÇÊ ÇäçÇÏåÇÊ. </simpara> </note> <para> - ÇáåÇÏãÇÊ åí ÏæÇá ÊÊã ãäÇÏÇÊåÇ ÂáíÇ - ÚäÏ ÊÍØíã ßÇÆä ãÇ¡ ÅãÇ ÈæÇÓØÉ <function>unset</function> - Ãæ ÈÈÓÇØÉ ÈÇáÎÑæÌ ãä ÇáãÏì "scope". áíÓÊ åäÇß åÇÏãÇÊ - Ýí PHP. + ÇäçÇÏåÇÊ çê ÏèÇä ÊÊå åæÇÏÇÊçÇ ÂäêÇ + ÙæÏ ÊÍ×êå ãÇÆæ åǬ ÅåÇ ÈèÇÓ×É <function>unset</function> + Ãè ÈÈÓÇ×É ÈÇäÎÑèÌ åæ ÇäåÏé "scope". äêÓÊ çæÇã çÇÏåÇÊ + áê PHP. </para> </sect1> @@ -504,15 +504,15 @@ <caution> <simpara> - The following is valid for PHP 4 and later only. + åÇ êÃÊê êÕäÍ áâ× äàPHP 4 èåÇ êäêçÇ. </simpara> </caution> <para> - Sometimes it is useful to refer to functions and variables - in base classes or to refer to functions in classes that - have not yet any instances. The :: operator is being used - for this. + åæ ÇäåáêÏ ÃÍêÇæÇë ÇäÅÍÇäÉ Åäé ÏèÇä èåïÊÚêñðÑÇÊ + áê ÇäÃÕæÇá ÇäâÇÙÏêñÉ Ãè ÇäÅÍÇäÉ Åäé ÏèÇä áê ÃÕæÇá + äÇ ÊÊèáñÑ ÈÙÏ Ùäé Ãêñ åËêä. êïÓòÊîÎòÏîå åïÔÚñðä :: + äçÐÇ ÇäÚÑÖ. </para> <informalexample> @@ -521,28 +521,28 @@ <?php class A { function example() { - echo "I am the original function A::example().<br />\n"; + echo "ÃæÇ ÇäÏñÇäÉ ÇäÃÕäêñÉ A::example().<br />\n"; } } class B extends A { function example() { - echo "I am the redefined function B::example().<br />\n"; + echo "ÃæÇ ÇäÏñÇäÉ B::example()¬ ÇäåïÙÇÏ ÊÙÑêáçÇ.<br />\n"; A::example(); } } -// there is no object of class A. -// this will print -// I am the original function A::example().<br /> +// äêÓ çæÇã ãÇÆæ åæ ÇäÕñðæá A. +// ÓêÄÏê çÐÇ Åäé ×ÈÇÙÉ +// ÃæÇ ÇäÏñÇäÉ ÇäÃÕäêñîÉ A::example().<br /> A::example(); -// create an object of class B. +// ÅæÔÇÁ ãÇÆæ åæ ÇäÕñðæá B. $b = new B; -// this will print -// I am the redefined function B::example().<br /> -// I am the original function A::example().<br /> +// ÓêÄÏê çÐÇ Åäé ×ÈÇÙÉ +// ÃæÇ ÇäÏñÇäÉ B::example()¬ ÇäåïÙÇÏ ÊÙÑêáçÇ.<br /> +// ÃæÇ ÇäÏñÇäÉ ÇäÃÕäêñÉ A::example().<br /> $b->example(); ?> ]]> @@ -550,36 +550,36 @@ </informalexample> <para> - The above example calls the function example() in - class A, but there is no object of class A, so that - we cannot write $a->example() or similar. Instead we - call example() as a 'class function', that is, as a - function of the class itself, not any object of that - class. + êæÇÏê ÇäåËÇä ÇäÙäèêñ ÇäÏñÇäÉî example() áê + ÇäÕñðæá A äãæ äêÓ çæÇã ãÇÆæ åæ ÇäÕñðæá A¬ äÐäã + êÊÙÐÑ ÙäêæÇ ãÊÇÈÉ $a->example() Ãè åÇ êÔÈç ÈÐäã. ÈÏäÇ åæ Ðä㬠+ ææÇÏê example() Ùäé ÃæñçÇ 'ÏÇäÉ Õðæá - class function'¬ Ãê¬ + ãÏÇäÉ åæ ÇäÕñðæá æáÓç èäêÓ Ãê ãÇÆæ åæ çÐÇ + ÇäÕñðæá. </para> <para> - There are class functions, but there are no class variables. - In fact, there is no object at all at the time of the call. - Thus, a class function may not use any object variables (but - it can use local and global variables), and it may no use - <varname>$this</varname> at all. + ÊèÌÏ ÏèÇä ääÃÕæÇá "class functions" äãæ äÇ ÊèÌÏ åïÊÚêñðÑÇÊ ääÃÕæÇá "class variables". + áê ÇäèÇâÙ¬ äêÓÊ çæÇã ãÇÆæ ÈÊÇÊÇë¬ ÎäÇä èçäÉ ÇäåæÇÏÇÉ. + ÈÇäÊñÇäê¬ äÇ ÊÓÊ×êÙ ÏÇäÉ Õðæá ÇÓÊÎÏÇå ÃêñÉ åïÊÚêñðÑÇÊ ãÇÆæ "object variables" (äãæ + ÊÓÊ×êÙ ÇÓÊÎÏÇå åïÊÚêñðÑÇÊ åÍäêñÉ èÔÇåäÉ)¬ èäêÓ ÈÇåãÇæçÇ ÇÓÊÎÏÇå + <varname>$this</varname> ÈÊÇÊÇë. </para> <para> - In the above example, class B redefines the function example(). - The original definition in class A is shadowed - and no longer available, unless you are referring specifically - to the implementation of example() in class A using the - ::-operator. Write A::example() to do this (in fact, you - should be writing parent::example(), as shown in the next - section). + áê ÇäåËÇä ÇäÙäèêñ¬ êâèå ÇäÕñðæá B ÈÅÙÇÏÉ ÊÙÑêá ÇäÏñÇäÉ example(). + ÇäÊñÙÑêá ÇäÃÕäêñ áê ÇäÕñðæá A åïØîäñîä + èäå êÙïÏ åïÊÇÍÇë ÅäÇ ÅÐÇ ãæÊ ÈÕÏÏ ÇäÅÍÇäÉ ÎÕêÕÇ + Åäé ÅÏÑÇÌ "implementation" example() áê ÇäÕñðæá A ÈÇÓÊÎÏÇå + åïÔÚñðä ::. ÇãÊÈ A::example() ääâêÇå ÈçÐÇ (áê ÇäèÇâÙ¬ + êÊèÌÈ Ùäêã ãÊÇÈÉ parent::example()¬ åËäåÇ çè åïèÖñîÍ áê Çäåâ×Ù + ÇäÂÊêñ). </para> <para> - In this context, there is a current object and it may have object - variables. Thus, when used from WITHIN an object function, you may use - <varname>$this</varname> and object variables. + áê çÐÇ ÇäÓñðêÇ⬠çæÇã ãÇÆæ ÍÇäêñ èäÑÈåÇ äÏêç åïÊÚêñðÑÇÊ ãÇÆæêñÉ "object + variables". èçãÐǬ áÙæÏ ÇÓÊÎÏÇåç Çæ×äÇâÇ åæ ÏÇÎä ÏÇäÉ ãÇÆæêñÉ "object function"¬ êåãæã ÇÓÊÎÏÇå + <varname>$this</varname> èÇäåïÊÚêñðÑÇÊ ÇäãÇÆæêñÉ. </para> </sect1> @@ -588,22 +588,22 @@ <title><literal>parent</literal></title> <para> - You may find yourself writing code that refers to - variables and functions in base classes. This is - particularly true if your derived class is a refinement - or specialisation of code in your base class. + êåãæ Ãæ ÊÌÏ æáÓã ÈÕÏÏ ãÊÇÈÉ ÔêáÑÉ ÊïÍðêäï Åäé + åïÊÚêñðÑÇÊ èÏèÇä áê ÇäÃÕæÇá ÇäâÇÙÏêñÉ. êÕÏïâ çÐÇ + ÎÇÕÉ ÅÐÇ ãÇæ Õðæáã ÇäåïÔÊñîâ ÙÈÇÑÉ Ùæ ÊÕáêÉ + Ãè ÊÎÕêÕ ÔêáÑÉ áê Õðæáðã ÇäâÇÙÏêñ. </para> <para> - Instead of using the literal name of the base class in your - code, you should be using the special name - <literal>parent</literal>, which refers to the name of your - base class as given in the <literal>extends</literal> - declaration of your class. By doing this, you avoid using the - name of your base class in more than one place. Should - your inheritance tree change during implementation, the - change is easily made by simply changing the - <literal>extends</literal> declaration of your class. + ÈÏäÇ åæ ÇÓÊÎÏÇå ÇäÅÓå ÇäÍÑáêñ ääÕðæá ÇäâÇÙÏêñ áê + ÔêáÑÊ㬠êÊèÌñîÈ Ùäêã ÇÓÊÎÏÇå ÇäÅÓå ÇäÎÇÕ + <literal>parent</literal> ÇäÐñê êïÍêä Åäé ÅÓå + Õðæáðã ÇäâÇÙÏêñ åËäåÇ çè åïÙò×îé áê ÊÕÑêÍ <literal>extends</literal> + ÇäÎÇÕ ÈÕðæáã. ÈÇäâêÇå ÈçÐǬ Êãèæ ÈÕÏÏ ÊÌæñïÈ ÇÓÊÎÏÇå + ÅÓå Õðæáã ÇäâÇÙÏêñ áê ÃãËÑ åæ åãÇæ. Åæ ×Ñà + èÊÚêñîÑÊ ÔÌÑÉ ÇäèÑÇËÉ "inheritance tree" áê ÇËæÇÁ ÇäÅÏÑÇÌ "implementation"¬ áÅæñ + ÇäÊñÚêêÑ êÍÏË ÈÓçèäÉ åæ ÎäÇä åÌÑÏ ÊÚêêÑ + ÊÕÑêÍ <literal>extends</literal> ÇäÎÇÕ ÈÕðæáã. </para> <informalexample> @@ -612,20 +612,20 @@ <?php class A { function example() { - echo "I am A::example() and provide basic functionality.<br />\n"; + echo "ÃæÇ A::example() èÃèáñðÑ èØÇÆáêÉ âÇÙÏêñÉ.<br />\n"; } } class B extends A { function example() { - echo "I am B::example() and provide additional functionality.<br />\n"; + echo "ÃæÇ B::example() èÃèáñðÑ èØÇÆáêÉ ÅÖÇáêñÉ.<br />\n"; parent::example(); } } $b = new B; -// This will call B::example(), which will in turn call A::example(). +// ÓêïæÇÏê çÐÇ B::example() ÇäÐñê ÈÏèÑç ÓêïæÇÏê A::example(). $b->example(); ?> ]]> @@ -634,44 +634,44 @@ </sect1> <sect1 id="language.oop.serialization"> - <title>Serializing objects - objects in sessions</title> + <title>ÓîäòÓîäîÉ "Serializing" ÇäãÇÆæÇÊ - ÇäãÇÆæÇÊ áê ÇäÌäÓÇÊ</title> <note> <simpara> - In PHP 3, objects will lose their class association - throughout the process of serialization and unserialization. - The resulting variable is of type object, but has no class - and no methods, thus it is pretty useless (it has become - just like an array with a funny syntax). + áê PHP 3¬ ÊîáòâðÏï ÇäãÇÆæÇÊï ÊÔÇÑïãçÇ ÇäÕñðæáêñ "class association" + Ùäé ÇåÊÏÇÏ ÓêÑèÑÉ ÇäÓñäòÓîäîÉ "serialization" èÅÒÇäÉ ÇäÓñäòÓîäîÉ "unserialization". + ÇäåïÊÚêñðÑÉ ÇäÍÇÕðäÉ çê åæ æèÙ ÇäãÇÆæÇÊ äãæñçÇ äÇ ÊÊèáîÑ Ùäé Õðæá + èäÇ Ùäé åæÇçÌ "methods"¬ èçãÐÇ ÃÕÈÍ ÇäÃåÑ Ïèæ áÇÆÏÉ ÊïÐãîÑ (ÃÕÈÍ + ãåïÌÑñîÏ åÕáèáÉ ÐÇÊ ÕðêÇÚÉ ÚÑêÈÉ). </simpara> </note> <caution> <simpara> - The following information is valid for PHP 4 only. + ÇäåÙäèåÇÊ ÇäÊñÇäêñÉ ÊÕäïÍ åÙ PHP 4 áâ×. </simpara> </caution> <para> - <function>serialize</function> returns a string containing a - byte-stream representation of any value that can be stored in - PHP. <function>unserialize</function> can use this string to - recreate the original variable values. Using serialize to - save an object will save all variables in an object. The - functions in an object will not be saved, only the name of - the class. + ÊïÑÌðÙï <function>serialize</function> ÓðäÓðäÉ æÕêñîÉ "string" ÊÊÖåæ + ÊåËêäÇ Ïáâê-ÇäÈÇêÊÇÊ "byte-stream representation" äÃêñÉ âêåÉ êåãæ ÍáØçÇ áê + PHP. êåãæ äà<function>unserialize</function> ÇÓÊÎÏÇå çÐç ÇäÓñÄäÓäÉ ÇäæñÕêñÉ + äÅÙÇÏÉ ÇæÔÇÁ âêå ÇäåïÊÚêñðÑÉ ÇäÃÕäêñîÉ. Åæñ ÇÓÊÎÏÇå serialize ÈÚÑÖ + ÍáØ ãÇÆæ åÇ êÄÏê Åäé ÍáØ ãÇáÉ ÇäåïÊÚêñðÑÇÊ áê ãÇÆæí åÇ. äæ + êÊå ÍáØ ÇäÏñèÇä ÇäåÊèÇÌÏÉ áê ãÇÆæ åǬ áâ× ÅÓå + ÇäÕñðæá. </para> <para> - In order to be able to <function>unserialize</function> an object, the - class of that object needs to be defined. That is, if you have an object - <varname>$a</varname> of class A on page1.php and serialize this, you'll - get a string that refers to class A and contains all values of variabled - contained in <varname>$a</varname>. If you want to be able to unserialize - this on page2.php, recreating <varname>$a</varname> of class A, the - definition of class A must be present in page2.php. This can be done for - example by storing the class definition of class A in an include file and - including this file in both page1.php and page2.php. + ÈÚÑÖ ÇäÊïåãñïæ åæ ÅÒÇäÉ ÓîäòÓîäîÉ "<function>unserialize</function>" ãÇÆæí åǬ êÍÊÇÌ + Õðæá çÐÇ ÇäãÇÆæ äÃæ êïÙÑñîá. ÈåÙæé Ãæñç ÅÐÇ ãÇæ äÏêã ãÇÆæì åÇ + <varname>$a</varname> åæ ÇäÕñðæá A Ùäé safha1.php èâïåÊî ÈÓîäòÓîäîÊðçð "serialize"¬ áÅæñîã + ÓÊÍÕïä Ùäé ÓðäòÓðäîÉ æÕêñîÉ "string" ÊïÍêäï Åäé ÇäÕñðæá A èÊÍÊèê ãÇáÉ âêå ÇäåïÊÚêñðÑÇÊ + ÇäåïÍÊèÇÉ áê <varname>$a</varname>. ÅÐÇ ÑÚÈÊ áê Ãæ ÊÊåãæ åæ ÅÒÇäÉ ÓîäòÓîäîÉ "unserialize" + çÐÇ Ùäé safha2.php¬ ÈÅÙÇÏÉ ÇæÔÇÁ <varname>$a</varname> åæ ÇäÕñðæá A¬ áÅæñ + ÊÙÑêá ÇäÕñðæá A êÌÈ Ãæ êãèæ ÍÇÖÑÇ áê safha2.php. êåãæ ÇäâêÇå ÈçÐǬ Ùäé ÓÈêä + ÇäåËÇä¬ åæ ÎäÇä ÍáØ ÊÙÑêá ÇäÕñðæá ÇäÎÇÕ ÈÇäÕñðæá A áê åäá ÊÖåêæêñ "include file" + èÊÖåêæ çÐÇ Çäåäá áê ãäñ åæ safha1.php è safha2.php. </para> <informalexample> @@ -688,26 +688,26 @@ } } -// page1.php: +// safha1.php: include("classa.inc"); $a = new A; $s = serialize($a); - // store $s somewhere where page2.php can find it. + // ÍáØ $s áê åãÇæ åÇ ÍêË êåãæ äà safha2.php ÅêÌÇÏç. $fp = fopen("store", "w"); fwrite($fp, $s); fclose($fp); -// page2.php: +// safha2.php: - // this is needed for the unserialize to work properly. + // çæÇã ÍÇÌÉ äçÐÇ ÍÊé ÊÙåä ÅÒÇäÉ ÇäÓîäòÓîäîÉ ÈÔãä ÕÍêÍ. include("classa.inc"); $s = implode("", @file("store")); $a = unserialize($s); - // now use the function show_one() of the $a object. + // ÇäÂæ¬ ÇÓÊÎÏå ÇäÏñÇäÉ show_one() ÇäÎÇÕÉ ÈÇäãÇÆðæ $a . $a->show_one(); ?> ]]> @@ -715,72 +715,72 @@ </informalexample> <para> - If you are using sessions and use <function>session_register</function> - to register objects, these objects are serialized automatically - at the end of each PHP page, and are unserialized automatically on - each of the following pages. This basically means that these objects - can show up on any of your pages once they become part of your - session. + ÅÐÇ ãïæÊ ÈÕÏÏ ÇÓÊÎÏÇå ÇäÌäÓÇÊ èãÐÇ <function>session_register</function> + ÈÚÑÖ ÊÓÌêä ÇäãÇÆðæÇʬ áÅæñç ÊÊå ÓîäòÓîäîÉ çÐç ÇäãÇÆðæÇʬ ÈÕèÑÉ Âäêñîɬ + ÙæÏ æçÇêÉ ãäñ ÕáÍÉ PHP èãÐäã ÊÊå ÅÒÇäÉ ÓîäòÓîäîÊçǬ ÈÕèÑÉ Âäêñîɬ + ÙæÏ ãäñ åæ ÇäÕñäÅÍÇÊ ÇäÊñÇäêñîÉ. êÙæê çÐǬ ÌèçÑêÇë¬ Ãæñ çÐç ÇäãÇÆæÇÊ + êåãæçÇ ÇäØñïçèÑ áê Ãêñ åæ ÕáÍÇÊã ÈåÌÑÏ Ãæ ÊïÕÈÍ ÌÒÁÇë åæ + ÌäÓÊã. </para> <para> - It is strongly recommended that you include the class - definitions of all such registered objects on all of your - pages, even if you do not actually use these classes on all - of your pages. If you don't and an object is being - unserialized without its class definition being present, it - will lose its class association and become an object of class - <literal>stdClass</literal> without any functions available - at all, that is, it will become quite useless. + êïèÕîé ÈâèÉ Ãæ Êâèå ÈÊÖåêæ ÇäÊñîÙÑêáÇÊ + ÇäÕñðæáêñîÉ ÇäÎÇÕÉ ÈåËä çÐç ÇäãÇÆæÇÊ ÇäåïÓÌñîäɬ ãÇáÉë¬ Ùäé ãäñ + ÕáÍÇÊã ÍÊé èÅæ äå Êãæ ÈÕÏÏ ÇÓÊÎÏÇå çÐç ÇäÃÕæÇᬠÍÇäêǬ Ùäé ãÇáÉ + ÕáÍÇÊã. ÅÐÇ äå Êâïå ÈÐäã èÍÏË Ãæ ÃÒêäÊ ÓîäòÓîäîÉ ãÇÆæ + åæ Ïèæ ÍÖèÑ ÊÙÑêáç ÇäÕñðæáêñ¬ áÅæñ + ÓêáâðÏ ÊÔÇÑãç ÇäÕñðæáêñ "class association" èêïÕÈͬ ãïäñðêÇë¬ ãÇÆæÇë åæ ÇäÕñðæá + <literal>stdClass</literal> åæ Ïèæ ÃêñÉ ÏèÇä åïÊÇÍÉ + ååÇ êÙæê Ãæñç ÓêÕÈÍ ÚêÑ åïáêÏí ÈÊÇÊÇë. </para> <para> - So if in the example above <varname>$a</varname> became part of a session - by running <literal>session_register("a")</literal>, you should include the - file <literal>classa.inc</literal> on all of your pages, not only page1.php - and page2.php. + ÈÇäÊñÇäê¬ ÅÐÇ ÃÕÈÍ <varname>$a</varname>¬ áê ÇäåËÇä ÇäÙïäèêñ¬ ÌÒÁÇë åæ ÌäÓÉí åÇ + åæ ÎäÇä ÊÔÚêä <literal>session_register("a")</literal>¬ áÅæñîç êÊèÌñîÈ Ùäêã ÊÖåêæ + Çäåäá <literal>classa.inc</literal> ÈãÇáÉ ÕáÍÇÊã èäêÓ áâ× safha1.php + è safha2.php. </para> </sect1> <sect1 id="language.oop.magic-functions"> - <title>The magic functions <literal>__sleep</literal> and <literal>__wakeup</literal></title> + <title>ÇäÏñèÇä ÇäÓñðÍÑêñîÉ <literal>__sleep</literal> è <literal>__wakeup</literal></title> <para> - <function>serialize</function> checks if your class has a function with - the magic name <literal>__sleep</literal>. If so, that function is - being run prior to any serialization. It can clean up the object - and is supposed to return an array with the names of all variables - of that object that should be serialized. + ÊÊáâñîÏ <function>serialize</function> ÅÐÇ ãÇæ Õðæáã êÊèáñîÑ Ùäé Ùäé ÏÇäÉ ÊåÊäã + ÇäÅÓå ÇäÓñðÍÑêñ <literal>__sleep</literal>. Åæ ãÇæ ÇäÃåÑ ãÐä㬠áÅæñîç êÊå ÊÔÚêä çÐç ÇäÏñÇäÉ + âÈä ÃêñÉ ÙåäêÉ ÓîäòÓîäîÉ "serialization". êåãæçÇ ÊæØêá ÇäãÇÆæ + èêïáÊîÑîÖ ÃæñîçÇ ÓÊïÑÌðÙï åÕáèáÉë ÈÃÓåÇÁ ãÇáÉ åïÊÚêñðÑÇÊ + çÐÇ ÇäãÇÆæ ÇäåïÊèÌñðÈ ÓîäòÓîäîÊçÇ. </para> <para> - The intended use of <literal>__sleep</literal> is to close any - database connections that object may have, committing pending - data or perform similar cleanup tasks. Also, the function is - useful if you have very large objects which need not be - saved completely. + ÇäÇÓÊÎÏÇå ÇäåïÈòÊîÚîé åæ <literal>__sleep</literal> çè ÅÚäÇâ ÃêñîÉ + ÇÊÕÇäÇÊ ÈÇäâèÇÙÏ ÇäÈêÇæêñÉ êåãæ Ãæ êåÊäãçÇ çÐÇ ÇäãÇÆæ¬ ÊÙçñïÏ ÇäÈêÇæÇÊ + ÇäÙÇäðâîÉ Ãè ÃÏÇÁ åçÇå ÊæØêá ååÇËäÉ. ãÐä㬠áÅæñ ÇäÏñÇäÉ Êãèæ + åïáêÏÉ ÅÐÇ ãæÊ ÊåÊäã ãÇÆæÇÊ ãÈêÑÉ ÌÏÇë äêÓÊ ÈÍÇÌÉ Ãæ + ÊïÍáîØî ÈÊåÇåçÇ. </para> <para> - Conversely, <function>unserialize</function> checks for the - presence of a function with the magic name - <literal>__wakeup</literal>. If present, this function can - reconstruct any resources that object may have. + ÙãÓêÇë¬ ÊÊáâñîÏ <function>unserialize</function> + èÌèÏ ÏÇäÉ ÊåÊäã ÇäÅÓå ÇäÓñðÍÑêñ + <literal>__wakeup</literal>. Åæ èïÌðϬ áÅæñ çÐç ÇäÏñÇäÉ êãèæ ÈÇåãÇæçÇ + ÅÙÇÏÉ ÈæÇÁ ÃêñÉ åèÇÑÏ êåÊäãçÇ çÐÇ ÇäãÇÆæ. </para> <para> - The intended use of <literal>__wakeup</literal> is to - reestablish any database connections that may have been lost - during serialization and perform other reinitialization - tasks. + ÇäÇÓÊÎÏÇå ÇäåïÈÊîÚîé åæ <literal>__wakeup</literal> çè + ÅÙÇÏÉ ÊÃÓêÓ ÃêñÉ ÇÊÕÇäÇÊ ÈÇäâèÇÙÏ ÇäÈêÇæêñÉ êåãæ ÃæñçÇ áïâðÏîÊ + áê ÃËæÇÁ ÙåäêÉ ÇäÓîäòÓîäîÉ èÊÃÏêÉ åçÇå ÃÎÑé + äÅÒÇäÉ ÇäÓîäòÓîäîÉ. </para> </sect1> <sect1 id="language.oop.newref"> - <title>References inside the constructor</title> + <title>ÇäÅÍÇäÇÊ Öåæ ÇäÈÇæêÉ "References inside the constructor"</title> <para> - Creating references within the constructor can lead to confusing - results. This tutorial-like section helps you to avoid problems. + êåãæ äÇæÔÇÁ ÇäÅÍÇäÇÊ Öåæ ÇäÈÇæêÉ Ãæ êÄÏê Åäé ÊÔèêÔ + ÇäæñîÊÇÆÌ. çÐÇ ÇäáÕä¬ ÇäÔñîÈêç ÈÇäÏñÑÓ¬ êÓÇÙÏã Ùäé ÊáÇÏê ÇäåÔÇãä. <informalexample> <programlisting role="php"> @@ -788,12 +788,12 @@ <?php class Foo { function Foo($name) { - // create a reference inside the global array $globalref + // ÅæÔÇÁ ÅÍÇäÉ Öåæ ÇäåÕáèáÉ ÇäÔñîÇåðäÉ $globalref global $globalref; $globalref[] = &$this; - // set name to passed value + // ÊÙêêæ ÅÓå äÃÌä ÇäâêåÉ ÇäåïåîÑñîÑîÉ $this->setName($name); - // and put it out + // èÇÓÊÎÑÇÌçÇ $this->echoName(); } @@ -812,92 +812,92 @@ </para> <para> - Let us check out if there is a difference between - <varname>$bar1</varname> which has been created using - the copy <literal>=</literal> operator and - <varname>$bar2</varname> which has been created using - the reference <literal>=&</literal> operator... + äæÊáâñîÏ ÇäÂæ Åæ ãÇæ çæÇã áÑâ Èêæ + <varname>$bar1</varname> ÇäÊñê ÃïæÔðÆîÊ ÈÇÓÊÎÏÇå + åïÔÚñðä ÇäæñîÓÎ <literal>=</literal> + è <varname>$bar2</varname> ÇäÊñê ÃïæÔðÆîÊ ÈÇÓÊÎÏÇå + åïÔÚñðä ÇäÅÍÇäÉ <literal>=&</literal> ... <informalexample> <programlisting role="php"> <![CDATA[ <?php -$bar1 = new Foo('set in constructor'); +$bar1 = new Foo('åïÙêñîæ áê ÇäÈÇæêÉ'); $bar1->echoName(); $globalref[0]->echoName(); -/* output: -set in constructor -set in constructor -set in constructor */ +/* ÇäåïÎòÑîÌ: +åïÙêñîæ áê ÇäÈÇæêÉ +åïÙêñîæ áê ÇäÈÇæêÉ +åïÙêñîæ áê ÇäÈÇæêÉ */ -$bar2 =& new Foo('set in constructor'); +$bar2 =& new Foo('åïÙêñîæ áê ÇäÈÇæêÉ'); $bar2->echoName(); $globalref[1]->echoName(); -/* output: -set in constructor -set in constructor -set in constructor */ +/* ÇäåïÎòÑîÌ: +åïÙêñîæ áê ÇäÈÇæêÉ +åïÙêñîæ áê ÇäÈÇæêÉ +åïÙêñîæ áê ÇäÈÇæêÉ */ ?> ]]> </programlisting> </informalexample> </para> <para> - Apparently there is no difference, but in fact there is a - very significant one: <varname>$bar1</varname> and - <varname>$globalref[0]</varname> are _NOT_ referenced, they - are NOT the same variable. This is because "new" does not - return a reference by default, instead it returns a copy. + ØÇçÑêÇë¬ äêÓ çæÇã åæ áÑâ äãæ¬ áê ÇäèÇâÙ¬ çæÇã + áÑâ ÌÏñ åïÙÊÈîÑ: <varname>$bar1</varname> è + <varname>$globalref[0]</varname> _ÚêÑ_ åïÍÇäîÉ "referenced"¬ ÇäÃåÑ + äÇ êÊÙäñîâ ÈæáÓ ÇäåïÊÚêñðÑÉ. çÐÇ äÃæñ "new" äÇ + ÊïÑÌðÙï ÅÍÇäɬ ÈÔãä ÇáÊÑÇÖêñ¬ ÈÏäÇ åæ Ðä㬠ÊïÑÌðÙ æïÓÎîÉ. <note> <simpara> - There is no performance loss (since PHP 4 and up use reference - counting) returning copies instead of references. On the - contrary it is most often better to simply work with copies - instead of references, because creating references takes some - time where creating copies virtually takes no time (unless none - of them is a large array or object and one of them gets changed - and the other(s) one(s) subsequently, then it would be wise to - use references to change them all concurrently). + äêÓ çæÇã åæ áâÏÇæ áê ÇäÃÏÇÁ "performance loss" (ÈÇÙÊÈÇÑ Ãæñ PHP 4¬ èÃÍÏˬ ÊÓÊÎÏå ÙÏñ ÇäÅÍÇäÇÊ "reference + counting") åïÑòÌðÙîÉë æïÓÎÇë ÈÏäÇ åæ ÇäÅÍÇäÇÊ. Ùäé + ÇäÙãÓ¬ åæ ÇäÃáÖä ÈãËêÑ ÇäÙåä ÈÈÓÇ×É ÈæÓÎ + ÈÏäÇ åæ ÇäÅÍÇäÇÊ äÃæñ ÅæÔÇÁ ÇäÅÍÇäÇÊ êÍÊÇÌ äÈÙÖ + ÇäèâÊ ÍêË Ãæñ ÅæÔÇÁ æïÓÎ äÇ êÃÎЬ ØÇçÑêÇë¬ Ãêñ èâÊ (ÅäÇ ÅÐÇ + äå Êãæ ÅÍÏÇçÇ ÙÈÇÑÉ Ùæ åÕáèáÉ Ãè ãÇÆæÇ ãÈêÑÇë èÊÚêñîÑÊ ÅÍÏÇçÇ + áêåÇ ÊÚêñîÑÊ ÇäÃÎÑé(ÇäÃÎÑêÇÊ) ÊðÈÇÙÇë¬ ÍêæçÇ êãèæ åæ ÇäÃÙâä + ÇÓÊÎÏÇå ÇäÅÍÇäÇÊ ÈÚÑÖ ÊÚêêÑçÇ ãäñçǬ ÈÔãä Âæêñ). </simpara> </note> - To prove what is written above let us watch the code below. + äÊèÖêÍ åÇ ãïÊðÈî áê ÇäÃÙäé¬ ääæØÑ Åäé ÇäÔñðêáÑÉ áê ÇäÃÓáä. <informalexample> <programlisting role="php"> <![CDATA[ <?php -// now we will change the name. what do you expect? -// you could expect that both $bar1 and $globalref[0] change their names... -$bar1->setName('set from outside'); +// ÇäÂæ¬ ÓæïÚêñðÑ ÇäÅÓå. åÇÐÇ ÊÊèâñîÙ¿ +// êåãæ Ãæ ÊÊèâñîÙ Ãæñ ãäÇ åæ $bar1 è $globalref[0] ÓÊïÚêñðÑ ÃÓåÇÁçÇ... +$bar1->setName('åïÙêñîæ Åæ×äÇâÇ åæ ÇäÎÇÑÌ'); -// as mentioned before this is not the case. +// åËäåÇ ÃïÔêÑ Åäêç åæ âÈä¬ äêÓ ÇäÃåÑ ãÐäã ÇäÂæ. $bar1->echoName(); $globalref[0]->echoName(); -/* output: -set from outside -set in constructor */ +/* ÇäåïÎòÑîÌ: +åïÙêñîæ Åæ×äÇâÇ åæ ÇäÎÇÑÌ +åïÙêñîæ áê ÇäÈÇæêÉ */ -// let us see what is different with $bar2 and $globalref[1] -$bar2->setName('set from outside'); +// äæÑé ÇäÂæ åÇ çè åïÎÊäá Èêæ $bar2 è $globalref[1] +$bar2->setName('åïÙêñîæ Åæ×äÇâÇ åæ ÇäÎÇÑÌ'); -// luckily they are not only equal, they are the same variable -// thus $bar2->name and $globalref[1]->name are the same too +// äÍÓæ ÇäÍØ¬ çê äêÓÊ áâ× åÊÓÇèêñÉ Èä èãÐäã çê ÙÈÇÑÉ Ùæ æáÓ ÇäåïÊÚêñðÑÉ. +// èçãÐǬ áÅæñ $bar2->name è $globalref[1]->name çê æáÓçÇ ÃêÖÇë $bar2->echoName(); $globalref[1]->echoName(); -/* output: -set from outside -set from outside */ +/* ÇäåïÎòÑîÌ: +åïÙêñîæ Åæ×äÇâÇ åæ ÇäÎÇÑÌ +åïÙêñîæ Åæ×äÇâÇ åæ ÇäÎÇÑÌ */ ?> ]]> </programlisting> </informalexample> </para> <para> - Another final example, try to understand it. + åËÇä ÃÎêÑ ÂÎѬ ÍÇèä Êáçñåç. <informalexample> <programlisting role="php"> @@ -906,7 +906,7 @@ class A { function A($i) { $this->value = $i; - // try to figure out why we do not need a reference here + // ÍÇèä åÙÑáÉ äåÇÐÇ äÇ æÍÊÇÌ Åäé ÅÍÇäÉ çæÇ $this->b = new B($this); } @@ -930,8 +930,8 @@ } } -// try to understand why using a simple copy here would yield -// in an undesired result in the *-marked line +// ÍÇèä áçå äåÇÐÇ êåãæ äÇÓÊÎÏÇå æÓÎÉ ÈÓê×É çæÇ Ãæ êÄÏê +// Åäé æÊêÌÉ ÚêÑ åïÍÈÐñîÉ áê ÇäÓñ×Ñ ÇäåïÙäñîå Èà * $a =& new A(10); $a->createRef(); @@ -949,7 +949,7 @@ ]]> </programlisting> <para> - This example will output: + ÓêÓÊÕÏÑ ÇäåËÇä ÇäÊñÇäêñ ÇäåïÎòÑîÌ: </para> <screen> <![CDATA[ @@ -966,17 +966,17 @@ </sect1> <sect1 id="language.oop.object-comparison-php4"> - <title>Comparing objects in PHP 4</title> + <title>åïâÇÑæÉ ÇäãÇÆæÇÊ áê PHP 4</title> <para> - In PHP 4, objects are compared in a very simple manner, namely: Two object - instances are equal if they have the same attributes and values, and are - instances of the same class. Similar rules are applied when comparing two - objects using the identity operator (<literal>===</literal>). + áê PHP 4¬ ÊÊå ÇäåïâÇÑæÉ Èêæ ÇäãÇÆæÇÊ È×ÑêâÉ ÌÏ ÈÓê×ɬ çê: êãèæ åËêäÇ ãÇÆæêæ + "object instances" åïÊÓÇèêñêæ ÅÐÇ ãÇæÇ êåÊäãÇæ æáÓ ÇäÓñðåÇÊ èÇäâðêå èãÇæÇ + åËêäÇæ åæ æáÓ ÇäÕñðæá. Êæ×Èâ æáÓ ÇäâèÇÙÏ ÙæÏ ÇäåâÇÑæÉ Èêæ + ÇäãÇÆæÇÊ ÙæÏ ÇÓÊÎÏÇå åïÔÚñðä ÇäçèêÉ "identity operator" (<literal>===</literal>). </para> <para> - If we were to execute the code in the example below: + ÅÐÇ ãæÇ ÈÕÏÏ ÊæáêÐ ÇäÔñðêáÑÉ áê ÇäåËÇä ÇäÓñïäêñ: <example> - <title>Example of object comparison in PHP 4</title> + <title>åËÇä Ùæ ÇäåâÇÑæÉ Èêæ ÇäãÇÆæÇÊ áê PHP 4</title> <programlisting role='php'> <![CDATA[ <?php @@ -1020,13 +1020,13 @@ $r = new SwitchableFlag(); -echo "Compare instances created with the same parameters\n"; +echo "åïâÇÑæÉ åËêäÇÊ åïæÔîÃîÉ ÈæáÓ ÇäåîÙòäîåîÇÊ\n"; compareObjects($o, $q); -echo "\nCompare instances created with different parameters\n"; +echo "\nåïâÇÑæÉ åîËêäÇÊ åïæÔîÃîÉ ÈåîÙòäîåîÇÊ åïÎÊäáÉ\n"; compareObjects($o, $p); -echo "\nCompare an instance of a parent class with one from a subclass\n"; +echo "\nåâÇÑæÉ åËêä åæ Õðæá èÇäðÏ åÙ åËêä åæ Õðæá áÑÙêñ\n"; compareObjects($o, $r); ?> ]]> @@ -1034,34 +1034,34 @@ </example> We will see: <screen> -Compare instances created with the same parameters +åâÇÑæÉ åËêäÇÊ åïæÔîÇîÉ ÈæáÓ ÇäåîÙòäîåîÇÊ o1 == o2 : TRUE o1 != o2 : FALSE o1 === o2 : TRUE o1 !== o2 : FALSE -Compare instances created with different parameters +åâÇÑæÉ åËêäÇÊ åïæÔîÇîÉ ÈåîÙòäîåîÇÊ åïÎÊäáÉ o1 == o2 : FALSE o1 != o2 : TRUE o1 === o2 : FALSE o1 !== o2 : TRUE -Compare an instance of a parent class with one from a subclass +åâÇÑæÉ åËêä åæ Õðæá èÇäðÏ åÙ åËêä åæ Õðæá áÑÙêñ o1 == o2 : FALSE o1 != o2 : TRUE o1 === o2 : FALSE o1 !== o2 : TRUE </screen> - Which is the output we will expect to obtain given the comparison rules - above. Only instances with the same values for their attributes and from the same - class are considered equal and identical. + èçè ÇäåïÎòÑîÌ ÇäÐñê æÊèâñÙç ääÍÕèä ÈåïâÊÖé âèÇÙÏ ÇäåâÇÑæÉ¬ + ÇäÊñê áê ÇäÃÙäé. áâ× ÇäåËêäÇÊ ÇäåÇäðãÉ äæáÓ Çäâêå ÇäÎÇÕÉ ÈÓðåÇÊçÇ èåæ æáÓ + ÇäÕñðæá çê ÇäÊñê ÊïÙÊîÈîÑ åÊÓÇèêñÉ èåïÊÔÇÈçÉ. </para> <para> - Even in the cases where we have object composition, the same comparison - rules apply. In the example below we create a container class that stores - an associative array of <classname>Flag</classname> objects. + ÍÊé áê ÇäÍÇäÇÊ ÇäÊñê æåÊäã áêçÇ ÊÑãêÈÇë ãÇÆæÇÊêñÇë "object composition"¬ Êæ×Èâ æáÓ + âèÇÙÏ ÇäåâÇÑæÉ. áê ÇäåËÇä ÇäÓñïáäêñ¬ ææÔÆ ÕðæáÇë ÍÇèêñÇë "container class" êâèå ÈÍáØ + åÕáèáÉ ÊÔÇÑãêñÉ åæ ãÇÆæÇÊ <classname>Flag</classname>. <example> - <title>Compound object comparisons in PHP 4</title> + <title>ÇäåâÇÑæÉ Èêæ ãÇÆæÇÊ åïÑãñîÈîÉ áê PHP 4</title> <programlisting role='php'> <![CDATA[ <?php @@ -1090,24 +1090,24 @@ $v = new FlagSet(array('flag1'=>$q, 'flag2'=>$p)); $w = new FlagSet(array('flag1'=>$q)); -echo "\nComposite objects u(o,p) and v(q,p)\n"; +echo "\nãÇÆæÇÊ åïÑãñîÈîÉ u(o,p) è v(q,p)\n"; compareObjects($u, $v); -echo "\nu(o,p) and w(q)\n"; +echo "\nu(o,p) è w(q)\n"; compareObjects($u, $w); ?> ]]> </programlisting> </example> - Which gives the expected output: + åÇ êïÙ×ê ÇäåïÎòÑîÌ ÇäåïÊèâñîÙ: <screen> -Composite objects u(o,p) and v(q,p) +ÇäãÇÆæÇÊ ÇäåïÑãñîÈîÉ u(o,p) è v(q,p) o1 == o2 : TRUE o1 != o2 : FALSE o1 === o2 : TRUE o1 !== o2 : FALSE -u(o,p) and w(q) +u(o,p) è w(q) o1 == o2 : FALSE o1 != o2 : TRUE o1 === o2 : FALSE @@ -1117,28 +1117,28 @@ </sect1> <sect1 id="language.oop.object-comparison-php5"> - <title>Comparing objects in PHP 5</title> + <title>åâÇÑæÉ ÇäãÇÆæÇÊ áê PHP 5</title> &warn.experimental; <para> - In PHP 5, object comparison is a more complicated than in PHP 4 and more - in accordance to what one will expect from an Object Oriented Language - (not that PHP 5 is such a language). + áê PHP 5¬ ÊÊÓñðå åâÇÑæÉ ÇäãÇÆæÇÊ ÈÇäÊñÙâêñÏ ÇäÒñÇÆÏ åâÇÑæÉ ÈàPHP 4 èÃãËÑ + èáâÇë äåÇ êÊèâñÙç ÇäåÑÁ åæ äÚÉ ãÇÆæêñÉ ÇäåæÍé "Object Oriented Language" + (äêÓ äÃæñ PHP 5 çê åËä çÐç ÇääñïÚÉ). </para> <para> - When using the comparison operator (<literal>==</literal>), - object variables are compared in a simple manner, namely: Two object - instances are equal if they have the same attributes and values, and are - instances of the same class. + ÙæÏ ÇÓÊÎÏÇå åïÔÚñðä ÇäåâÇÑæÉ (<literal>==</literal>)¬ + áÅæñç ÊÊå ÇäåâÇÑæÉ Èêæ ÇäåïÊÚêñðÑÇÊ ÇäãÇÆæêñîÉ È×ÑêâÉ ÈÓê×ɬ çê: êãèæ åËêäÇ ãÇÆæêæ + åïÊÓÇèêñêæ ÅÐÇ ãÇæÇ êåÊäãÇæ æáÓ ÇäÓñðåÇÊ èÇäâêå èãÇæÇ + åËêäêæ åæ æáÓ ÇäÕñðæá. </para> <para> - On the other hand, when using the identity operator (<literal>===</literal>), - object variables are identical if and only if they refer to the same - instance of the same class. + åæ ÌçÉ ÃÎÑé¬ ÙæÏ ÇÓÊÎÏÇå åïÔÚñðä ÇäçèêÉ (<literal>===</literal>)¬ + Êãèæ ÇäåïÊÚêñðÑÇÊ ÇäãÇÆæêñîÉ åïÊÔÇÈçÉ ÅÐÇ èáâ× ÅÐÇ ãÇæÊ ÊïÍêä Åäé æáÓ + ÇäåËêä åæ æáÓ ÇäÕñðæá. </para> <para> - An example will clarify these rules. + åËÇä äÊèÖêÍ çÐç ÇäâèÇÙÏ. <example> - <title>Example of object comparison in PHP 5</title> + <title>åËÇä Ùæ åâÇÑæÉ ÇäãÇÆæÇÊ "object comparison" áê PHP 5</title> <programlisting role='php'> <![CDATA[ <?php @@ -1178,33 +1178,33 @@ $q = $o; $r = new OtherFlag(); -echo "Two instances of the same class\n"; +echo "åËêäêæ åæ æáÓ ÇäÕñðæá\n"; compareObjects($o, $p); -echo "\nTwo references to the same instance\n"; +echo "\nÅÍÇäÊêæ äæáÓ ÇäåËêä\n"; compareObjects($o, $q); -echo "\nInstances of two different classes\n"; +echo "\nåËêäÇÊ åæ Õðæáêæ åïÎÊäáêæ\n"; compareObjects($o, $r); ?> ]]> </programlisting> </example> - This example will output: + çÐÇ ÇäåËÇä ÓêÓÊÕÏÑ ÇäåïÎòÑîÌ: <screen> -Two instances of the same class +åËêäêæ åæ æáÓ ÇäÕñðæá o1 == o2 : TRUE o1 != o2 : FALSE o1 === o2 : FALSE o1 !== o2 : TRUE -Two references to the same instance +ÅÍÇäÊêæ äæáÓ ÇäåËêä o1 == o2 : TRUE o1 != o2 : FALSE o1 === o2 : TRUE o1 !== o2 : FALSE -Instances of two different classes +åËêäÇÊ åæ Õðæáêæ åïÎÊäáêæ o1 == o2 : FALSE o1 != o2 : TRUE o1 === o2 : FALSE @@ -1234,3 +1234,5 @@ vim: et tw=78 syn=sgml vi: ts=1 sw=1 --> + +