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
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.