Jump to content
Vinicius Cainelli

Compartilhar variáveis entre dois métodos

Recommended Posts

Basicamente, o que eu tenho em uma classe são dois métodos.

- getEstablishment($establishmentId) que pega todos os dados de um determinado estabelecimento baseado no id passado.
- getAllEstablishments() que me da um array com todos os dados de todos os estabelecimentos que tenho no meu banco

Se repararem no código, vão ver que repete muitas variaveis, existe alguma forma de eu compartilha-lhas entre esses métodos?

 


  function getEstablishment($establishmentId)
  {
    $query = "SELECT *
      FROM establishment
      WHERE establishment_id='{$establishmentId}'
      LIMIT 0,1";
    $result = mysqli_query($this->connection, $query);
    $establishmentArray = mysqli_fetch_assoc($result);

    $docNumber = $establishmentArray['doc_number'];
    $legalName = $establishmentArray['legal_name'];
    $socialName = $establishmentArray['social_name'];
    $type = $establishmentArray['type_id'];
    $email = $establishmentArray['email'];
    $website = $establishmentArray['website'];
    $plan = $establishmentArray['plan_id'];
    $agreeTerm = $establishmentArray['agree_term'];
    $address = $establishmentArray['address'];
    $district = $establishmentArray['district'];
    $city = $establishmentArray['city_id'];
    $zipCode = $establishmentArray['postal_code'];
    $phone = $establishmentArray['phone'];
    $created = $establishmentArray['created'];
    $lastUpdate = $establishmentArray['last_update'];

    $establishment = new Establishment($docNumber, $legalName, $socialName, $type, $email, $website, $plan, $agreeTerm, $address, $district, $city, $zipCode, $phone, $created, $lastUpdate);

    return $establishment;
  }

  function getAllEstablishments()
  {
    $establishments = array();
    $query = "SELECT *
      FROM establishment
      ORDER BY establishment_id DESC";

    $result = mysqli_query($this->connection, $query);

    while ($establishmentArray = mysqli_fetch_assoc($result)) {

      $establishmentId = $establishmentArray['establishment_id'];
      $docNumber = $establishmentArray['doc_number'];
      $legalName = $establishmentArray['legal_name'];
      $socialName = $establishmentArray['social_name'];
      $type = $establishmentArray['type_id'];
      $email = $establishmentArray['email'];
      $website = $establishmentArray['website'];
      $plan = $establishmentArray['plan_id'];
      $agreeTerm = $establishmentArray['agree_term'];
      $address = $establishmentArray['address'];
      $district = $establishmentArray['district'];
      $city = $establishmentArray['city_id'];
      $zipCode = $establishmentArray['postal_code'];
      $phone = $establishmentArray['phone'];
      $created = $establishmentArray['created'];
      $lastUpdate = $establishmentArray['last_update'];

      $establishment = new Establishment($docNumber, $legalName, $socialName, $type, $email, $website, $plan, $agreeTerm, $address, $district, $city, $zipCode, $phone, $created, $lastUpdate);
      $establishment->setId($establishmentId);

      array_push($establishments, $establishment);
    }
    return $establishments;
  }

 

Share this post


Link to post
Share on other sites

Em vez de variável usa propriedade...

  • +1 1

Share this post


Link to post
Share on other sites

Se um trecho de código se repete, isole-o em um método:

function getEstablishment($establishmentId)
{
    $query = "SELECT *
    FROM establishment
    WHERE establishment_id='{$establishmentId}'
    LIMIT 0,1";
    $result = mysqli_query($this->connection, $query);        
    return $this->createObject(mysqli_fetch_assoc($result));
}

function getAllEstablishments()
{
    $establishments = array();
    $query = "SELECT *
    FROM establishment
    ORDER BY establishment_id DESC";

    $result = mysqli_query($this->connection, $query);

    while ($establishmentArray = mysqli_fetch_assoc($result)) {
        $establishments[] = $this->createObject($establishmentArray);
    }
    
    return $establishments;
}

private function createObject(array $rawEstablishment)
{
    $docNumber = $rawEstablishment['doc_number'];
    $legalName = $rawEstablishment['legal_name'];
    $socialName = $rawEstablishment['social_name'];
    $type = $rawEstablishment['type_id'];
    $email = $rawEstablishment['email'];
    $website = $rawEstablishment['website'];
    $plan = $rawEstablishment['plan_id'];
    $agreeTerm = $rawEstablishment['agree_term'];
    $address = $rawEstablishment['address'];
    $district = $rawEstablishment['district'];
    $city = $rawEstablishment['city_id'];
    $zipCode = $rawEstablishment['postal_code'];
    $phone = $rawEstablishment['phone'];
    $created = $rawEstablishment['created'];
    $lastUpdate = $rawEstablishment['last_update'];

    $establishment = new Establishment($docNumber, $legalName, $socialName, $type, $email, $website, $plan, $agreeTerm, $address, $district, $city, $zipCode, $phone, $created, $lastUpdate);
    $establishment->setId($rawEstablishment['establishment_id']);

    return $establishment;
}

 

Outra coisa que pode realizar é criar um método instrospect. Ou seja, deixar a responsabilidade para o próprio objeto Establishment:

class Establishment
{
    public function instrospect(array $raw)
    {
        $this->id = $raw['establishment_id']);
        $this->docNumber = $raw['doc_number'];
        $this->legalName = $raw['legal_name'];
        
        /** e demais inclusões **/
    }
}

Seus métodos, assim, serão simplificados:

function getEstablishment($establishmentId)
{
    $query = "SELECT *
    FROM establishment
    WHERE establishment_id='{$establishmentId}'
    LIMIT 0,1";

    $result = mysqli_query($this->connection, $query);

	$establishment = new Establishment();
    $establishment->instrospect(mysqli_fetch_assoc($result));

    return $establishment;
}

function getAllEstablishments()
{
    $establishments = array();
    $query = "SELECT *
    FROM establishment
    ORDER BY establishment_id DESC";

    $result = mysqli_query($this->connection, $query);

    while ($establishmentArray = mysqli_fetch_assoc($result)) {
        $establishment = new Establishment();
        $establishment->instrospect($establishmentArray);

        $establishments[] = $establishment;
    }
    
    return $establishments;
}

 

A propósito, sobre array_push:

Note: If you use array_push() to add one element to the array it's better to use $array[] = because in that way there is no overhead of calling a function.

Logo, substituí o seu array_push por:

$establishments[] = $this->createObject($establishmentArray);

 

  • +1 1

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By tii3030
      Olá, gostaria de saber qual a melhor maneira de selecionar e verificar a senha hash(senha) em um banco de dados e comparar com a senha inserida pelo usuário em um formulário de login. É mais adequado armazenar no BD o salt ? No exemplo abaixo eu criei o hash da senha antes de selecionar no banco:
      <?php include('conf.php'); $email = 'lala@123.com'; $senha = 'lala.123'; $custo = '08'; $salt = 'Cf1f11ePArKlBJomM0F6aJ'; $hash = crypt($senha, '$2a$' . $custo . '$' . $salt . '$'); $query_select = "SELECT email, password FROM usuarios WHERE email = '$email' AND password = '$hash'"; $select = mysqli_query($conexao,$query_select); if (mysqli_num_rows($select) == 1) { echo "Login Permitido"; } else { echo "Login ou senha invalidos"; } ?> Já neste exemplo eu selecionei o hash no banco para depois comparar com a senha inserida no formulário utilizando o password_verify():
      <?php #----------------- INCLUDING FILE --> "conf.php" include('conf.php'); if (isset($_POST['submit'])) { $email = mysqli_real_escape_string($conexao, $_POST['email']); $password = mysqli_real_escape_string($conexao, $_POST['password']); $query_select_email = "SELECT email FROM usuarios WHERE email = '$email'"; $select_email = mysqli_query($conexao,$query_select_email); $query_select_password = "SELECT password FROM usuarios"; $select_password = mysqli_query($conexao,$query_select_password); while($array = mysqli_fetch_array($select_password)) { $logarray = $array['password']; if (password_verify($password, $logarray) && mysqli_num_rows($select_email) == 1) { echo "Login permitido"; } } } ?> Aceito qualquer dica relacionado a segurança e para melhorar o código, desde já agradeço.
    • By tii3030
      Olá pessoal, desenvolvi um pequeno código em PHP com a função de verificar e validar usuário e senha de um formulário, juntamente com o meu banco de dados MySql.
      Gostaria de saber como aprimorar o meu código para torna-lo mais seguro e mais próximo de algo "profissional". Lembrando que minha senha no banco está criptografada (PASSWORD_BCRYPT).
       
      <?php
          #----------------- INCLUDING FILE --> "conf.php"
          include('conf.php');
              if (isset($_POST['submit'])) {
             
      #--------------------------------INPUTS ---------------------------------------------#
                  $email = mysqli_real_escape_string($conexao, $_POST['email']);
                  $password = mysqli_real_escape_string($conexao, $_POST['password']);
      #-----------------------#----------------------#-----------------_#-------------------#
                  $query_select_email = "SELECT email FROM usuarios WHERE email = '$email'";
                  $select_email = mysqli_query($conexao,$query_select_email);
                  $query_select_password = "SELECT password FROM usuarios";
                  $select_password = mysqli_query($conexao,$query_select_password);
                  while($array = mysqli_fetch_array($select_password)) {
                  $logarray = $array['password'];
                  
                      if (password_verify($password, $logarray)) {
                          if (mysqli_num_rows($select_email) == 1) {
                              
                          $_SESSION['email'] = $email;
                          header('location: XXX.html');
                          exit();
                          }
                      }
                      else {
                          echo "Loguin ou senha incorretos";
                      }
                  $logarray = '0';
                  }
              }
      ?>
    • By michelmir
      Olá!
       
      Recentemente fiz uma postagem aqui no fórum a respeito de se carregar valores em um input text baseando-se na opção selecionada em uma select box, onde obtive uma solução. Por conta disso resolvi adicionar um complemento neste  meu código onde o mesmo deve carregar valores corretamente dentro de uma input text utilizando o plugin TypeAhead.js e o evento onchange do Jquery.
       
      Como forma de demonstrar a minha dúvida em funcionamento, criei uma página como forma de testar a solução. O que ocorre é que quando seleciona uma opção no select box  "Categorias", o Ajax manda um request para o php script onde o mesmo retorna os valores corretamente em JSON conforme a imagem do console do navegador Chrome abaixo:
       
       
       
      Até aqui os valores relacionados com a opção selecionada no select box "Categorias" são carregados corretamente porém se eu não atualizar a página "F5" e ao mesmo tempo eu selecionar alguma outra opção dentro do select box, o input text carrega além dos valores relacionados, todos os valores não relacionados com a opção selecionada ou seja, o input text somente carrega os valores corretamente se eu atualizar a página em questão.
       
      Abaixo uma imagem demonstrando os valores carregados em uma input text quando seleciono uma outra opçao no select box quando não se atualiza a página. Todos os valores não relacionados também são carregados:
       

       
      Abaixo publico o html e os scripts Ajax, Typeahead e PHP que estou utilizando neste projeto:
       
      HTML
      <!DOCTYPE html> <html lang="en"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <meta charset="utf-8"> <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css"> <!-- jQuery library --> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script> <!-- jQuery UI library --> <link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/themes/smoothness/jquery-ui.css"> <script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js"></script> <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-3-typeahead/4.0.2/bootstrap3-typeahead.min.js"></script> </head> <body> <div class="container"> <br> <h1>DYNAMIC TWITTER TYPEAHEAD</h1> <br> <div class="row"> <?php // Include the database config file include_once 'dbConfig.php'; // Fetch all the country data $query = "SELECT * FROM categorias ORDER BY categoria ASC"; $result = $db->query($query); ?> <!-- categoria dropdown --> <div class="col-md-4"> <select id="categoriaFK" name="categoriaFK" class="form-control"> <option value="">seleciona categoria</option> <?php if($result->num_rows > 0){ while($row = $result->fetch_assoc()){ echo '<option value="'.$row['categoriaID'].'">'.$row['categoria'].'</option>'; } }else{ echo '<option value="">Categoria não encontrada</option>'; } ?> </select> </div> <div class="col-md-4" id="prod"> <div ><input type="text" name="produtos" id="produtos" class="form-control input-lg typeahead" autocomplete="off" placeholder="" /></div> </div> <div class="col-md-4"> <div id="imagem" name="imagem"></div> </div> </div> </div> </body> </html>  
      No script abaixo, o Ajax envia um request para o script PHP que por sua vez retorna os valores em JSON para o Ajax que envia para o TypeAhead e carrega o input text com valores relacionados. Após selecionar uma opção no input text, o Jquery envia um valor relacionado para a div "#imagem" :
       
      $(document).ready(function(){ var produtos; var nomes = []; // array var lista = {}; // objeto $('#categoriaFK').on('change', function(){ var queryID = $(this).val(); $.ajax({ url:"fetch.php", method:"POST", data:{categoria:queryID}, dataType:"json", success:function(data){ console.log(data); $.each(data, function(i, optionHtml){ $('#produtos').append(optionHtml); }); $("#imagem").empty(''); $(".typeahead").val(''); produtos = data; } }); $('.typeahead').typeahead({ source: function(query, result) { $.each(produtos, function(idx, item){ if(!~nomes.indexOf(item.nomeProduto)) nomes.push(item.nomeProduto); lista[item.nomeProduto] = item.imagem; }); return result(nomes); }, afterSelect: function (data) { var img = lista[data]; $('#imagem').html(img); }, }); }); });  
      Abaixo, o php script que seleciona os valores baseando-se no valor selecionado do select box e os envia em formato JSON para o Ajax:
       
      <?php require_once 'dbConfig.php'; if(!empty($_POST["categoria"])){ $query = " SELECT * FROM produtos WHERE categoriaFK = ".$_POST['categoria']." "; $result = $db->query($query); $data = array (); if ( $result->num_rows > 0 ) { while($row = $result->fetch_assoc ()) { $data[] = $row; } header("Content-type: application/json; charset=utf-8 cache-control: no-cache, no-store, must-revalidate"); echo json_encode($data); exit(); } } ?> No caso como mencionado acima, nesta página que criei demonstra o funcionamento de todo o código acima, porém acredito que devo modificar o script para que o mesmo carregue valores corretamente quando seleciono alguma opção no select box "Categorias" sem precisar atualizar a página para que o mesmo carregue corretamente. 
       
      Como posso proceder? Desde já agradeço a atenção de todos.
    • By noxer
      Boa tarde, Preciso atribuir o valor de uma textarea para uma var e a exibir em um p. Fiz bem simples usando js/jquery mas agora preciso fazer em php.
       
      Ja tentei $variavel = $_POST['nomedocampo']; mas não obtive resultado
       
       
      Segue o trecho em js
      <textarea class="wapf-input" ></textarea> <button class="sendPDF">PDF</button> <p class="geratedPDF"></p>  
      $('.sendPDF').on('click', toPDF) function toPDF() { var textareaValue = $('.wapf-input').val() $('.geratedPDF').text(textareaValue) }
    • By Deivid Santos
      Salve galera, estou quebrando a cabeça aqui, já pesquisei mas não achei nada sobre.
      Eu tenho alguns dados que busco no banco de dados e mostro em um datagrid, além do CRUD que implantei eu preciso ter a opção de mudar as posições no banco. Preciso fazer isso pois elas são informações que vão para um telão. e ele segue uma ordem na mostragem dos dados.
      Teria alguma forma de arrastar a linha do grid e assim ele mudar o ID do mesmo conforme a posição que ficaria e assim os outros também seriam atualizados?
      Como exemplo segue uma imagem de como ele funciona. por exemplo eu movimento o ID 1 na posição abaixo do ID 3, assim o ID 2 e 3 se tornariam 1 e 2 com essa movimentação e o que era 1 se torna 3.

       
      Agradeço qualquer ajuda que puder.
       
       
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.