Ir para conteúdo
Fórum Script Brasil
  • 0

"transportar" valor de uma função para outra


rxhxtx

Pergunta

Boa tarde amigos, 

estou aqui empenhado nos meus estudos e travei em uma coisa:

quero pegar um valor de uma funcao em outra, já tentei de tudo quanto é jeito, mas não funciona!!

o basicao é isso...

    public static function numeroAleatorio(){
        $query = "SELECT * FROM Rand WHERE numero = :numero;" ;
        $dbh = new PDO('mysql:host=localhost;dbname=aleatorio', 'root', '');
        $stmt = $dbh->prepare($query);
    do {
        $res = rand(10,99);
        $stmt->execute(array(':numero' => $res));
        $row = $stmt->fetchAll(PDO::FETCH_ASSOC);}
    while(count($row) > 0);
        return  $res;	
}

    public function insertCad($arrVar)
    {
       $numero= numeroAleatorio();
			         
        $this->insertDB(
            "Rand",
            "?,?,?",
                  array(
                    $numero,
                      $arrVar['nome'],
                      $arrVar['email']
                  )
          );


....

 como faz para o resultado retornar para $numero???

 

se eu coloco $numero = '23'; funciona, mas quando peço para chamar o valor da outra função, não da em nada....

Editado por rxhxtx
Link para o comentário
Compartilhar em outros sites

9 respostass a esta questão

Posts Recomendados

  • 0

Boa noite, 

 

Em 19/07/2019 em 08:28, Leonardo Persan disse:

As duas funções fazem parte da mesma uma classe?

Por que usou o static em numeroAleatorio?

Cara, para te falar a verdade eu nunca entendi muito bem quando usar o static ou não..

 

Sim, estão dentro da mesma classe, tentei colocando em outra classe também não funcionou...

em todas as partes do meu codigo eu estou conseguindo pegar da seguinte forma

Classes\ClassTal::funcaoTal($var);
ou
Classes\ClassTal::funcaoTal();

mas nesse insertCad não pega nada..

ai decidi colocar dentro da mesma classe para tentar facilitar meu desenvolvimento, mas também sem resultado....

temporariamente estou gerando o valor numa pag1 q joga pra uma pag2 por session, bem gambiarra, so para não travar totalmente ali,

,as eu queria conseguir fazer do jeito certo...

Link para o comentário
Compartilhar em outros sites

  • 0

É mais fácil pensar que uma classe é alguém que armazenar dados e deve fazer coisas dentro de um contexto.

Um método estático (com static) é uma ação que não precisa de contexto.

Dentro de insertCard você pode chamar self::numeroAleatorio() ou NomeClasse::numeroAleatorio()

Link para o comentário
Compartilhar em outros sites

  • 0
Em 21/07/2019 em 15:26, Leonardo Persan disse:

É mais fácil pensar que uma classe é alguém que armazenar dados e deve fazer coisas dentro de um contexto.

Um método estático (com static) é uma ação que não precisa de contexto.

Dentro de insertCard você pode chamar self::numeroAleatorio() ou NomeClasse::numeroAleatorio()

aproveitei sua dica e dei uma bela estudada sobre isso,

realmente em meus estudos eu estava fazendo muita coisa errada nisto.

não usava o private nem abstract, valeu mais essa dica!!!!

 

ultima dúvida com relacao a essa "chamada", se eu escrever self:: eu não preciso citar o nome da classe? desde que ela esteja na mesma classe... isso?

 

 

La em cima, eu preciso colocar o "use nomeDaClasse" ou "extends NomedaClasse"?

isso ainda me deixa um pouco confuso, fazem a mesma coisa???

Editado por rxhxtx
Link para o comentário
Compartilhar em outros sites

  • 0
21 horas atrás, rxhxtx disse:

aproveitei sua dica e dei uma bela estudada sobre isso,

realmente em meus estudos eu estava fazendo muita coisa errada nisto.

não usava o private nem abstract, valeu mais essa dica!!!!

Usar OO de forma realmente certa é difícil, é mais um exercício de pensar as responsabilidades do que realmente de código eu tento usar a técnica de pensar a classe como pessoas mesmo que têm cargos e responsabilidades limitadas rsrsrs

21 horas atrás, rxhxtx disse:

ultima dúvida com relacao a essa "chamada", se eu escrever self:: eu não preciso citar o nome da classe? desde que ela esteja na mesma classe... isso?

Isso mesmo

21 horas atrás, rxhxtx disse:

La em cima, eu preciso colocar o "use nomeDaClasse" ou "extends NomedaClasse"?

 isso ainda me deixa um pouco confuso, fazem a mesma coisa???

Eles fazem coisas bem diferentes, vamos passo a passo...

EXTENDS(Herança)
Com o encapsulamento do código em classes percebeu-se que assim como aconteciam com as funções tinham trechos de códigos que se repetiam em classes diferentes para resolver isso criou-se o conceito de herança, que é você pegar esse código repetido colocar em outra classe e definir ela como "pai" de outras classes. Nessa brincadeira surgiram as Interfaces, Abstracts e Traits, mas isso é história para outra hora rsrsrs

Ex.: As classes Gmail e Hotmail, fazem a mesma coisa, enviam e-mail, mas cada uma conecta de um jeito diferente em servidores diferentes.
Mas digamos que ela tenha que acessar algumas tabelas no seu banco de dados, para coletar dados do usuário. Essa parte da conexão será idêntica já que o banco é o mesmo. Então vamos criar uma classe Email que tenha esse código que é repetido, pra gente não ter retrabalho. Assim
class Email {...}
class Gmail extends Email {...}
class Hotmail extends Email {...}

Resumo extends serve para compartilhar código entre classes de maneira vertical, de cima para baixo.

USE(require/include)

Quando você usa uma classe que está em um arquivo dentro de outra classe em outro arquivo, você precisa usar um require ou include para o PHP saber quais arquivos ele deve ler, correto?

Imagina um sistema grande com dezenas de classes, uma em cada arquivo e imagina essas classes sendo usadas umas dentro da outra formando uma teia.

Então se dentro de Usuario.php eu usar um require para Posts.php e as duas têm um require para Banco.php ferrou vai dar erro porque Banco está sendo declarado duas vezes.

Você pode resolver isso com IFs, mas a partir desse e outros problemas de organização criou-se o use (e os Namespaces mas isso também fica pra outra hora).

Resumo use(junto com o autoload) serve como um require/include inteligente que facilita usar um código/classe dentro de outro arquivo

Link para o comentário
Compartilhar em outros sites

  • 0
3 horas atrás, Leonardo Persan disse:

Usar OO de forma realmente certa é difícil, é mais um exercício de pensar as responsabilidades do que realmente de código eu tento usar a técnica de pensar a classe como pessoas mesmo que têm cargos e responsabilidades limitadas rsrsrs

Isso mesmo

Eles fazem coisas bem diferentes, vamos passo a passo...

EXTENDS(Herança)
Com o encapsulamento do código em classes percebeu-se que assim como aconteciam com as funções tinham trechos de códigos que se repetiam em classes diferentes para resolver isso criou-se o conceito de herança, que é você pegar esse código repetido colocar em outra classe e definir ela como "pai" de outras classes. Nessa brincadeira surgiram as Interfaces, Abstracts e Traits, mas isso é história para outra hora rsrsrs

Ex.: As classes Gmail e Hotmail, fazem a mesma coisa, enviam e-mail, mas cada uma conecta de um jeito diferente em servidores diferentes.
Mas digamos que ela tenha que acessar algumas tabelas no seu banco de dados, para coletar dados do usuário. Essa parte da conexão será idêntica já que o banco é o mesmo. Então vamos criar uma classe Email que tenha esse código que é repetido, pra gente não ter retrabalho. Assim
class Email {...}
class Gmail extends Email {...}
class Hotmail extends Email {...}

Resumo extends serve para compartilhar código entre classes de maneira vertical, de cima para baixo.

USE(require/include)

Quando você usa uma classe que está em um arquivo dentro de outra classe em outro arquivo, você precisa usar um require ou include para o PHP saber quais arquivos ele deve ler, correto?

Imagina um sistema grande com dezenas de classes, uma em cada arquivo e imagina essas classes sendo usadas umas dentro da outra formando uma teia.

Então se dentro de Usuario.php eu usar um require para Posts.php e as duas têm um require para Banco.php ferrou vai dar erro porque Banco está sendo declarado duas vezes.

Você pode resolver isso com IFs, mas a partir desse e outros problemas de organização criou-se o use (e os Namespaces mas isso também fica pra outra hora).

Resumo use(junto com o autoload) serve como um require/include inteligente que facilita usar um código/classe dentro de outro arquivo

p****.... acho q entendi manooo!!!

pensando como pessoas, o extends seria mais ou menos assim

mariana precisa anotar em papeis os nomes, idade e cidade dos seus clientes
carlos precisa anotar em papeis, carros, marcas, velocidade e cor
julia precisa anotar em papeis quantas vezes o portao da empresa abriu

o extends seria "a ponte" entre essas pessoas e o joaozinho, que pergunta quantos papeis cada um vai precisar, depois pega os papeis preenchidos e guarda nas caixinhas de cada um.

 

já o use seria apenas para quando mariana precisa deixar um recado para o carlos pegar as laranjas da fruteira e colocar no carro

 

mas ou menos essa ideia?

Link para o comentário
Compartilhar em outros sites

  • 0
2 horas atrás, rxhxtx disse:

mariana precisa anotar em papeis os nomes, idade e cidade dos seus clientes
carlos precisa anotar em papeis, carros, marcas, velocidade e cor
julia precisa anotar em papeis quantas vezes o portao da empresa abriu

o extends seria "a ponte" entre essas pessoas e o joaozinho, que pergunta quantos papeis cada um vai precisar, depois pega os papeis preenchidos e guarda nas caixinhas de cada um.

Perfeito

2 horas atrás, rxhxtx disse:

já o use seria apenas para quando mariana precisa deixar um recado para o carlos pegar as laranjas da fruteira e colocar no carro

Na verdade não é no caso deles não estarem na mesma sala(arquivo) e você além de estender o Joãozinho (criando/ajudando) Carlos, Mariana e Júlia, você precisa dizer o endereço da sala(qual arquivo o PHP tem que ler para achar a classe Joãozinho) isso somado aos Namespaces permite ter vários Joãos em salas(pastas) separadas, com responsabilidades diferentes, sem conflito.

Ex.: DB\MySQL\Select e DB\Postgres\Select

Duas classes Select em pastas separadas com Namespaces diferentes.

Voltando ao Joãozinho, se estiverem todos na mesma sala(arquivo), ou se você faz o PHP visitar todas as salar(ler todos os arquivos de classes obrigatóriamente) não precisa de use

O USE reduz o tempo de resposta fazendo o PHP ler apenas uma vez e somente os arquivos necessários para aquela requisição. Se em uma requisição você só precisa verificar login e senha no Banco de Dados ele não vai perder tempo carregando a classe que gera PDFs ou conecta com e-mail...

Link para o comentário
Compartilhar em outros sites

  • 0
5 horas atrás, Leonardo Persan disse:

Perfeito

Na verdade não é no caso deles não estarem na mesma sala(arquivo) e você além de estender o Joãozinho (criando/ajudando) Carlos, Mariana e Júlia, você precisa dizer o endereço da sala(qual arquivo o PHP tem que ler para achar a classe Joãozinho) isso somado aos Namespaces permite ter vários Joãos em salas(pastas) separadas, com responsabilidades diferentes, sem conflito.

Ex.: DB\MySQL\Select e DB\Postgres\Select

Duas classes Select em pastas separadas com Namespaces diferentes.

Voltando ao Joãozinho, se estiverem todos na mesma sala(arquivo), ou se você faz o PHP visitar todas as salar(ler todos os arquivos de classes obrigatóriamente) não precisa de use

O USE reduz o tempo de resposta fazendo o PHP ler apenas uma vez e somente os arquivos necessários para aquela requisição. Se em uma requisição você só precisa verificar login e senha no Banco de Dados ele não vai perder tempo carregando a classe que gera PDFs ou conecta com e-mail...

massaaaaaa..... entendi!!!!

 

agora entendo porque usam tanto metaforas na vida.... rsrsrsrs

valeu amigo, me esclareceu um tema que não estva fazendo sentido na minha cabeça ate agora. 

Agora já consigo me localizar bem melhor nos meus estudo sobre isso!

obrigado!!

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,7k
×
×
  • Criar Novo...