Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
class object{
public $data = array();
public function __construct(){
$this->data = array();
}
public function __set($name, $value){
$this->data[$name] = $value;
}
public function __get($name){
return $this->data[$name];
}
public function __call($name, $args){
return $this->data[$name]();
}
};Seja mais específico, não há nada que não seja interpretado. Entretanto, isso não faz nenhum sentido:
public $data = array();
public function __construct(){
$this->data = array();
}
Você está atribuindo duas vezes o mesmo valor. Escolha um ou outro. Além de que, no seu caso utilizando métodos mágicos, $data deve ser private.
Aquele ponto e vírgula ( ; ), perdido no final da sua classe, é desnecessário. Não irá afetar em nada seu código, só está ocupando um byte a mais no código.
Ah sim.. me desculpem.. sou novo aqui no forum :) ..
acho que postei em lugar errado!! isso não é uma pergunta e sim uma postagem para quem quiser utilizar um objeto que permite adicionar funções diretas.. tipo $obj = new object(); $obj->funcao = function(){ }; .. pois se somente utilizamos stdClass() não podemos adicionar funções internas pois da erro!! novamente peço desculpas por postar no lugar errado.. onde posso postar codigos de php para ajudar o pessoal??
<?php
$o = new StdClass();
$o->a = function () { echo 'b'; };
call_user_func($o->a);Lembra javascript, uma coisa que ajudaria seria argumentos, veja:
Ao invés disso:
public function __call($name, $args){
return $this->data[$name]();
}
Isso:
public function __call($name, $args){
return call_user_func_array($this->data[$name], $args);
}
E você poderia utilizar:
$obj = new object;
$obj->a = function ($a, $b) {
echo sprintf('%s %s', $a, $b);
};
$obj->a('um', 'dois');
O output seria "um dois".
Amigo vc tem alguma duvida ?!
Seja mais claro por favor!
Abs