File: overload.xml

package info (click to toggle)
phpdoc 20020310-1
  • links: PTS
  • area: main
  • in suites: woody
  • size: 35,272 kB
  • ctags: 354
  • sloc: xml: 799,767; php: 1,395; cpp: 500; makefile: 200; sh: 140; awk: 51
file content (142 lines) | stat: -rw-r--r-- 4,112 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
<?xml version="1.0" encoding="iso-8859-1"?>
<!-- $Revision: 1.2 $ -->
 <reference id="ref.overload">
  <title>Object property and method call overloading</title>
  <titleabbrev>Object overloading</titleabbrev>

  <partintro id="overload.partintro">
   &warn.experimental;
   <para>
    O propsito desta extenso  permitir overload de propriedades
    de acesso e metodos de objetos. Somente uma funo  definida
    nesta extenso, <function>overload</function> que recebe o
    nome da classe que deve ter esta funcionalidade habilitada.
    A classe especificada tem que definir os metodos para
    ter esta funcionalidade: <literal>__get()</literal>,
    <literal>__set()</literal> and <literal>__call()</literal>
    respectivamente para get/set as propriedades, ou chamar um metodo.
    Desta forma o overloading pode ser seletivo. Dentro destas funes
    o overloading  disabilitado de forma que voc possa acessar 
    propriedades do objeto normalmente.
   </para>
   <para>
    Alguns exemplos simples da utilizao da funo
    <function>overload</function>
    <example>
     <title>Overload de uma classe no PHP</title>
     <programlisting role="php">
<![CDATA[
<?php

class OO
{
    var $a = 111;
    var $elem = array('b' => 9, 'c' => 42);

    // Metodo callback para pegar uma propriedade
    function __get($prop_name, &$prop_value)
    {
        if (isset($this->elem[$prop_name])) {
            $prop_value = $this->elem[$prop_name];
            return true;
        } else {
            return false;
        }
    }

    // Metodo callback para definir uma propriedade
    function __set($prop_name, $prop_value)
    {
        $this->elem[$prop_name] = $prop_value;
        return true;
    }
}

// Aqui ns  feito o overload do objeto OO
overload('OO');

$o = new OO;
print "\$o->a: $o->a\n"; // print: $o->a:
print "\$o->b: $o->b\n"; // print: $o->b: 9
print "\$o->c: $o->c\n"; // print: $o->c: 42
print "\$o->d: $o->d\n"; // print: $o->d:

// adicionar um novo intem para o array $elem em OO
$o->x = 56; 

// iniciar stdclass ( integrada no PHP 4)
// $var no  overloaded!
$val = new stdclass;
$val->prop = 555;

// Que "a" seja um array com o objeto $val dentro dele
// mas __set() o colocar no array $elem
$o->a = array($val);
var_dump($o->a[0]->prop);

?>
]]>
     </programlisting>
    </example>
   </para>
   <warning>
    <para>
     Como esta  uma extenso experimental, nem todas 
     as coisas funcionam. No existe ainda suporte para
     <literal>__call()</literal> e voc somente pode
     fazer overload das operaes get e set para
     propriedades. Voc no pode invocar as chamadas
     originais da classe (antes de terem sido overloaded),
     e <literal>__set()</literal> somente funciona
     at um nvel de acesso de propriedades.
    </para>
   </warning>
  </partintro>

  <refentry id="function.overload">
   <refnamediv>
    <refname>overload</refname>
    <refpurpose>
     Habilitar overloading de chamadas de propriedade e metodo para classes
    </refpurpose>
   </refnamediv>
   <refsect1>
    <title>Descrio</title>
     <methodsynopsis>
      <type>void</type><methodname>overload</methodname>
      <methodparam choice="opt"><type>string</type><parameter>
        class_name
       </parameter></methodparam>
     </methodsynopsis>
    <para>
     A funo <function>overload</function> ir habilitar overloading 
     de chamadas de propriedades e metodos para classes identificadas
     por <parameter>class_name</parameter>.
     <link linkend="overload.partintro">Veja um exemplo
     na seo introdutria desta parte</link>.
    </para>
   </refsect1>
  </refentry>
 </reference>

<!-- 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
-->