Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Robson Silva

[Resolvido] Alterar o modificador de acesso em tempo de execução

Recommended Posts

Boa noite.

Gostaria de saber se é possível alterar o modificador de acesso das variáveis de uma classe em tempo de execução.

 

Numa classe normal fazemos:

 

class Pessoa
{
  private $nome;
  private $idade;
  private $sexo;
}

No meu caso estou fazendo:

 

class Pessoa
{
  public function __construct()
  {
    $this->nome  = NULL;
    $this->idade = NULL;
    $this->sexo  = NULL;
  }
}

Funciona perfeitamente, só que as variáveis ficam públicas.

Preciso mudar os modificadores de acesso das variáveis nome, idade e sexo para private.

 

O motivo de fazer isso é que estou pegando os campos da tabela pessoas do banco de dados para atribuir na classe, desta forma não preciso replicar a estrutura do banco no php.

Se precisar criar um campo na tabela, meu objeto já terá essa nova variável, assim o sistema fica mais dinamico.

 

Tentei serializar, mas ele usa caracteres especiais e nao consegui alterar.

Sem falar que é gambiarra no meu ponto de vista.

 

 

Aguardo idéias.

 

Abraço

Compartilhar este post


Link para o post
Compartilhar em outros sites

acho que o mais próximo do que você quer seria montar a classe com as propriedades com private e utilizar getters/setters

 

procure saber também sobre como criar classes/métodos estáticos

Compartilhar este post


Link para o post
Compartilhar em outros sites

Robson Silva,

 

Todos esses problemas que você vem tendo (todos sobre o mesmo tema) são devidos a falta de modelagem, procure estudar padrões de projeto que esses tipos de problemas deixarão de existir.

 

No caso descrito no tópico, você pode usar Lazy Initialization:

 

AbstractLazy.php

<?php
abstract class AbstractLazy {
private $data;

final public function __construct(){
	$this->data = new ArrayIterator();
}

public function __get( $name ){
	$ret = null;

	if ( isset( $this->data[ $name ] ) ){
		$ret =& $this->data[ $name ];
	} else {
		trigger_error( sprintf( 'Undefined variable: %s' , $name ) , E_USER_NOTICE );
	}

	return $ret;
}

public function __set( $name , $value ){
	$this->data[ $name ] = $value;
}
}

 

Usuarios.php

<?php
class Usuarios extends AbstractLazy {}

 

teste.php

$usuario = new Usuarios();
$usuario->nome = 'Fulano';
$usuario->idade = 100;
$usuario->sexo = 'M';

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado João.

 

Sua ajuda está sendo muito importante pra mim.

Orienação a objetos eu sei, sem problemas.

Mas nessa transição enfrentei alguns problemas para deixar meu código mais dinâmico o possível.

 

Desculpe qualquer encomodo, prefiro continuar procurando ajuda aqui e entender como esses padrões funcionam ao invés de sair pegando um framework e não entender como funciona a lógica por trás dele.

 

Muito obrigado mesmo.

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.