svn: /phpdoc/kr/trunk/language/oop5/ magic.xml
[email protected] (Yu Ilho)
| Newsgroups | php.doc.kr |
|---|---|
| Message-ID | <[email protected]> |
acidd15 Sun, 15 Mar 2015 06:20:57 +0000
Revision: http://svn.php.net/viewvc?view=revision&revision=336077
Log:
initial translate.
Changed paths:
A phpdoc/kr/trunk/language/oop5/magic.xml
svn-diffs-336077.txt
(text/x-diff, 11.5 KB)
Added: phpdoc/kr/trunk/language/oop5/magic.xml
===================================================================
--- phpdoc/kr/trunk/language/oop5/magic.xml (rev 0)
+++ phpdoc/kr/trunk/language/oop5/magic.xml 2015-03-15 06:20:57 UTC (rev 336077)
@@ -0,0 +1,344 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- $Revision$ -->
+<!-- EN-Revision: 334638 Maintainer: acidd15 Status: ready -->
+<!-- Reviewed: no -->
+
+ <sect1 xml:id="language.oop5.magic" xmlns="http://docbook.org/ns/docbook">
+ <title>특수 메서드</title>
+ <para>
+ 다음 함수들은
+ <link linkend="object.construct">__construct()</link>,
+ <link linkend="object.destruct">__destruct()</link>,
+ <link linkend="object.call">__call()</link>,
+ <link linkend="object.callstatic">__callStatic()</link>,
+ <link linkend="object.get">__get()</link>,
+ <link linkend="object.set">__set()</link>,
+ <link linkend="object.isset">__isset()</link>,
+ <link linkend="object.unset">__unset()</link>,
+ <link linkend="object.sleep">__sleep()</link>,
+ <link linkend="object.wakeup">__wakeup()</link>,
+ <link linkend="object.tostring">__toString()</link>,
+ <link linkend="object.invoke">__invoke()</link>,
+ <link linkend="object.set-state">__set_state()</link>,
+ <link linkend="object.clone">__clone()</link> and
+ <link linkend="object.debuginfo">__debugInfo()</link>
+ PHP 클래스에서는 특별합니다. 이 함수들과 관련된 특별한 사용외에 클래스에서는 해당 함수명을 사용하지 않아야 합니다.
+ </para>
+
+ <caution>
+ <simpara>
+ PHP에서는 모든 특수함수명이 __ 로 시작합니다.
+ 문서화된 특수기능을 위한게 아니라면 함수명을 __ 로 시작하지 않을것을 권장합니다.
+ </simpara>
+ </caution>
+
+ <sect2 xml:id="language.oop5.magic.sleep">
+ <title>
+ <link linkend="object.sleep">__sleep()</link> and
+ <link linkend="object.wakeup">__wakeup()</link>
+ </title>
+
+ <methodsynopsis xml:id="object.sleep">
+ <modifier>public</modifier> <type>array</type><methodname>__sleep</methodname>
+ <void/>
+ </methodsynopsis>
+ <methodsynopsis xml:id="object.wakeup">
+ <type>void</type><methodname>__wakeup</methodname>
+ <void/>
+ </methodsynopsis>
+
+ <para>
+ <function>serialize</function>는 클래스가 <link linkend="object.sleep">__sleep()</link> 특수함수를 가지는지 확인합니다.
+ 만약에 그렇다면, 직렬화 이전에 실행됩니다. 또한 객체에서 직렬화 가능한 모든 변수들의 배열을 반환할 수 있음을 전제로 객체를 제거할수 있습니다.
+ 만약에 메서드가 다른 어떤것도 리턴하지 않으면, &null; 이 직렬화되고 <constant>E_NOTICE</constant>를 발생합니다.
+ </para>
+ <note>
+ <para>
+ <link linkend="object.sleep">__sleep()</link>에서 부모 클래스의 private 속성의 이름을 반환할 수 없습니다.
+ 그렇게 하면 <constant>E_NOTICE</constant> 레벨 에러를 발생합니다.
+ 대신에 <classname>Serializable</classname> 인터페이스를 사용할 수 있을것입니다.
+ </para>
+ </note>
+ <para>
+ <link linkend="object.sleep">__sleep()</link> 의 의도된 사용은 데이터를 커밋하거나 비슷한 정리 작업을 수행하는 것입니다.
+ 또한, 이 함수는 매우 큰 객체를 완전히 저장할 필요가 없을 경우에 유용합니다.
+ </para>
+ <para>
+ 반대로, <function>unserialize</function> 는 클래스가
+ <link linkend="object.wakeup">__wakeup()</link> 특수함수를 가지는지 확인합니다.
+ 만약에 그렇다면, 원래의 객체가 가졌던 리소스들을 재건할수 있습니다.
+ </para>
+ <para>
+ <link linkend="object.wakeup">__wakeup()</link>의 의도된 사용은 직렬화 과정에서
+ 끊어진 데이터베이스 커넥션을 재연결하고, 다른 재초기화 작업을 수행하는것입니다.
+ </para>
+ <example>
+ <title>Sleep 과 wakeup</title>
+ <programlisting role="php">
+<![CDATA[
+<?php
+class Connection
+{
+ protected $link;
+ private $dsn, $username, $password;
+
+ public function __construct($dsn, $username, $password)
+ {
+ $this->dsn = $dsn;
+ $this->username = $username;
+ $this->password = $password;
+ $this->connect();
+ }
+
+ private function connect()
+ {
+ $this->link = new PDO($this->dsn, $this->username, $this->password);
+ }
+
+ public function __sleep()
+ {
+ return array('dsn', 'username', 'password');
+ }
+
+ public function __wakeup()
+ {
+ $this->connect();
+ }
+}?>
+]]>
+ </programlisting>
+ </example>
+ </sect2>
+
+ <sect2 xml:id="language.oop5.magic.tostring">
+ <title><link linkend="object.tostring">__toString()</link></title>
+ <methodsynopsis xml:id="object.tostring">
+ <modifier>public</modifier> <type>string</type><methodname>__toString</methodname>
+ <void/>
+ </methodsynopsis>
+ <para>
+ <link linkend="object.tostring">__toString()</link> 메서드는 클래스가 문자열로 변환될때의 동작을 결정하도록 해줍니다.
+ 예를 들면, <literal>echo $obj;</literal> 가 출력할 결과를 보면 됩니다. 메서드는 문자열을 리턴해야 합니다. 그렇지 않을경우
+ <constant>E_RECOVERABLE_ERROR</constant> 레벨의 에러가 발생합니다.
+ </para>
+ <warning>
+ <simpara>
+ <link linkend="object.tostring">__toString()</link> 메서드 내에서는 예외를 발생할 수 없습니다.
+ 그럴경우에는 치명적인 에러가 발생합니다.
+ </simpara>
+ </warning>
+ <example>
+ <title>간단한 예제</title>
+ <programlisting role="php">
+<![CDATA[
+<?php
+// Declare a simple class
+class TestClass
+{
+ public $foo;
+
+ public function __construct($foo)
+ {
+ $this->foo = $foo;
+ }
+
+ public function __toString()
+ {
+ return $this->foo;
+ }
+}
+
+$class = new TestClass('Hello');
+echo $class;
+?>
+]]>
+ </programlisting>
+ &example.outputs;
+ <screen>
+<![CDATA[
+Hello
+]]>
+ </screen>
+ </example>
+ <para>
+ 주의할 점은 PHP 5.2.0 이전에는 <link linkend="object.tostring">__toString()</link> 메서드가 오직
+ <function>echo</function> 와 <function>print</function> 에만 연결되어 있다는 것입니다.
+ PHP 5.2.0 이후로는, 어떤 문자열 컨텍스트라도 호출할 수 있습니다(예를 들면
+ <function>printf</function> 의 <literal>%s</literal> 와 같은) 그러나 다른 타입의 컨텍스트에는 호출되지 않습니다.
+ (예를 들어 <literal>%d</literal> 와 같은).
+ PHP 5.2.0 이후로는, <link linkend="object.tostring">__toString()</link>이 없는 객체의 문자열로의 변환은
+ <constant>E_RECOVERABLE_ERROR</constant> 를 발생할 것입니다.
+ </para>
+ </sect2>
+
+ <sect2 xml:id="language.oop5.magic.invoke">
+ <title><link linkend="object.invoke">__invoke()</link></title>
+ <methodsynopsis xml:id="object.invoke">
+ <type>mixed</type><methodname>__invoke</methodname>
+ <methodparam choice="opt"><parameter>...</parameter></methodparam>
+ </methodsynopsis>
+ <para>
+ <link linkend="object.invoke">__invoke()</link> 메서드는 스크립트가 객체를 함수로 호출했을때 호출합니다.
+ </para>
+ <note>
+ <para>
+ 이 기능은 PHP 5.3.0 이후부터 존재합니다.
+ </para>
+ </note>
+ <example>
+ <title>Using <link linkend="object.invoke">__invoke()</link></title>
+ <programlisting role="php">
+<![CDATA[
+<?php
+class CallableClass
+{
+ public function __invoke($x)
+ {
+ var_dump($x);
+ }
+}
+$obj = new CallableClass;
+$obj(5);
+var_dump(is_callable($obj));
+?>
+]]>
+ </programlisting>
+ &example.outputs;
+ <screen>
+<![CDATA[
+int(5)
+bool(true)
+]]>
+ </screen>
+ </example>
+ </sect2>
+
+ <sect2 xml:id="language.oop5.magic.set-state">
+ <title><link linkend="object.set-state">__set_state()</link></title>
+ <methodsynopsis xml:id="object.set-state">
+ <modifier>static</modifier> <type>object</type><methodname>__set_state</methodname>
+ <methodparam><type>array</type><parameter>properties</parameter></methodparam>
+ </methodsynopsis>
+ <para>
+ <link linkend="language.oop5.static">static</link> 메서드는 PHP 5.1.0 이후부터
+ <function>var_export</function> 에 의해 내보내진 클래스를 위해 호출됩니다.
+ </para>
+ <para>
+ 이 메서드의 유일한 파라미터는 내보내진 속성을 가진 특정형식(<literal>array('property' => value, ...)</literal>)의 배열입니다.
+ </para>
+ <example>
+ <title><link linkend="object.set-state">__set_state()</link> 의 사용 (PHP 5.1.0 이후)</title>
+ <programlisting role="php">
+<![CDATA[
+<?php
+
+class A
+{
+ public $var1;
+ public $var2;
+
+ public static function __set_state($an_array) // As of PHP 5.1.0
+ {
+ $obj = new A;
+ $obj->var1 = $an_array['var1'];
+ $obj->var2 = $an_array['var2'];
+ return $obj;
+ }
+}
+
+$a = new A;
+$a->var1 = 5;
+$a->var2 = 'foo';
+
+eval('$b = ' . var_export($a, true) . ';'); // $b = A::__set_state(array(
+ // 'var1' => 5,
+ // 'var2' => 'foo',
+ // ));
+var_dump($b);
+
+?>
+]]>
+ </programlisting>
+ &example.outputs;
+ <screen>
+<![CDATA[
+object(A)#2 (2) {
+ ["var1"]=>
+ int(5)
+ ["var2"]=>
+ string(3) "foo"
+}
+]]>
+ </screen>
+ </example>
+ </sect2>
+
+ <sect2 xml:id="language.oop5.magic.debuginfo">
+ <title><link linkend="object.debuginfo">__debugInfo()</link></title>
+ <methodsynopsis xml:id="object.debuginfo">
+ <type>array</type><methodname>__debugInfo</methodname>
+ <void/>
+ </methodsynopsis>
+ <para>
+ 이 메서드는 <function>var_dump</function>에 의해 덤프될때 보여줄 속성을 가져올때 호출됩니다.
+ 만약에 객체에 해당 메서드가 정의되어 있지 않을경우, 모든 public, protected, private 속성을 보여주게 됩니다.
+ </para>
+ <para>
+ 이 기능은 PHP 5.6.0 에서 추가되었습니다.
+ </para>
+ <example>
+ <title>Using <link linkend="object.debuginfo">__debugInfo()</link></title>
+ <programlisting role="php">
+<![CDATA[
+<?php
+class C {
+ private $prop;
+
+ public function __construct($val) {
+ $this->prop = $val;
+ }
+
+ public function __debugInfo() {
+ return [
+ 'propSquared' => $this->prop ** 2,
+ ];
+ }
+}
+
+var_dump(new C(42));
+?>
+]]>
+ </programlisting>
+ &example.outputs;
+ <screen>
+<![CDATA[
+object(C)#1 (1) {
+ ["propSquared"]=>
+ int(1764)
+}
+]]>
+ </screen>
+ </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:"~/.phpdoc/manual.ced"
+sgml-exposed-tags:nil
+sgml-local-catalogs:nil
+sgml-local-ecat-files:nil
+End:
+vim600: syn=xml fen fdm=syntax fdl=2 si
+vim: et tw=78 syn=sgml
+vi: ts=1 sw=1
+-->
Property changes on: phpdoc/kr/trunk/language/oop5/magic.xml
___________________________________________________________________
Added: svn:keywords
+ Id Rev Revision Date LastChangedDate LastChangedRevision Author LastChangedBy HeadURL URL
Added: svn:eol-style
+ native