Jump to content
Fórum Script Brasil
  • 0

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


Question

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....

Edited by rxhxtx
Link to post
Share on other sites

9 answers to this question

Recommended Posts

  • 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 to post
Share on other 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 to post
Share on other 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???

Edited by rxhxtx
Link to post
Share on other 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 to post
Share on other 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 to post
Share on other 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 to post
Share on other 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 to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      148714
    • Total Posts
      644524
×
×
  • Create New...