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 Mucio Willamys
      olá, gostaria da ajuda de vcs :
      este código traz as informações do banco de dados e as coloca dentro de um select html
      é parte de um projeto de um sistema de uma clínica médica, onde ao cadastrar os médicos posso escolher a especialidade do mesmo.
      <select name="especialidade" required="">                 <option value="" >--Escolha uma especialidade--</option>          <?php              $result_especialidade = "select * from especialidade";              $result_especialidade = mysqli_query($bd, $result_especialidade);              while ($row_especialidade = mysqli_fetch_assoc($result_especialidade)){ ?>                    <option value="<?php echo $row_especialidade['id']; ?>"><?php echo  $row_especialidade['nome']; ?> </option> public function editar($id){ include "Bd.class.php"; $nome = $this->nome; $cpf = $this->cpf; $crm = $this->crm; $especialidade = $this->especialidade; $query = "update medico set nome = '$nome', cpf = '$cpf', crm = '$crm', especialidade_id = '$especialidade' where id = $id"; $status = $bd->query($query); return $status; } Acima ^ está a função editar...
       
       
       
      abaixo está o form com as informações do médico.
      <form method="POST" action="../controller/Controller-medico.php?op=e"> <input type="hidden" name="id" size="5" value="<?php echo $id; ?>" > <div class="campo"> <label for="nome">Nome: </label> <input type="nome" name="nome" size="30" value="<?php echo $m->getNome() ?>"> </div> <div class="campo"> <label for="cpf">CPF: </label> <input type="text" name="cpf" size="30" value="<?php echo $m->getCpf() ?>"> </div> <div class="campo"> <label for="rg">CRM: </label> <input type="text" name="crm" size="30" value="<?php echo $m->getCrm() ?>"> </div> <div class="campo"> <label for="especialidade"> Especialidade: </label> </div> <div class="campo"> <input type="submit" value="Atualizar"> </div> </form> Gostaria de saber como faço pra setar um input ou um select no caso para a alteração do dado(especialidade)?
    • By Filipe556
      alguém tem ideia de algum método de bloquear usuário por ip
    • By vini_seven
      Segue aqui meu código abaixo, o que ocorre é o seguinte, quando o usuário logar ele vai para a página de chat, quando ele vai para essa página é feito um update no banco de dados para status = 1 esse status igual a 1 é a minha condição para exibição na página usuários para então que o técnico da T.I escolha quem atender, todas que estão com status = 1 vão estar visíveis lá. Porém ao usuário clicar no botão sair na página de chat, quero que faça o update no banco de dados com status = 0 novamente, para então na página de usuários a ser atendido ele vai sair, vou colocar um refresh a cada 60s nessa página para ela atualizá-la. ----CÓDIGO DO TRECHO DA PÁGINA CHAT ONDE TEM O BOTÃO SAIR---
      <> <body> <div class="contact1"> <div class="fundo_chat"> <div class="janela_chat"> </div> <form action="chat.php" method="post" class="form-chat"> <input type="text" name="mensagem" id="mensagem" placeholder="Mensagem"> <tr> <button class="btn btn-primary" type="submit" id="botao-enviar">Enviar</button> <a class="btn btn-primary" href="logout.php" role="button" id="botao-sair">Sair</a> </form> </div> </div> </body> </html> <> --CÓDIGO ONDE É FEITO A VALIDAÇÃO DE LOGIN, REDIRECIONA PARA A PÁGINA DE USUÁRIOS QUEM É DA T.I, OS RESTANTES DE OUTROS SETORES VÃO DIRETO PARA A CHAT ONDE AGUARDA ATENDIMENTO E AO SER REDIRECIONADO MUDA STATUS PARA =1, ESTÁ MUDANDO PARA 1 PERFEITAMENTE.-- <> <?php session_start(); header('Content-Type: text/html; charset=utf-8'); include("conexao.php"); if(empty($_POST['nome']) || empty($_POST['senha'])){ header('location:index.html'); exit(); } $nome = mysqli_real_escape_string($conn, $_POST['nome']); $senha = mysqli_real_escape_string($conn, $_POST['senha']); $query = "select * from usuarios where nome = '$nome' and senha = '$senha'"; $setor = "SELECT setor FROM usuarios"; $result = mysqli_query($conn, $query); $row = mysqli_num_rows($result); if($row == 1){ $_SESSION['nome'] = $nome && $_SESSION['senha'] = $senha; while ($verifica_setor = mysqli_fetch_array($result)) { $setor = $verifica_setor['setor']; if ($setor == "Tecnologia da Informação") { header('location: usuarios.php'); }else{ mysqli_query($conn, "UPDATE usuarios set status = '1' WHERE nome = '$nome'"); header('location: chat.php'); } } } else { echo "<script>alert('USUÁRIO NÃO CADASTRADO OU DADOS INVÁLIDOS!');</script>"; echo "<script>window.location='index.html';</script>"; exit(); } ?> <> --AQUI É O MEU LOGOUT, ONDE EU INICIO A PARAMETRO SESSION PARA PEGAR O VALOR GLOBAL DELA QUE TINHA QUE SER O NOME PARA BUSCAR NA TABELA, FIZ UM OR DIE PARA TESTAR O QUERY E UM ECHO PARA VER O QUE ESTAVA SENDO EXIBIDO, E O QUE EXIBE NO ECHO É O VALOR = 1, POR ISSO A QUERY NAO FUNCIONA DO JEITO CERTO-- <> <?php include("conexao.php"); session_start(); echo $_SESSION['nome']; mysqli_query($conn, "UPDATE usuarios SET status = '0' WHERE nome = '$nome'") or die ("PARAMETROS NAO ALTERADO"); /* session_destroy(); header('location:index.html'); exit();*/ ?> <>  
    • By Sapinn
      Salve! Estou desenvolvendo um sistema de mensagens para o meu site no qual o ADM envia a mensagem para todos os usuarios ou ele pode digitar o email de um usuaio e será enviado apenas para este usuario especifico, além disso, o usuario recebe um tipo de notificação que informa que tem uma nova mensagem. O problema está sendo justamente nesta segunda parte não consigo pensar em uma logica para que a mensagem destinada a apenas um usuario so seja notificado ele.
      Alguém pode me ajudar
      vejam meu codigo
       
      <?php //conexao com o banco de dados include '../php/conexao.php'; //pega a tabela mensagem $query = mysql_query("select * from mensagem")or die(mysql_error //ver todos os dados que tem nela while($mensagem = mysql_fetch_assoc($query)){ //verifica na tabela ler se o codigo do aluno é igual ao codigo do usuario logado se tem alguma mensagem na tabela e se o email do destinatario é igual //ao do usuario logado $ver = mysql_query("SELECT * FROM ler where codigo_aluno='".$row['id']."' and codigo_mensagem= '".$mensagem['id']."' and destinatario ='".$row['email']."'")or die(mysql_error); } //se for igual ao 0 ou seja não tiver tudo ok significa que ele não leu a mensagem então mostra a notificação if(mysql_num_rows($ver) == 0){ ?> <span class="app-menu__label">Mensagens</span> <i><img src="../img/icone/menu/sino_mensagem.png" width="26px" height="26px"></i></a> </li> <?php //se não ele não mostro porque ela já foi lida }else{ ?> <span class="app-menu__label">Menssagem</span></a> </li> <?php } ?> Preciso de ajuda acho que o erro é na minha logica 
    • By Kyrstannie
      Olá comunidade!
       
      Estou com um problema que não consigo resolver. Tenho um script para enviar e-mails e está tudo funcionando corretamente, exceto um pormenor. Toda mensagem recebida no Outlook contém caracteres estranhos (no Gmail não há problemas).
       
      No Outlook o assunto é exibido assim:
      Formulário do Site (em vez de Formulário do Site).
       
      E o corpo da mensagem:
      Nome: João (em vez de João)
      Mensagem: olá! (em vez de olá!)
       
      Pesquisei e tentei durante horas resolver, mas não sei mais o que estou fazendo. A sugestão mais frequente que encontro é para usar a classe PHPMailer para resolver estas questões. Experimentei usar a classe, mas o problema mantém-se. Alguém sabe como posso resolver isto?
       
      Deixo abaixo o código que estou usando:
       
      <?php ////////////////////////// //Specify default values// ////////////////////////// //Your E-mail $your_email = 'kyrstie@outlook.com'; //Default Subject if 'subject' field does not exist $default_subject = 'Formulário do Site'; //Message if 'name' field not specified $name_not_specified = 'Por favor digite um nome válido'; //Message if 'message' field not specified $message_not_specified = 'Por favor digite uma mensagem válida'; //Message if e-mail sent successfully $email_was_sent = 'Sua mesagem foi enviada!'; //Message if e-mail not sent (server not configured) $server_not_configured = 'Sorry, mail server not configured'; /////////////////////////// //Contact Form Processing// /////////////////////////// $errors = array(); $response = array('error' => '', 'success' => ''); $params = array(); parse_str($_POST['data'], $params); header('Content-type: application/json charset=iso-8859-1'); if(isset($params['message']) and isset($params['username'])) { if(!empty($params['username'])) $sender_name = stripslashes(strip_tags(trim($params['username']))); if(!empty($params['message'])) $message = stripslashes(strip_tags(trim($params['message']))); if(!empty($params['email'])) $sender_email = stripslashes(strip_tags(trim($params['email']))); if(!empty($params['subject'])) $subject = stripslashes(strip_tags(trim($params['subject']))); //Message if no sender name was specified if(empty($sender_name)) { $errors[] = $name_not_specified; } //Message if no message was specified if(empty($message)) { $errors[] = $message_not_specified; } $from = (!empty($sender_email)) ? 'From: '.$sender_email : ''; $subject = (!empty($subject)) ? $subject : $default_subject; //$message = (!empty($message)) ? wordwrap($message, 70) : ''; $message = " Nome: $sender_name E-mail: $sender_email Mensagem: $message "; //sending message if no errors if(empty($errors)) { if (mail($your_email, $subject, $message, $from)) { $response['success'] = $email_was_sent; } else { $errors[] = $server_not_configured; $response['error'] = implode('<br>', $errors ); } } else { $response['error'] = implode('<br>', $errors ); } } else { // if "name" or "message" vars not send ('name' attribute of contact form input fields was changed) $response['error'] = '"name" and "message" variables were not received by server. Please check "name" attributes for your input fields'; } echo json_encode( $response ); ?>  
×

Important Information

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