LXXVI . Sobrecarga de propriedades e métodos de objetos

Introdução

O propósito desta extensão é permitir a sobrecarga de propriedades de acesso e metodos de objetos . Somente uma função é definida nesta extensão , overload( ) que recebe o nome da classe que deve ter esta funcionalidade habilitada . A classe especificada tem que definir os metodos para ter esta funcionalidade : __get( ) , __set( ) e __call( ) respectivamente para leitura / escrita das propriedades , ou chamar um metodo . Desta forma a sobrecarga pode ser seletiva : Dentro destas funções a sobrecarga é desabilitada de forma que você possa acessar propriedades do objeto normalmente .

Atenção

Este módulo é EXPERIMENTAL . Isso quer dizer que o comportamento neste módulo -- - incluindo suas funções e seus nomes , e TUDO mais que está documentado sobre esse módulo -- - poderá mudar em futuras versões do PHP , SEM QUALQUER NOTIFICAÇÃO . Esteja avisado , e use este módulo por sua própria conta e risco .

Exemplos

Alguns exemplos simples da utilização da função overload( ) :

Exemplo 1 . Sobrecarga de uma classe no PHP

 
?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

 
nós

 
sobrecarregamos

 
o

 
objeto

 
OO

 
overload('OO')

 
;

 
$o

 
=

 
new

 
OO

 
;

 
print

 
"\$o

 
-

 
a

 
:

 
$o

 
-

 
a\n"

 
;

 
/

 
/

 
imprime

 
:

 
$o

 
-

 
a

 
:

 
print

 
"\$o

 
-

 
b

 
:

 
$o

 
-

 
b\n"

 
;

 
/

 
/

 
imprime

 
:

 
$o

 
-

 
b

 
:




 
9

 
print

 
"

 
\$o

 
-

 
c

 
:

 
$o

 
-

 
c\n"

 
;

 
/

 
/

 
imprime

 
:

 
$o

 
-

 
c

 
:




 
42

 
print

 
"

 
\$o

 
-

 
d

 
:

 
$o

 
-

 
d\n"

 
;

 
/

 
/

 
imprime

 
:

 
$o

 
-

 
d

 
:

 
/

 
/

 
adicionar

 
um

 
novo

 
intem

 
para

 
o

 
array

 
$elem

 
em

 
OO

 
$o

 
-

 
x

 
=

 
56

 
;

 
/

 
/

 
iniciar

 
stdclass

 


 
integrada

 
no

 
PHP

 
4

 
)

 
/

 
/

 
$var

 
não

 
é

 
sobrecarregada

 
!

 
$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)

 
;

 

?





Atenção

Como esta é uma extensão experimental , nem todas as coisas funcionam . Não existe ainda suporte para __call( ) Não existe ainda suporte para __call( ) e você somente pode fazer a sobrecaraga das operações get e set para propriedades . Você não pode invocar as chamadas originais da classe e __set( ) somente funciona até um nível de acesso de propriedades .

Índice
overload -- Ativa a chamada sobrecarregada de propriedades e métodos para uma classe