cvs: phpdoc-ru /language/oop5 autoload.xml patterns.xml static.xml visibility.xml
| From: | Antony Dovgal | Date: | Fri, 21 Mar 2008 09:34:30 +0000 |
| Subject: | cvs: phpdoc-ru /language/oop5 autoload.xml patterns.xml static.xml visibility.xml | ||
| Groups: | php.doc.ru | ||
| Request: | Send a blank email to doc-ru+get-897@lists.php.net to get a copy of this message | ||
tony2001 Fri Mar 21 09:34:30 2008 UTC
Added files:
/phpdoc-ru/language/oop5 autoload.xml patterns.xml static.xml
visibility.xml
Log:
add new translations by Alexey Romanenko <santiago at ofoto dot ru>
http://cvs.php.net/viewvc.cgi/phpdoc-ru/language/oop5/autoload.xml?view=markup&rev=1.1 Index: phpdoc-ru/language/oop5/autoload.xml +++ phpdoc-ru/language/oop5/autoload.xml <?xml version="1.0" encoding="utf-8" ?> <!-- EN-Revision: 1.9 --> <!-- $Revision: 1.1 $ --> <sect1 xml:id="language.oop5.autoload" xmlns="http://docbook.org/ns/docbook"> <title>ÐвÑомаÑиÑеÑÐºÐ°Ñ Ð·Ð°Ð³ÑÑзка обÑекÑов</title> <para> ÐолÑÑинÑÑво ÑазÑабоÑÑиков обÑекÑно-оÑиенÑиÑованнÑÑ Ð¿Ñиложений ÑоздаÑÑ Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ опÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ ÐºÐ»Ð°ÑÑа оÑделÑнÑй Ñайл Ñ ÐºÐ¾Ð´Ð¾Ð¼ PHP. Ðдной из ÑамÑÑ Ð±Ð¾Ð»ÑÑÐ¸Ñ Ð½ÐµÐ¿ÑиÑÑноÑÑей в ÑÑом ÑлÑÑае ÑвлÑеÑÑÑ Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ÑÑÑ Ð¿Ð¸ÑаÑÑ Ð² наÑале каждого ÑкÑипÑа длиннÑй ÑпиÑок подгÑÑжаемÑÑ Ñайлов. </para> <para> ÐÑли иÑполÑзÑеÑÑÑ PHP 5, Ñо делаÑÑ ÑÑо не обÑзаÑелÑно. ÐÑ Ð¼Ð¾Ð¶ÐµÑе опÑеделиÑÑ ÑÑнкÑÐ¸Ñ __autoload, коÑоÑÐ°Ñ Ð°Ð²ÑомаÑиÑеÑки вÑзÑваеÑÑÑ Ð² Ñом ÑлÑÑае, когда Ð²Ñ Ð¿ÑÑаеÑеÑÑ Ð¸ÑполÑзоваÑÑ ÐºÐ»Ð°ÑÑ, коÑоÑÑй не бÑл опÑеделен Ñанее. ÐÑзов ÑÑой ÑÑнкÑии - ÑÑо поÑледний ÑÐ°Ð½Ñ Ð´Ð»Ñ Ð¸Ð½ÑеÑпÑеÑаÑоÑа загÑÑзиÑÑ ÐºÐ»Ð°ÑÑ Ð¿Ñежде, Ñем он законÑÐ¸Ñ Ð²Ñполнение ÑкÑипÑа Ñ Ð¾Ñибкой. </para> <note> <para> ÐÑклÑÑениÑ, вÑзваннÑе в ÑÑнкÑии __autoload, не могÑÑ Ð±ÑÑÑ Ð¿ÐµÑÐµÑ Ð²Ð°ÑÐµÐ½Ñ Ð² блоке <link linkend="language.exceptions">catch</link> и завеÑÑаÑÑÑ Ñ Ð½ÐµÐ¸ÑпÑавимой оÑибкой. </para> </note> <note> <para> ÐвÑомаÑиÑеÑÐºÐ°Ñ Ð·Ð°Ð³ÑÑзка не доÑÑÑпна в ÑлÑÑае иÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ PHP в командной ÑÑÑоке в <link linkend="features.commandline">инÑеÑакÑивном Ñежиме</link>. </para> </note> <note> <para> ÐÑли Ð¸Ð¼Ñ ÐºÐ»Ð°ÑÑа иÑполÑзÑеÑÑÑ, напÑимеÑ, Ð´Ð»Ñ Ð²Ñзова ÑеÑез <function>call_user_func</function>, Ñо оно Ð¼Ð¾Ð¶ÐµÑ ÑодеÑжаÑÑ Ð½ÐµÐºÐ¾ÑоÑÑе опаÑнÑе ÑимволÑ, Ñакие как <literal>../</literal>. ÐоÑÑомÑ, ÑекомендÑеÑÑÑ Ð½Ðµ иÑполÑзоваÑÑ Ð´Ð°Ð½Ð½Ñе Ð¾Ñ Ð¿Ð¾Ð»ÑзоваÑелей в ÑÐ°ÐºÐ¸Ñ ÑÑнкÑиÑÑ Ð¸Ð»Ð¸ же, как минимÑм, пÑовеÑÑÑÑ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ Ð² <function>__autoload</function>. </para> </note> <para> <example> <title>ÐÑÐ¸Ð¼ÐµÑ Ð°Ð²ÑомаÑиÑеÑкой загÑÑзки</title> <para> Ð ÑÑом пÑимеÑе ÑÑнкÑÐ¸Ñ Ð¿ÑÑаеÑÑÑ Ð·Ð°Ð³ÑÑзиÑÑ ÐºÐ»Ð°ÑÑÑ <literal>MyClass1</literal> и <literal>MyClass2</literal> из Ñайлов <filename>MyClass1.php</filename> и <filename>MyClass2.php</filename> ÑооÑвеÑÑÑвенно. </para> <programlisting role="php"> <![CDATA[ <?php function __autoload($class_name) { require_once $class_name . '.php'; } $obj = new MyClass1(); $obj2 = new MyClass2(); ?> ]]> </programlisting> </example> </para> </sect1> <!-- Keep this comment at the end of the file Local variables: mode: sgml sgml-omittag:t sgml-shorttag:t sgml-minimize-attributes:nil sgml-always-quote-attributes:t sgml-indent-step:1 sgml-indent-data:t indent-tabs-mode:nil sgml-parent-document:nil sgml-default-dtd-file:"../../manual.ced" sgml-exposed-tags:nil sgml-local-catalogs:nil sgml-local-ecat-files:nil End: vim600: syn=xml fen fdm=syntax fdl=2 si vim: et tw=78 syn=sgml vi: ts=1 sw=1 --> http://cvs.php.net/viewvc.cgi/phpdoc-ru/language/oop5/patterns.xml?view=markup&rev=1.1 Index: phpdoc-ru/language/oop5/patterns.xml +++ phpdoc-ru/language/oop5/patterns.xml <?xml version="1.0" encoding="utf-8" ?> <!-- EN-Revision: 1.10 --> <!-- $Revision: 1.1 $ --> <sect1 xml:id="language.oop5.patterns" xmlns="http://docbook.org/ns/docbook"> <title>Ð¨Ð°Ð±Ð»Ð¾Ð½Ñ Ð¿ÑоекÑиÑованиÑ</title> <para> Ð¨Ð°Ð±Ð»Ð¾Ð½Ñ - ÑÑо ÑпоÑоб опиÑÐ°Ð½Ð¸Ñ Ð¾Ð¿ÑималÑнÑÑ Ð¼ÐµÑодов и Ñ Ð¾ÑоÑÐ¸Ñ Ð´Ð¸Ð·Ð°Ð¹Ð½Ð¾Ð² пÑоекÑиÑованиÑ. Ðни пÑедоÑÑавлÑÑÑ ÑнивеÑÑалÑнÑе пÑÑи ÑеÑÐµÐ½Ð¸Ñ Ð¾Ð±ÑÐ¸Ñ Ð¿Ñоблем пÑогÑаммиÑованиÑ. </para> <sect2 xml:id="language.oop5.patterns.factory"> <title>ФабÑика (Factory)</title> <para> Шаблон ФабÑика позволÑÐµÑ ÑоздаваÑÑ Ð¾Ð±ÑекÑÑ Ð²Ð¾ вÑÐµÐ¼Ñ ÑабоÑÑ Ð¿ÑогÑаммÑ. ÐÑÐ¾Ñ Ñаблон назÑваеÑÑÑ Ð¤Ð°Ð±Ñикой поÑомÑ, ÑÑо он оÑвеÑÐ°ÐµÑ Ð·Ð° пÑоизводÑÑво обÑекÑа. ÐаÑамеÑÑизиÑÐ¾Ð²Ð°Ð½Ð½Ð°Ñ ÑабÑика пÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ Ð² каÑеÑÑве аÑгÑменÑа Ð¸Ð¼Ñ ÐºÐ»Ð°ÑÑа, обÑÐµÐºÑ ÐºÐ¾ÑоÑого ÑоздаеÑÑÑ. </para> <example> <title>ÐаÑамеÑÑизиÑованнÑй ÑабÑиÑнÑй меÑод</title> <programlisting role="php"> <![CDATA[ <?php class Example { // ÐаÑамеÑÑизиÑованнÑй ÑабÑиÑнÑй меÑод public static function factory($type) { if (include_once 'Drivers/' . $type . '.php') { $classname = 'Driver_' . $type; return new $classname; } else { throw new Exception ('ÐÑÐ°Ð¹Ð²ÐµÑ Ð½Ðµ найден'); } } } ?> ]]> </programlisting> <para> ÐпÑеделение ÑÑого меÑода в клаÑÑе позволÑÐµÑ Ð´ÑайвеÑам бÑÑÑ Ð·Ð°Ð³ÑÑженнÑми "на леÑÑ". Ð ÑлÑÑае, еÑли клаÑÑ <literal>Example</literal> бÑл Ð±Ñ ÐºÐ»Ð°ÑÑом абÑÑÑакÑного доÑÑÑпа к базе даннÑÑ , Ñо загÑÑзка дÑайвеÑа <literal>MySQL</literal> и <literal>SQLite</literal> Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð²Ñполнена ÑледÑÑÑим обÑазом: </para> <programlisting role="php"> <![CDATA[ <?php // ÐагÑÑзка дÑайвеÑа MySQL $mysql = Example::factory('MySQL'); // ÐагÑÑзка дÑайвеÑа SQLite $sqlite = Example::factory('SQLite'); ?> ]]> </programlisting> </example> </sect2> <sect2 xml:id="language.oop5.patterns.singleton"> <title>СинглÑон (Singleton)</title> <para> Шаблон пÑоекÑиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð¡Ð¸Ð½Ð³Ð»Ñон пÑименÑеÑÑÑ Ð² ÑÐµÑ ÑиÑÑаÑиÑÑ , когда нÑжно полÑÑиÑÑ ÐµÐ´Ð¸Ð½ÑÑвеннÑй ÑкземплÑÑ ÐºÐ»Ð°ÑÑа. ÐолÑÑинÑÑво пÑимеÑов, ÑвÑзаннÑÑ Ñ ÑÑим - ÑÑо взаимодейÑÑвие Ñ Ð±Ð°Ð·Ð¾Ð¹ даннÑÑ . РеализаÑÐ¸Ñ ÑÑого Ñаблона позволÑÑÑ Ð¿ÑогÑаммиÑÑÑ ÑоздаÑÑ ÐµÐ´Ð¸Ð½ÑÑвеннÑй ÑкземплÑÑ ÐºÐ»Ð°ÑÑа, к коÑоÑÐ¾Ð¼Ñ Ð±ÑдÑÑ Ð¸Ð¼ÐµÑÑ Ð´Ð¾ÑÑÑп оÑÑалÑнÑе обÑекÑÑ. </para> <example> <title>ФÑнкÑÐ¸Ñ Ð¡Ð¸Ð½Ð³Ð»Ñон</title> <programlisting role="php"> <![CDATA[ <?php class Example { // СодеÑÐ¶Ð¸Ñ ÑкземплÑÑ ÐºÐ»Ð°ÑÑа private static $instance; // ÐакÑÑÑÑй конÑÑÑÑкÑоÑ; пÑедоÑвÑаÑÐ°ÐµÑ Ð¿ÑÑмой доÑÑÑп к // ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¾Ð±ÑекÑа private function __construct() { echo 'Я конÑÑÑÑкÑоÑ'; } // ÐеÑод ÑинглÑон public static function singleton() { if (!isset(self::$instance)) { $c = __CLASS__; self::$instance = new $c; } return self::$instance; } // ÐеÑод Ð´Ð»Ñ Ð¿ÑимеÑа public function bark() { echo 'Ðав!'; } // ÐÑедоÑвÑаÑÐ°ÐµÑ ÐºÐ»Ð¾Ð½Ð¸Ñование ÑкземплÑÑа клаÑÑа public function __clone() { trigger_error('ÐлониÑование запÑеÑено.', E_USER_ERROR); } } ?> ]]> </programlisting> <para> ÐозволÑÐµÑ Ð²ÐµÑнÑÑÑ ÐµÐ´Ð¸Ð½ÑÑвеннÑй ÑкземплÑÑ ÐºÐ»Ð°ÑÑа <literal>Example</literal> </para> <programlisting role="php"> <![CDATA[ <?php // Такой ваÑÐ¸Ð°Ð½Ñ Ð·Ð°Ð²ÐµÑÑиÑÑÑ Ð½ÐµÑдаÑей, Ñак как конÑÑÑÑкÑÐ¾Ñ // обÑÑвлен как private $test = new Example; // ÐÑо вÑегда возвÑаÑÐ°ÐµÑ ÐµÐ´Ð¸Ð½ÑÑвеннÑй ÑкземплÑÑ ÐºÐ»Ð°ÑÑа $test = Example::singleton(); $test->bark(); // ÐÑо вÑÐ·Ð¾Ð²ÐµÑ Ð¾ÑÐ¸Ð±ÐºÑ E_USER_ERROR. $test_clone = clone $test; ?> ]]> </programlisting> </example> </sect2> </sect1> <!-- Keep this comment at the end of the file Local variables: mode: sgml sgml-omittag:t sgml-shorttag:t sgml-minimize-attributes:nil sgml-always-quote-attributes:t sgml-indent-step:1 sgml-indent-data:t indent-tabs-mode:nil sgml-parent-document:nil sgml-default-dtd-file:"../../manual.ced" sgml-exposed-tags:nil sgml-local-catalogs:nil sgml-local-ecat-files:nil End: vim600: syn=xml fen fdm=syntax fdl=2 si vim: et tw=78 syn=sgml vi: ts=1 sw=1 --> http://cvs.php.net/viewvc.cgi/phpdoc-ru/language/oop5/static.xml?view=markup&rev=1.1 Index: phpdoc-ru/language/oop5/static.xml +++ phpdoc-ru/language/oop5/static.xml <?xml version="1.0" encoding="utf-8" ?> <!-- EN-Revision: 1.17 --> <!-- $Revision: 1.1 $ --> <sect1 xml:id="language.oop5.static" xmlns="http://docbook.org/ns/docbook"> <title>ÐлÑÑевое Ñлово "static"</title> <para> ÐбÑÑвление ÑвойÑÑв и меÑодов клаÑÑа ÑÑаÑиÑеÑкими позволÑÐµÑ Ð¾Ð±ÑаÑаÑÑÑÑ Ðº ним без ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ ÑкземплÑÑа клаÑÑа. ÐÑÑибÑÑ ÐºÐ»Ð°ÑÑа, обÑÑвленнÑй ÑÑаÑиÑеÑким, не можеÑÑ Ð±ÑÑÑ Ð´Ð¾ÑÑÑпен поÑÑедÑÑвом ÑкземплÑÑа клаÑÑа (но ÑÑаÑиÑеÑкий меÑод Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð²Ñзван). </para> <para> Ð ÑелÑÑ ÑовмеÑÑимоÑÑи Ñ PHP 4, Ñделано Ñак, ÑÑо еÑли не иÑполÑзовалоÑÑ Ð¾Ð¿Ñеделение <link linkend="language.oop5.visibility">облаÑÑи видимоÑÑи</link>, Ñо Ñлен или меÑод бÑÐ´ÐµÑ ÑаÑÑмаÑÑиваÑÑÑÑ, как еÑли Ð±Ñ Ð¾Ð½ бÑл обÑÑвлен как <literal>public</literal>. </para> <para> Так как ÑÑаÑиÑеÑкие меÑÐ¾Ð´Ñ Ð²ÑзÑваÑÑÑÑ Ð±ÐµÐ· ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ ÑкземплÑÑа клаÑÑа, Ñо пÑевдо-пеÑÐµÐ¼ÐµÐ½Ð½Ð°Ñ <varname>$this</varname> не доÑÑÑпна внÑÑÑи меÑода, обÑÑвленного ÑÑаÑиÑеÑким. </para> <para> ÐоÑÑÑп к ÑÑаÑиÑеÑким ÑвойÑÑвам клаÑÑа не Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¿Ð¾Ð»ÑÑен ÑеÑез опеÑаÑÐ¾Ñ ->. </para> <para> ÐÑи попÑÑке вÑзова неÑÑаÑиÑеÑÐºÐ¸Ñ Ð¼ÐµÑодов ÑÑаÑиÑеÑки вÑводиÑÑÑ Ð¿ÑедÑпÑеждение ÑÑÐ¾Ð²Ð½Ñ E_STRICT. </para> <para> ÐаÑÐ¸Ð½Ð°Ñ Ñ Ð²ÐµÑÑии PHP 5.3.0 ÑÑÑеÑÑвÑÐµÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑÑ ÑÑÑлаÑÑÑÑ Ð½Ð° клаÑÑ Ð¸ÑполÑзÑÑ Ð¿ÐµÑеменнÑÑ. ÐоÑÑÐ¾Ð¼Ñ Ð·Ð½Ð°Ñение пеÑеменной в Ñаком ÑлÑÑае не Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ ÐºÐ»ÑÑевÑм Ñловом (напÑимеÑ, <literal>self</literal>, <literal>parent</literal> и <literal>static</literal>). </para> <example> <title>ÐÑÐ¸Ð¼ÐµÑ ÑÑаÑиÑеÑкого ÑвойÑÑва</title> <programlisting role="php"> <![CDATA[ <?php class Foo { public static $my_static = 'foo'; public function staticValue() { return self::$my_static; } } class Bar extends Foo { public function fooStatic() { return parent::$my_static; } } print Foo::$my_static . "\n"; $foo = new Foo(); print $foo->staticValue() . "\n"; print $foo->my_static . "\n"; // Ðе опÑеделено ÑвойÑÑво my_static print $foo::$my_static . "\n"; $classname = 'Foo'; print $classname::$my_static . "\n"; // ÐаÑÐ¸Ð½Ð°Ñ ÑолÑко Ñ PHP 5.3.0 print Bar::$my_static . "\n"; $bar = new Bar(); print $bar->fooStatic() . "\n"; ?> ]]> </programlisting> </example> <example> <title>ÐÑÐ¸Ð¼ÐµÑ ÑÑаÑиÑеÑкого меÑода</title> <programlisting role="php"> <![CDATA[ <?php class Foo { public static function aStaticMethod() { // ... } } Foo::aStaticMethod(); $classname = 'Foo'; $classname::aStaticMethod(); // ÐаÑÐ¸Ð½Ð°Ñ ÑолÑко Ñ PHP 5.3.0 ?> ]]> </programlisting> </example> </sect1> <!-- Keep this comment at the end of the file Local variables: mode: sgml sgml-omittag:t sgml-shorttag:t sgml-minimize-attributes:nil sgml-always-quote-attributes:t sgml-indent-step:1 sgml-indent-data:t indent-tabs-mode:nil sgml-parent-document:nil sgml-default-dtd-file:"../../manual.ced" sgml-exposed-tags:nil sgml-local-catalogs:nil sgml-local-ecat-files:nil End: vim600: syn=xml fen fdm=syntax fdl=2 si vim: et tw=78 syn=sgml vi: ts=1 sw=1 --> http://cvs.php.net/viewvc.cgi/phpdoc-ru/language/oop5/visibility.xml?view=markup&rev=1.1 Index: phpdoc-ru/language/oop5/visibility.xml +++ phpdoc-ru/language/oop5/visibility.xml <?xml version="1.0" encoding="utf-8" ?> <!-- EN-Revision: 1.15 --> <!-- $Revision: 1.1 $ --> <sect1 xml:id="language.oop5.visibility" xmlns="http://docbook.org/ns/docbook"> <title>ÐблаÑÑÑ Ð²Ð¸Ð´Ð¸Ð¼Ð¾ÑÑи</title> <para> ÐблаÑÑÑ Ð²Ð¸Ð´Ð¸Ð¼Ð¾ÑÑи ÑвойÑÑва или меÑода Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¾Ð¿Ñеделена пÑÑем иÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ ÑледÑÑÑÐ¸Ñ ÐºÐ»ÑÑевÑÑ Ñлов в обÑÑвлении: public, protected или private. ÐоÑÑÑп к ÑвойÑÑвам и меÑодам клаÑÑам, обÑÑвленнÑм как public (обÑедоÑÑÑпнÑй), Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑоиÑÑ Ð¾Ð´Ð¸ÑÑ Ð¸Ð· лÑбого меÑÑа. ÐодиÑикаÑÐ¾Ñ protected (заÑиÑеннÑй) позволÑÐµÑ Ð¸Ð¼ÐµÑÑ Ð´Ð¾ÑÑÑп наÑледÑемÑм и ÑодиÑелÑÑким клаÑÑам (а, Ñакже клаÑÑÑ, в коÑоÑом опÑеделен Ñам Ñлен клаÑÑа). ÐодиÑикаÑÐ¾Ñ private (закÑÑÑÑй) огÑаниÑÐ¸Ð²Ð°ÐµÑ Ð¾Ð±Ð»Ð°ÑÑÑ Ð²Ð¸Ð´Ð¸Ð¼Ð¾ÑÑи Ñак, ÑÑо ÑолÑко клаÑÑ, где обÑÑвлен Ñам ÑлеменÑ, Ð¸Ð¼ÐµÐµÑ Ðº Ð½ÐµÐ¼Ñ Ð´Ð¾ÑÑÑп. </para> <sect2 xml:id="language.oop5.visiblity-members"> <title>ÐблаÑÑÑ Ð²Ð¸Ð´Ð¸Ð¼Ð¾ÑÑи ÑвойÑÑв</title> <para> СвойÑÑва клаÑÑа Ð´Ð¾Ð»Ð¶Ð½Ñ Ð±ÑÑÑ Ð¾Ð¿ÑÐµÐ´ÐµÐ»ÐµÐ½Ñ ÑеÑез модиÑикаÑоÑÑ public, private, или protected. </para> <para> <example> <title>ÐбÑÑвление ÑвойÑÑва клаÑÑа</title> <programlisting role="php"> <![CDATA[ <?php /** * ÐпÑеделение MyClass */ class MyClass { public $public = 'ÐбÑий'; protected $protected = 'ÐаÑиÑеннÑй'; private $private = 'ÐакÑÑÑÑй'; function printHello() { echo $this->public; echo $this->protected; echo $this->private; } } $obj = new MyClass(); echo $obj->public; // РабоÑÐ°ÐµÑ echo $obj->protected; // ÐеиÑпÑÐ°Ð²Ð¸Ð¼Ð°Ñ Ð¾Ñибка echo $obj->private; // ÐеиÑпÑÐ°Ð²Ð¸Ð¼Ð°Ñ Ð¾Ñибка $obj->printHello(); // ÐÑÐ²Ð¾Ð´Ð¸Ñ ÐбÑий, ÐаÑиÑеннÑй и ÐакÑÑÑÑй /** * ÐпÑеделение MyClass2 */ class MyClass2 extends MyClass { // ÐÑ Ð¼Ð¾Ð¶ÐµÐ¼ пеÑеопÑеделиÑÑ public и protected меÑодÑ, но не private protected $protected = 'ÐаÑиÑеннÑй2'; function printHello() { echo $this->public; echo $this->protected; echo $this->private; } } $obj2 = new MyClass2(); echo $obj2->public; // РабоÑÐ°ÐµÑ echo $obj2->private; // ÐеопÑеделен echo $obj2->protected; // ÐеиÑпÑÐ°Ð²Ð¸Ð¼Ð°Ñ Ð¾Ñибка $obj2->printHello(); // ÐÑÐ²Ð¾Ð´Ð¸Ñ ÐбÑий, ÐаÑиÑеннÑй2 и ÐакÑÑÑÑй ?> ]]> </programlisting> </example> </para> <note> <simpara> ÐеÑод обÑÑÐ²Ð»ÐµÐ½Ð¸Ñ Ð¿ÐµÑеменной ÑеÑез клÑÑевое Ñлово <emphasis>var</emphasis>, пÑинÑÑÑй в PHP 4, до ÑÐ¸Ñ Ð¿Ð¾Ñ Ð¿Ð¾Ð´Ð´ÐµÑживаеÑÑÑ Ð² ÑелÑÑ ÑовмеÑÑимоÑÑи (как Ñиноним клÑÑевого Ñлова public). РвеÑÑиÑÑ PHP 5 ниже 5.1.3 Ñакое иÑполÑзование вÑÐ²Ð¾Ð´Ð¸Ñ Ð¿ÑедÑпÑеждение <constant>E_STRICT</constant>. </simpara> </note> </sect2> <sect2 xml:id="language.oop5.visiblity-methods"> <title>ÐблаÑÑÑ Ð²Ð¸Ð´Ð¸Ð¼Ð¾ÑÑи меÑода</title> <para> ÐеÑÐ¾Ð´Ñ ÐºÐ»Ð°ÑÑа Ð´Ð¾Ð»Ð¶Ð½Ñ Ð±ÑÑÑ Ð¾Ð¿ÑÐµÐ´ÐµÐ»ÐµÐ½Ñ ÑеÑез модиÑикаÑоÑÑ public, private, или protected. ÐеÑодÑ, где опÑеделение модиÑикаÑоÑа оÑÑÑÑÑÑвÑеÑ, опÑеделÑÑÑÑÑ ÐºÐ°Ðº public. </para> <para> <example> <title>ÐбÑÑвление меÑода</title> <programlisting role="php"> <![CDATA[ <?php /** * ÐпÑеделение MyClass */ class MyClass { // ÐбÑÑвление обÑедоÑÑÑпного конÑÑÑÑкÑоÑа public function __construct() { } // ÐбÑÑвление обÑедоÑÑÑпного меÑода public function MyPublic() { } // ÐбÑÑвление заÑиÑенного меÑода protected function MyProtected() { } // ÐбÑÑвление закÑÑÑого меÑода private function MyPrivate() { } // ÐÑо обÑедоÑÑÑпнÑй меÑод function Foo() { $this->MyPublic(); $this->MyProtected(); $this->MyPrivate(); } } $myclass = new MyClass; $myclass->MyPublic(); // РабоÑÐ°ÐµÑ $myclass->MyProtected(); // ÐеиÑпÑÐ°Ð²Ð¸Ð¼Ð°Ñ Ð¾Ñибка $myclass->MyPrivate(); // ÐеиÑпÑÐ°Ð²Ð¸Ð¼Ð°Ñ Ð¾Ñибка $myclass->Foo(); // РабоÑÐ°ÐµÑ Ð¾Ð±Ñий, заÑиÑеннÑй и закÑÑÑÑй /** * ÐпÑеделение MyClass2 */ class MyClass2 extends MyClass { // ÐÑо обÑедоÑÑÑпнÑй меÑод function Foo2() { $this->MyPublic(); $this->MyProtected(); $this->MyPrivate(); // ÐеиÑпÑÐ°Ð²Ð¸Ð¼Ð°Ñ Ð¾Ñибка } } $myclass2 = new MyClass2; $myclass2->MyPublic(); // РабоÑÐ°ÐµÑ $myclass2->Foo2(); // РабоÑÐ°ÐµÑ Ð¾Ð±Ñий и заÑиÑеннÑй, закÑÑÑÑй не ÑабоÑÐ°ÐµÑ class Bar { public function test() { $this->testPrivate(); $this->testPublic(); } public function testPublic() { echo "Bar::testPublic\n"; } private function testPrivate() { echo "Bar::testPrivate\n"; } } class Foo extends Bar { public function testPublic() { echo "Foo::testPublic\n"; } private function testPrivate() { echo "Foo::testPrivate\n"; } } $myFoo = new foo(); $myFoo->test(); // Bar::testPrivate // Foo::testPublic ?> ]]> </programlisting> </example> </para> </sect2> </sect1> <!-- Keep this comment at the end of the file Local variables: mode: sgml sgml-omittag:t sgml-shorttag:t sgml-minimize-attributes:nil sgml-always-quote-attributes:t sgml-indent-step:1 sgml-indent-data:t indent-tabs-mode:nil sgml-parent-document:nil sgml-default-dtd-file:"../../manual.ced" sgml-exposed-tags:nil sgml-local-catalogs:nil sgml-local-ecat-files:nil End: vim600: syn=xml fen fdm=syntax fdl=2 si vim: et tw=78 syn=sgml vi: ts=1 sw=1 -->
http://cvs.php.net/viewvc.cgi/phpdoc-ru/language/oop5/autoload.xml?view=markup&rev=1.1 Index: phpdoc-ru/language/oop5/autoload.xml +++ phpdoc-ru/language/oop5/autoload.xml <?xml version="1.0" encoding="utf-8" ?> <!-- EN-Revision: 1.9 --> <!-- $Revision: 1.1 $ --> <sect1 xml:id="language.oop5.autoload" xmlns="http://docbook.org/ns/docbook"> <title>ÐвÑомаÑиÑеÑÐºÐ°Ñ Ð·Ð°Ð³ÑÑзка обÑекÑов</title> <para> ÐолÑÑинÑÑво ÑазÑабоÑÑиков обÑекÑно-оÑиенÑиÑованнÑÑ Ð¿Ñиложений ÑоздаÑÑ Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ опÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ ÐºÐ»Ð°ÑÑа оÑделÑнÑй Ñайл Ñ ÐºÐ¾Ð´Ð¾Ð¼ PHP. Ðдной из ÑамÑÑ Ð±Ð¾Ð»ÑÑÐ¸Ñ Ð½ÐµÐ¿ÑиÑÑноÑÑей в ÑÑом ÑлÑÑае ÑвлÑеÑÑÑ Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ÑÑÑ Ð¿Ð¸ÑаÑÑ Ð² наÑале каждого ÑкÑипÑа длиннÑй ÑпиÑок подгÑÑжаемÑÑ Ñайлов. </para> <para> ÐÑли иÑполÑзÑеÑÑÑ PHP 5, Ñо делаÑÑ ÑÑо не обÑзаÑелÑно. ÐÑ Ð¼Ð¾Ð¶ÐµÑе опÑеделиÑÑ ÑÑнкÑÐ¸Ñ __autoload, коÑоÑÐ°Ñ Ð°Ð²ÑомаÑиÑеÑки вÑзÑваеÑÑÑ Ð² Ñом ÑлÑÑае, когда Ð²Ñ Ð¿ÑÑаеÑеÑÑ Ð¸ÑполÑзоваÑÑ ÐºÐ»Ð°ÑÑ, коÑоÑÑй не бÑл опÑеделен Ñанее. ÐÑзов ÑÑой ÑÑнкÑии - ÑÑо поÑледний ÑÐ°Ð½Ñ Ð´Ð»Ñ Ð¸Ð½ÑеÑпÑеÑаÑоÑа загÑÑзиÑÑ ÐºÐ»Ð°ÑÑ Ð¿Ñежде, Ñем он законÑÐ¸Ñ Ð²Ñполнение ÑкÑипÑа Ñ Ð¾Ñибкой. </para> <note> <para> ÐÑклÑÑениÑ, вÑзваннÑе в ÑÑнкÑии __autoload, не могÑÑ Ð±ÑÑÑ Ð¿ÐµÑÐµÑ Ð²Ð°ÑÐµÐ½Ñ Ð² блоке <link linkend="language.exceptions">catch</link> и завеÑÑаÑÑÑ Ñ Ð½ÐµÐ¸ÑпÑавимой оÑибкой. </para> </note> <note> <para> ÐвÑомаÑиÑеÑÐºÐ°Ñ Ð·Ð°Ð³ÑÑзка не доÑÑÑпна в ÑлÑÑае иÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ PHP в командной ÑÑÑоке в <link linkend="features.commandline">инÑеÑакÑивном Ñежиме</link>. </para> </note> <note> <para> ÐÑли Ð¸Ð¼Ñ ÐºÐ»Ð°ÑÑа иÑполÑзÑеÑÑÑ, напÑимеÑ, Ð´Ð»Ñ Ð²Ñзова ÑеÑез <function>call_user_func</function>, Ñо оно Ð¼Ð¾Ð¶ÐµÑ ÑодеÑжаÑÑ Ð½ÐµÐºÐ¾ÑоÑÑе опаÑнÑе ÑимволÑ, Ñакие как <literal>../</literal>. ÐоÑÑомÑ, ÑекомендÑеÑÑÑ Ð½Ðµ иÑполÑзоваÑÑ Ð´Ð°Ð½Ð½Ñе Ð¾Ñ Ð¿Ð¾Ð»ÑзоваÑелей в ÑÐ°ÐºÐ¸Ñ ÑÑнкÑиÑÑ Ð¸Ð»Ð¸ же, как минимÑм, пÑовеÑÑÑÑ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ Ð² <function>__autoload</function>. </para> </note> <para> <example> <title>ÐÑÐ¸Ð¼ÐµÑ Ð°Ð²ÑомаÑиÑеÑкой загÑÑзки</title> <para> Ð ÑÑом пÑимеÑе ÑÑнкÑÐ¸Ñ Ð¿ÑÑаеÑÑÑ Ð·Ð°Ð³ÑÑзиÑÑ ÐºÐ»Ð°ÑÑÑ <literal>MyClass1</literal> и <literal>MyClass2</literal> из Ñайлов <filename>MyClass1.php</filename> и <filename>MyClass2.php</filename> ÑооÑвеÑÑÑвенно. </para> <programlisting role="php"> <![CDATA[ <?php function __autoload($class_name) { require_once $class_name . '.php'; } $obj = new MyClass1(); $obj2 = new MyClass2(); ?> ]]> </programlisting> </example> </para> </sect1> <!-- Keep this comment at the end of the file Local variables: mode: sgml sgml-omittag:t sgml-shorttag:t sgml-minimize-attributes:nil sgml-always-quote-attributes:t sgml-indent-step:1 sgml-indent-data:t indent-tabs-mode:nil sgml-parent-document:nil sgml-default-dtd-file:"../../manual.ced" sgml-exposed-tags:nil sgml-local-catalogs:nil sgml-local-ecat-files:nil End: vim600: syn=xml fen fdm=syntax fdl=2 si vim: et tw=78 syn=sgml vi: ts=1 sw=1 --> http://cvs.php.net/viewvc.cgi/phpdoc-ru/language/oop5/patterns.xml?view=markup&rev=1.1 Index: phpdoc-ru/language/oop5/patterns.xml +++ phpdoc-ru/language/oop5/patterns.xml <?xml version="1.0" encoding="utf-8" ?> <!-- EN-Revision: 1.10 --> <!-- $Revision: 1.1 $ --> <sect1 xml:id="language.oop5.patterns" xmlns="http://docbook.org/ns/docbook"> <title>Ð¨Ð°Ð±Ð»Ð¾Ð½Ñ Ð¿ÑоекÑиÑованиÑ</title> <para> Ð¨Ð°Ð±Ð»Ð¾Ð½Ñ - ÑÑо ÑпоÑоб опиÑÐ°Ð½Ð¸Ñ Ð¾Ð¿ÑималÑнÑÑ Ð¼ÐµÑодов и Ñ Ð¾ÑоÑÐ¸Ñ Ð´Ð¸Ð·Ð°Ð¹Ð½Ð¾Ð² пÑоекÑиÑованиÑ. Ðни пÑедоÑÑавлÑÑÑ ÑнивеÑÑалÑнÑе пÑÑи ÑеÑÐµÐ½Ð¸Ñ Ð¾Ð±ÑÐ¸Ñ Ð¿Ñоблем пÑогÑаммиÑованиÑ. </para> <sect2 xml:id="language.oop5.patterns.factory"> <title>ФабÑика (Factory)</title> <para> Шаблон ФабÑика позволÑÐµÑ ÑоздаваÑÑ Ð¾Ð±ÑекÑÑ Ð²Ð¾ вÑÐµÐ¼Ñ ÑабоÑÑ Ð¿ÑогÑаммÑ. ÐÑÐ¾Ñ Ñаблон назÑваеÑÑÑ Ð¤Ð°Ð±Ñикой поÑомÑ, ÑÑо он оÑвеÑÐ°ÐµÑ Ð·Ð° пÑоизводÑÑво обÑекÑа. ÐаÑамеÑÑизиÑÐ¾Ð²Ð°Ð½Ð½Ð°Ñ ÑабÑика пÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ Ð² каÑеÑÑве аÑгÑменÑа Ð¸Ð¼Ñ ÐºÐ»Ð°ÑÑа, обÑÐµÐºÑ ÐºÐ¾ÑоÑого ÑоздаеÑÑÑ. </para> <example> <title>ÐаÑамеÑÑизиÑованнÑй ÑабÑиÑнÑй меÑод</title> <programlisting role="php"> <![CDATA[ <?php class Example { // ÐаÑамеÑÑизиÑованнÑй ÑабÑиÑнÑй меÑод public static function factory($type) { if (include_once 'Drivers/' . $type . '.php') { $classname = 'Driver_' . $type; return new $classname; } else { throw new Exception ('ÐÑÐ°Ð¹Ð²ÐµÑ Ð½Ðµ найден'); } } } ?> ]]> </programlisting> <para> ÐпÑеделение ÑÑого меÑода в клаÑÑе позволÑÐµÑ Ð´ÑайвеÑам бÑÑÑ Ð·Ð°Ð³ÑÑженнÑми "на леÑÑ". Ð ÑлÑÑае, еÑли клаÑÑ <literal>Example</literal> бÑл Ð±Ñ ÐºÐ»Ð°ÑÑом абÑÑÑакÑного доÑÑÑпа к базе даннÑÑ , Ñо загÑÑзка дÑайвеÑа <literal>MySQL</literal> и <literal>SQLite</literal> Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð²Ñполнена ÑледÑÑÑим обÑазом: </para> <programlisting role="php"> <![CDATA[ <?php // ÐагÑÑзка дÑайвеÑа MySQL $mysql = Example::factory('MySQL'); // ÐагÑÑзка дÑайвеÑа SQLite $sqlite = Example::factory('SQLite'); ?> ]]> </programlisting> </example> </sect2> <sect2 xml:id="language.oop5.patterns.singleton"> <title>СинглÑон (Singleton)</title> <para> Шаблон пÑоекÑиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð¡Ð¸Ð½Ð³Ð»Ñон пÑименÑеÑÑÑ Ð² ÑÐµÑ ÑиÑÑаÑиÑÑ , когда нÑжно полÑÑиÑÑ ÐµÐ´Ð¸Ð½ÑÑвеннÑй ÑкземплÑÑ ÐºÐ»Ð°ÑÑа. ÐолÑÑинÑÑво пÑимеÑов, ÑвÑзаннÑÑ Ñ ÑÑим - ÑÑо взаимодейÑÑвие Ñ Ð±Ð°Ð·Ð¾Ð¹ даннÑÑ . РеализаÑÐ¸Ñ ÑÑого Ñаблона позволÑÑÑ Ð¿ÑогÑаммиÑÑÑ ÑоздаÑÑ ÐµÐ´Ð¸Ð½ÑÑвеннÑй ÑкземплÑÑ ÐºÐ»Ð°ÑÑа, к коÑоÑÐ¾Ð¼Ñ Ð±ÑдÑÑ Ð¸Ð¼ÐµÑÑ Ð´Ð¾ÑÑÑп оÑÑалÑнÑе обÑекÑÑ. </para> <example> <title>ФÑнкÑÐ¸Ñ Ð¡Ð¸Ð½Ð³Ð»Ñон</title> <programlisting role="php"> <![CDATA[ <?php class Example { // СодеÑÐ¶Ð¸Ñ ÑкземплÑÑ ÐºÐ»Ð°ÑÑа private static $instance; // ÐакÑÑÑÑй конÑÑÑÑкÑоÑ; пÑедоÑвÑаÑÐ°ÐµÑ Ð¿ÑÑмой доÑÑÑп к // ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¾Ð±ÑекÑа private function __construct() { echo 'Я конÑÑÑÑкÑоÑ'; } // ÐеÑод ÑинглÑон public static function singleton() { if (!isset(self::$instance)) { $c = __CLASS__; self::$instance = new $c; } return self::$instance; } // ÐеÑод Ð´Ð»Ñ Ð¿ÑимеÑа public function bark() { echo 'Ðав!'; } // ÐÑедоÑвÑаÑÐ°ÐµÑ ÐºÐ»Ð¾Ð½Ð¸Ñование ÑкземплÑÑа клаÑÑа public function __clone() { trigger_error('ÐлониÑование запÑеÑено.', E_USER_ERROR); } } ?> ]]> </programlisting> <para> ÐозволÑÐµÑ Ð²ÐµÑнÑÑÑ ÐµÐ´Ð¸Ð½ÑÑвеннÑй ÑкземплÑÑ ÐºÐ»Ð°ÑÑа <literal>Example</literal> </para> <programlisting role="php"> <![CDATA[ <?php // Такой ваÑÐ¸Ð°Ð½Ñ Ð·Ð°Ð²ÐµÑÑиÑÑÑ Ð½ÐµÑдаÑей, Ñак как конÑÑÑÑкÑÐ¾Ñ // обÑÑвлен как private $test = new Example; // ÐÑо вÑегда возвÑаÑÐ°ÐµÑ ÐµÐ´Ð¸Ð½ÑÑвеннÑй ÑкземплÑÑ ÐºÐ»Ð°ÑÑа $test = Example::singleton(); $test->bark(); // ÐÑо вÑÐ·Ð¾Ð²ÐµÑ Ð¾ÑÐ¸Ð±ÐºÑ E_USER_ERROR. $test_clone = clone $test; ?> ]]> </programlisting> </example> </sect2> </sect1> <!-- Keep this comment at the end of the file Local variables: mode: sgml sgml-omittag:t sgml-shorttag:t sgml-minimize-attributes:nil sgml-always-quote-attributes:t sgml-indent-step:1 sgml-indent-data:t indent-tabs-mode:nil sgml-parent-document:nil sgml-default-dtd-file:"../../manual.ced" sgml-exposed-tags:nil sgml-local-catalogs:nil sgml-local-ecat-files:nil End: vim600: syn=xml fen fdm=syntax fdl=2 si vim: et tw=78 syn=sgml vi: ts=1 sw=1 --> http://cvs.php.net/viewvc.cgi/phpdoc-ru/language/oop5/static.xml?view=markup&rev=1.1 Index: phpdoc-ru/language/oop5/static.xml +++ phpdoc-ru/language/oop5/static.xml <?xml version="1.0" encoding="utf-8" ?> <!-- EN-Revision: 1.17 --> <!-- $Revision: 1.1 $ --> <sect1 xml:id="language.oop5.static" xmlns="http://docbook.org/ns/docbook"> <title>ÐлÑÑевое Ñлово "static"</title> <para> ÐбÑÑвление ÑвойÑÑв и меÑодов клаÑÑа ÑÑаÑиÑеÑкими позволÑÐµÑ Ð¾Ð±ÑаÑаÑÑÑÑ Ðº ним без ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ ÑкземплÑÑа клаÑÑа. ÐÑÑибÑÑ ÐºÐ»Ð°ÑÑа, обÑÑвленнÑй ÑÑаÑиÑеÑким, не можеÑÑ Ð±ÑÑÑ Ð´Ð¾ÑÑÑпен поÑÑедÑÑвом ÑкземплÑÑа клаÑÑа (но ÑÑаÑиÑеÑкий меÑод Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð²Ñзван). </para> <para> Ð ÑелÑÑ ÑовмеÑÑимоÑÑи Ñ PHP 4, Ñделано Ñак, ÑÑо еÑли не иÑполÑзовалоÑÑ Ð¾Ð¿Ñеделение <link linkend="language.oop5.visibility">облаÑÑи видимоÑÑи</link>, Ñо Ñлен или меÑод бÑÐ´ÐµÑ ÑаÑÑмаÑÑиваÑÑÑÑ, как еÑли Ð±Ñ Ð¾Ð½ бÑл обÑÑвлен как <literal>public</literal>. </para> <para> Так как ÑÑаÑиÑеÑкие меÑÐ¾Ð´Ñ Ð²ÑзÑваÑÑÑÑ Ð±ÐµÐ· ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ ÑкземплÑÑа клаÑÑа, Ñо пÑевдо-пеÑÐµÐ¼ÐµÐ½Ð½Ð°Ñ <varname>$this</varname> не доÑÑÑпна внÑÑÑи меÑода, обÑÑвленного ÑÑаÑиÑеÑким. </para> <para> ÐоÑÑÑп к ÑÑаÑиÑеÑким ÑвойÑÑвам клаÑÑа не Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¿Ð¾Ð»ÑÑен ÑеÑез опеÑаÑÐ¾Ñ ->. </para> <para> ÐÑи попÑÑке вÑзова неÑÑаÑиÑеÑÐºÐ¸Ñ Ð¼ÐµÑодов ÑÑаÑиÑеÑки вÑводиÑÑÑ Ð¿ÑедÑпÑеждение ÑÑÐ¾Ð²Ð½Ñ E_STRICT. </para> <para> ÐаÑÐ¸Ð½Ð°Ñ Ñ Ð²ÐµÑÑии PHP 5.3.0 ÑÑÑеÑÑвÑÐµÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑÑ ÑÑÑлаÑÑÑÑ Ð½Ð° клаÑÑ Ð¸ÑполÑзÑÑ Ð¿ÐµÑеменнÑÑ. ÐоÑÑÐ¾Ð¼Ñ Ð·Ð½Ð°Ñение пеÑеменной в Ñаком ÑлÑÑае не Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ ÐºÐ»ÑÑевÑм Ñловом (напÑимеÑ, <literal>self</literal>, <literal>parent</literal> и <literal>static</literal>). </para> <example> <title>ÐÑÐ¸Ð¼ÐµÑ ÑÑаÑиÑеÑкого ÑвойÑÑва</title> <programlisting role="php"> <![CDATA[ <?php class Foo { public static $my_static = 'foo'; public function staticValue() { return self::$my_static; } } class Bar extends Foo { public function fooStatic() { return parent::$my_static; } } print Foo::$my_static . "\n"; $foo = new Foo(); print $foo->staticValue() . "\n"; print $foo->my_static . "\n"; // Ðе опÑеделено ÑвойÑÑво my_static print $foo::$my_static . "\n"; $classname = 'Foo'; print $classname::$my_static . "\n"; // ÐаÑÐ¸Ð½Ð°Ñ ÑолÑко Ñ PHP 5.3.0 print Bar::$my_static . "\n"; $bar = new Bar(); print $bar->fooStatic() . "\n"; ?> ]]> </programlisting> </example> <example> <title>ÐÑÐ¸Ð¼ÐµÑ ÑÑаÑиÑеÑкого меÑода</title> <programlisting role="php"> <![CDATA[ <?php class Foo { public static function aStaticMethod() { // ... } } Foo::aStaticMethod(); $classname = 'Foo'; $classname::aStaticMethod(); // ÐаÑÐ¸Ð½Ð°Ñ ÑолÑко Ñ PHP 5.3.0 ?> ]]> </programlisting> </example> </sect1> <!-- Keep this comment at the end of the file Local variables: mode: sgml sgml-omittag:t sgml-shorttag:t sgml-minimize-attributes:nil sgml-always-quote-attributes:t sgml-indent-step:1 sgml-indent-data:t indent-tabs-mode:nil sgml-parent-document:nil sgml-default-dtd-file:"../../manual.ced" sgml-exposed-tags:nil sgml-local-catalogs:nil sgml-local-ecat-files:nil End: vim600: syn=xml fen fdm=syntax fdl=2 si vim: et tw=78 syn=sgml vi: ts=1 sw=1 --> http://cvs.php.net/viewvc.cgi/phpdoc-ru/language/oop5/visibility.xml?view=markup&rev=1.1 Index: phpdoc-ru/language/oop5/visibility.xml +++ phpdoc-ru/language/oop5/visibility.xml <?xml version="1.0" encoding="utf-8" ?> <!-- EN-Revision: 1.15 --> <!-- $Revision: 1.1 $ --> <sect1 xml:id="language.oop5.visibility" xmlns="http://docbook.org/ns/docbook"> <title>ÐблаÑÑÑ Ð²Ð¸Ð´Ð¸Ð¼Ð¾ÑÑи</title> <para> ÐблаÑÑÑ Ð²Ð¸Ð´Ð¸Ð¼Ð¾ÑÑи ÑвойÑÑва или меÑода Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¾Ð¿Ñеделена пÑÑем иÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ ÑледÑÑÑÐ¸Ñ ÐºÐ»ÑÑевÑÑ Ñлов в обÑÑвлении: public, protected или private. ÐоÑÑÑп к ÑвойÑÑвам и меÑодам клаÑÑам, обÑÑвленнÑм как public (обÑедоÑÑÑпнÑй), Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑоиÑÑ Ð¾Ð´Ð¸ÑÑ Ð¸Ð· лÑбого меÑÑа. ÐодиÑикаÑÐ¾Ñ protected (заÑиÑеннÑй) позволÑÐµÑ Ð¸Ð¼ÐµÑÑ Ð´Ð¾ÑÑÑп наÑледÑемÑм и ÑодиÑелÑÑким клаÑÑам (а, Ñакже клаÑÑÑ, в коÑоÑом опÑеделен Ñам Ñлен клаÑÑа). ÐодиÑикаÑÐ¾Ñ private (закÑÑÑÑй) огÑаниÑÐ¸Ð²Ð°ÐµÑ Ð¾Ð±Ð»Ð°ÑÑÑ Ð²Ð¸Ð´Ð¸Ð¼Ð¾ÑÑи Ñак, ÑÑо ÑолÑко клаÑÑ, где обÑÑвлен Ñам ÑлеменÑ, Ð¸Ð¼ÐµÐµÑ Ðº Ð½ÐµÐ¼Ñ Ð´Ð¾ÑÑÑп. </para> <sect2 xml:id="language.oop5.visiblity-members"> <title>ÐблаÑÑÑ Ð²Ð¸Ð´Ð¸Ð¼Ð¾ÑÑи ÑвойÑÑв</title> <para> СвойÑÑва клаÑÑа Ð´Ð¾Ð»Ð¶Ð½Ñ Ð±ÑÑÑ Ð¾Ð¿ÑÐµÐ´ÐµÐ»ÐµÐ½Ñ ÑеÑез модиÑикаÑоÑÑ public, private, или protected. </para> <para> <example> <title>ÐбÑÑвление ÑвойÑÑва клаÑÑа</title> <programlisting role="php"> <![CDATA[ <?php /** * ÐпÑеделение MyClass */ class MyClass { public $public = 'ÐбÑий'; protected $protected = 'ÐаÑиÑеннÑй'; private $private = 'ÐакÑÑÑÑй'; function printHello() { echo $this->public; echo $this->protected; echo $this->private; } } $obj = new MyClass(); echo $obj->public; // РабоÑÐ°ÐµÑ echo $obj->protected; // ÐеиÑпÑÐ°Ð²Ð¸Ð¼Ð°Ñ Ð¾Ñибка echo $obj->private; // ÐеиÑпÑÐ°Ð²Ð¸Ð¼Ð°Ñ Ð¾Ñибка $obj->printHello(); // ÐÑÐ²Ð¾Ð´Ð¸Ñ ÐбÑий, ÐаÑиÑеннÑй и ÐакÑÑÑÑй /** * ÐпÑеделение MyClass2 */ class MyClass2 extends MyClass { // ÐÑ Ð¼Ð¾Ð¶ÐµÐ¼ пеÑеопÑеделиÑÑ public и protected меÑодÑ, но не private protected $protected = 'ÐаÑиÑеннÑй2'; function printHello() { echo $this->public; echo $this->protected; echo $this->private; } } $obj2 = new MyClass2(); echo $obj2->public; // РабоÑÐ°ÐµÑ echo $obj2->private; // ÐеопÑеделен echo $obj2->protected; // ÐеиÑпÑÐ°Ð²Ð¸Ð¼Ð°Ñ Ð¾Ñибка $obj2->printHello(); // ÐÑÐ²Ð¾Ð´Ð¸Ñ ÐбÑий, ÐаÑиÑеннÑй2 и ÐакÑÑÑÑй ?> ]]> </programlisting> </example> </para> <note> <simpara> ÐеÑод обÑÑÐ²Ð»ÐµÐ½Ð¸Ñ Ð¿ÐµÑеменной ÑеÑез клÑÑевое Ñлово <emphasis>var</emphasis>, пÑинÑÑÑй в PHP 4, до ÑÐ¸Ñ Ð¿Ð¾Ñ Ð¿Ð¾Ð´Ð´ÐµÑживаеÑÑÑ Ð² ÑелÑÑ ÑовмеÑÑимоÑÑи (как Ñиноним клÑÑевого Ñлова public). РвеÑÑиÑÑ PHP 5 ниже 5.1.3 Ñакое иÑполÑзование вÑÐ²Ð¾Ð´Ð¸Ñ Ð¿ÑедÑпÑеждение <constant>E_STRICT</constant>. </simpara> </note> </sect2> <sect2 xml:id="language.oop5.visiblity-methods"> <title>ÐблаÑÑÑ Ð²Ð¸Ð´Ð¸Ð¼Ð¾ÑÑи меÑода</title> <para> ÐеÑÐ¾Ð´Ñ ÐºÐ»Ð°ÑÑа Ð´Ð¾Ð»Ð¶Ð½Ñ Ð±ÑÑÑ Ð¾Ð¿ÑÐµÐ´ÐµÐ»ÐµÐ½Ñ ÑеÑез модиÑикаÑоÑÑ public, private, или protected. ÐеÑодÑ, где опÑеделение модиÑикаÑоÑа оÑÑÑÑÑÑвÑеÑ, опÑеделÑÑÑÑÑ ÐºÐ°Ðº public. </para> <para> <example> <title>ÐбÑÑвление меÑода</title> <programlisting role="php"> <![CDATA[ <?php /** * ÐпÑеделение MyClass */ class MyClass { // ÐбÑÑвление обÑедоÑÑÑпного конÑÑÑÑкÑоÑа public function __construct() { } // ÐбÑÑвление обÑедоÑÑÑпного меÑода public function MyPublic() { } // ÐбÑÑвление заÑиÑенного меÑода protected function MyProtected() { } // ÐбÑÑвление закÑÑÑого меÑода private function MyPrivate() { } // ÐÑо обÑедоÑÑÑпнÑй меÑод function Foo() { $this->MyPublic(); $this->MyProtected(); $this->MyPrivate(); } } $myclass = new MyClass; $myclass->MyPublic(); // РабоÑÐ°ÐµÑ $myclass->MyProtected(); // ÐеиÑпÑÐ°Ð²Ð¸Ð¼Ð°Ñ Ð¾Ñибка $myclass->MyPrivate(); // ÐеиÑпÑÐ°Ð²Ð¸Ð¼Ð°Ñ Ð¾Ñибка $myclass->Foo(); // РабоÑÐ°ÐµÑ Ð¾Ð±Ñий, заÑиÑеннÑй и закÑÑÑÑй /** * ÐпÑеделение MyClass2 */ class MyClass2 extends MyClass { // ÐÑо обÑедоÑÑÑпнÑй меÑод function Foo2() { $this->MyPublic(); $this->MyProtected(); $this->MyPrivate(); // ÐеиÑпÑÐ°Ð²Ð¸Ð¼Ð°Ñ Ð¾Ñибка } } $myclass2 = new MyClass2; $myclass2->MyPublic(); // РабоÑÐ°ÐµÑ $myclass2->Foo2(); // РабоÑÐ°ÐµÑ Ð¾Ð±Ñий и заÑиÑеннÑй, закÑÑÑÑй не ÑабоÑÐ°ÐµÑ class Bar { public function test() { $this->testPrivate(); $this->testPublic(); } public function testPublic() { echo "Bar::testPublic\n"; } private function testPrivate() { echo "Bar::testPrivate\n"; } } class Foo extends Bar { public function testPublic() { echo "Foo::testPublic\n"; } private function testPrivate() { echo "Foo::testPrivate\n"; } } $myFoo = new foo(); $myFoo->test(); // Bar::testPrivate // Foo::testPublic ?> ]]> </programlisting> </example> </para> </sect2> </sect1> <!-- Keep this comment at the end of the file Local variables: mode: sgml sgml-omittag:t sgml-shorttag:t sgml-minimize-attributes:nil sgml-always-quote-attributes:t sgml-indent-step:1 sgml-indent-data:t indent-tabs-mode:nil sgml-parent-document:nil sgml-default-dtd-file:"../../manual.ced" sgml-exposed-tags:nil sgml-local-catalogs:nil sgml-local-ecat-files:nil End: vim600: syn=xml fen fdm=syntax fdl=2 si vim: et tw=78 syn=sgml vi: ts=1 sw=1 -->