Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Uma dúvida, como eu faço para criar um objeto de acordo com que a pessoa digitar ?
Ex:
Tenho meu objeto Pessoa !
Então criei um formulário e peguei o nome da pessoa
Felipe
aê na hora de criar o objeto
$felipe = new Pessoa;
como fazer isso de forma automática ???
#netbeans, explicar isso n deu pra entender bem.
O nick #eclipse não é por causa do IDE KKKK
Tipo, já tenho um objeto chamado Pessoa !
E tenho um formulario pedindo o nome !
Digite seu nome: ....
Aê quando eu pegar o nome tipo "pedro"
Automáticamente cria uma variável chamada $pedro
que vai criar o objeto Pessoa
$pedro = New Pessoa;
não é automaticamente amigo.
imagine assim:
class pessoa{
private $nome;
public function __construct($nome){
$this->nome = $nome;
echo "{$this->nome} criada com sucesso";
}
}
$nome = $_POST['nome'];
$pessoa = new Pessoa($nome);
ai ele retorna
e como você vai fazer pra manipular o objeto depois, pq nem o nome da variavel você sabe...
Se a sua variável vai receber uma instancia da classe Pessoa, o mais correto é ela se chamar $pessoa.
Como o próprio nome já diz, uma variável é "variável", então não faz muito sentido ela ter um nome próprio de uma pessoa.
$txt = 'pessoa';
eval("$".$txt." = new Person;");
echo $pessoa;está tentando criar um invariável.. isso sim.. heheeh
estou apredendo pdo entao seria mais ow menos assim?
index.php
$pessoa = new Pessoa();
$pessoa->nome="Marcos";
$pessoa->idade="20";
$pessoa->sexo="Masculino";
$pessoa->exibir();
class.php
class Pessoa{
public $nome;
public $idade;
public $sexo;
public function exibir(){
echo "Nome: ".$this->nome;
echo "Idade: ".$this->idade;
echo "Sexo: ".$this->sexo;
}Acho que quis dizer POO.
o básico é isso, o grande problema é que existem regras e alguns conceitos básicos.
de uma olhada aqui:
http://forum.imasters.com.br/forum/159-curso-de-php/
certamente depois disso que meu pensamento conseguiu acompanhar o OO.
Vamos voltar ao problema original.
Você quer criar uma variável a partir do valor de outra. Isso se chama variáveis variáveis.
Pode não fazer sentido para muitas coisas, mas é um ponto bem importante quando em uma Parameterized Factory.
Se sua variável vier como um parâmetro GET, ficaria assim:
$name = ( isset( $_GET['name'] ) &&
! empty( $_GET['name'] ) ? $_GET['name'] : 'default' );
$$name = new Person;
class Person {}
Se você depurar isso:
var_dump( $name, $$name, $default );
Receberá:
string 'default' (length=7)
object(Person)[1]
object(Person)[1]
E se você quiser ter certeza de que $$name e $default são o mesmo objeto:
var_dump( spl_object_hash( $$name ) == spl_object_hash( $default ) );
Note que usei $default porque como não passei um valor via GET o padrão foi assumido (pura preguiça :P).
Agora o ponto que realmente tange o escopo do tópico é que as variáveis variáveis além de serem usadas dinamicamente elas são criadas dinamicamente.
Ou seja, você JAMAIS vai ter no seu código $felipe, $bruno, $papaiNoel instanciando o objeto Person e sim o que foi mostrado acima.
Resumindo, o que você pretende fazer ou não foi bem explicado ou realmente não faz sentido algum.
Seu código vai instanciar um objeto Person e ponto. Então, através desse objeto você popula as informações para que não tenha propriedades públicas que violam o encapsulamento.
A questão de possuir o nome de uma variável dependendo do que ela representa, se chama variables variable (variáveis variáveis ou variáveis variantes).
No seu caso, não faz o menor sentido. Pois se você possuir por exemplo:
$nome = 'Gabriel';
$pessoa = new Pessoa();
$pessoa->setNome($nome);
Não faz o menor sentido fazer assim:
$nome = 'Gabriel';
$$nome= new Pessoa();
$$nome->setNome($nome);
Diferente de quando você já possuir variáveis e deseja que valores, que podem ser de diferentes origens e/ou possuir valores diferentes, sejam distribuídos dentro dessas variáveis.
Por exemplo, eu quero separar entre professor e aluno, que estão em um vetor que eu possuo, em dois vetores.
O vetor:
$pessoas = array(
array('Gabriel Heming' , 'aluno'),
array('Fulano da Silva' , 'professor'),
array('Ciclano Souza' , 'professor'),
array('Beltrano Santos' , 'aluno')
);
Eu já possuo os vetores:
$aluno = array();
$professor = array();
Agora vou separar as pessoas:
foreach($pessoas AS $pessoa) {
if($pessoa[1] == 'professor') {
$professor[] = $pessoa[0];
} else {
$aluno[] = $pessoa[0];
}
}
Esse código de cima, é funcional, e separa entre alunos e professores, mas existe uma forma que resolve o mesmo problema em apenas uma linha dentro da iteração:
foreach($pessoas AS $pessoa) {
$$pessoa[1] = $pessoa[0];
}$$pessoa
oq siginifica $$ na varivavel.
Significa que o nome da variável será o conteúdo (String) da variável pessoa.
No caso, se a variável $pessoa for:
$pessoa = 'Gabriel';
Isso:
$$pessoa;
É o mesmo que :
$Gabriel;
valeuuu.
Alguém não leu as últimas respostas do tópico :P
$$ caracteriza as variáveis variáveis ou como apontado pelo Gabriel, variáveis variantes.
O primeiro cifrão é a definição da variável, como qualquer outra. O segundo cifrão é a referência à outra variável anteriormente definida.
Em tempo de execução esse segundo cifrão será analisado e terá sua definição substituída pelo valor devido. Ex:
Mas como há um outro cifrão antecedendo-o, o que acontece na verdade é a criação de uma nova variável cujo nome será o valor da outra variável.
Confuso né? Mas dá uma olhada na primeira parte da minha resposta anterior que você entende.
Resumidamente é a possibilidade de criar variáveis sem definir explicitamente um nome ou definir um nome hora será uma cosia e hora será outra.
?
tente ser mais claro por favor.
mais não tem muito segredo, é só cria a instancia do objeto e setar as propriedades ou métodos depende do como você vai trabalhar.