Usando o método da tentativa e erro, estou mudando o meu projeto PHP para o projeto Classe.
No antigo projeto, eu tinha os arquivos login.php, alterarSenha.php, sair.php. Estudando as classes, consegui diminuir o serviço para dois arquivos: o login.php e loginView.php, assim:
arquivo config.php
<?php
session_start();
date_default_timezone_set('America/Sao_Paulo');
$baseDir = $_SERVER['SERVER_NAME']==='frank.com'?
$_SERVER['DOCUMENT_ROOT']: $_SERVER['DOCUMENT_ROOT'].'/Frank/';defined('HOST')|| define('HOST','localhost');defined('DBNAME')|| define('DBNAME', $baseDir === $_SERVER['DOCUMENT_ROOT']?'Diario':'diario');defined('USER')|| define('USER', $baseDir === $_SERVER['DOCUMENT_ROOT']?'Root':'root');defined('PASSWORD')|| define('PASSWORD', $baseDir === $_SERVER['DOCUMENT_ROOT']?'1234':'');defined('lctoBaixaEstoque')|| define('lctoBaixaEstoque',12234);defined('lctoAcertoMais')|| define('lctoAcertoMais',12235);defined('lctoAcertoMenos')|| define('lctoAcertoMenos',12531);defined('diaAcerto')|| define('diaAcerto','2024-06-30');
spl_autoload_register(fn ($class)=>require str_replace('\\', DIRECTORY_SEPARATOR, $class).'.php');classConexao{privatestatic $pdo;publicstaticfunction instancia(){if(!self::$pdo){self::$pdo=new PDO("mysql:host=".HOST.";dbname=".DBNAME,USER,PASSWORD);}returnself::$pdo;}functiondelete($sql){return $this->instancia()->query("delete from $sql");}functionexec($sql){return $this->instancia()->query($sql);}publicfunction insert($sql){return $this->instancia()->query("insert into $sql");}functionselect($sql){
$stmt=$this->instancia()->query("select $sql");return $stmt->fetchAll(PDO::FETCH_OBJ);}function update($sql){return $this->instancia()->query("update $sql");}}function apuracao($dia){
$ano=date('Y',strtotime($dia));
$mes=date('m',strtotime($dia));
$mesVetor=['Janeiro','Fevereiro','Março','Abril','Maio','Junho','Julho','Agosto','Setembro','Outubro','Novembro','Dezembro'];
$apuracao=$mesVetor[$mes-1]." de $ano";
$primeiroDia="$ano-$mes-01";
$ultimoDia=date('Y-m-t',strtotime($primeiroDia));return json_decode(json_encode(['apuracao'=>$apuracao,'primeiroDia'=>$primeiroDia,'ultimoDia'=>$ultimoDia]));}function aspas($bling){
$primeiroCaractere=$bling[0];
$ultimoCaractere=$bling[-1];if($primeiroCaractere==='"'&& $ultimoCaractere==='"'){
$bling=substr($bling,1,-1);return str_replace('""','"',$bling);}}function dec($value){return($value)? number_format($value,2,',','.'):null;}function deca($num){
$value=str_replace(".","",$num);return str_replace(",",".",$value);}function decv($num){return str_replace(".",",",$num);}function fmt($date){return date('d/m/y',strtotime($date));}function fmt2($data){return date('m/Y',strtotime($data));}function fmt3($data){return date('d/m',strtotime($data));}function pvenda($custo,$margem){
$calculo=intval($custo*(1+$margem/100)*100)/100;
$fracao=$calculo-intval($calculo);if($fracao <0.09){
$pvenda=intval($calculo);}else{if($fracao <=0.59){
$pvenda=intval($calculo)+0.5;}else{
$pvenda=intval($calculo)+1;}}return dec($pvenda);}function view($arquivo, $array =null){if(!is_null($array)){foreach($array as $var => $value){
${$var}= $value;}}
ob_start();
include $arquivo .".php";
ob_flush();}?><!DOCTYPE html><htmllang="en"><linkhref="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css"rel="stylesheet"><scriptsrc="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js"></script><metacharset="utf-8"><metaname="viewport"content="width=device-width, initial-scale=1"><title>Projeto PHP</title><style>@media(min-width:768px){ main, header {width:25%;margin: auto}}@media(max-width:767px){ main, header {width:75%;margin: auto}}
a {color:blue;text-decoration:none}a:hover {color:black;}
form {margin:0}.linha {line-height:0px}
summary{list-style:none}
td {white-space: nowrap}</style><bodyclass="bg-body-tertiary">
arquivo index.php
<?php
ini_set('display_errors',1);require'config.php';
$rota='Login_login';if($_GET){if(strpos(key($_GET),"_")==0){exit;}
$rota=isset($_GET)? key($_GET): $rota;}
$segmentos=explode('_',$rota);
$nomeControle=$segmentos[0]??'Login';
$metodo=$segmentos[1]??'login';
$parametro=$segmentos[2]??null;
$controle=new $nomeControle();
$controle->$metodo($parametro);
arquivo login.php
<?php
classLogin{publicfunction alterarSenha(){return view('loginView',['mensagem'=>null,'titulo'=>'Alterar senha']);}publicfunction login(){if(!isset($_SESSION['nome'])){return view('loginView',['mensagem'=>null,'titulo'=>'Projeto Classe']);}else{return view('menuView');}}publicfunction sair(){
session_destroy();return view('loginView',['mensagem'=>null,'titulo'=>'Projeto Classe']);}publicfunction senhaAlterada(){
$senhaAlterada=$_POST['senhaAlterada'];
$hash=password_hash($senhaAlterada,PASSWORD_BCRYPT,['cost'=>12]);
$id=$_SESSION['id'];(newConexao)->update("tbusuarios set senha='$hash' where id=$id");return view('loginView',['mensagem'=>null,'titulo'=>'Projeto Classe']);}publicfunction verificar(){
$email=$_POST['email'];
$senha=$_POST['senha'];
$usuario=(newConexao)->select("* from tbusuarios where email='$email'");if(!$usuario){return view('loginView',['mensagem'=>'Email inválido!','titulo'=>'Projeto Classe']);}
$confirmar=$usuario[0]->senha;
$validaSenha=password_verify($senha,$confirmar);if(!$validaSenha){return view('loginView',['mensagem'=>'Senha inválida!','titulo'=>'Projeto Classe']);}
$_SESSION['id']=$usuario[0]->id;
$_SESSION['nome']=$usuario[0]->nome;return view('menuView');}}
arquivo loginView.php
<div style="height:150px"></div><!--empurrar o form para o meio da tela--><main><?php if($mensagem):?><divclass="alert alert-success"><?=$mensagem?></div><?php
endif;
$action=($titulo=="Alterar senha")?"?Login.senhaAlterada":"?Login.verificar";?>
<form method=post action=<?=$action?>>
<h1class="h3 mb-3 fw-normal"><?=$titulo?></h1><divclass="form-floating"><inputtype="email"class="form-control"name=emailautofocus><label>Email</label></div><divclass="my-1"></div><divclass="form-floating"><?php $chave=($titulo=="Alterar senha")?"senhaAlterada":"senha";?>
<input type="password" class="form-control"
name=<?=$chave?> required ondblclick="this.type='text'">
<label>Duplo clique para ver a Senha</label><!--Google Chrome não mostra o olho--></div><divclass="my-3"></div><buttonclass="w-100 btn btn-lg btn-primary"type="submit">Entrar</button></form></main>
arquivo menuView.php
<headerclass="navbar navbar-light sticky-top bg-light flex-md-nowrap p-0">
Classe
<divclass=dropdown><buttontype=buttonclass="btn btn-outline-primary dropdown-toggle"data-bs-toggle=dropdownid=btmenu>
Menu
</button><ulclass="dropdown-menu"><?php if($_SESSION['id']==1):?><li><aclass=dropdown-itemhref=?Diario.inicio>Diário</a></li><li><aclass=dropdown-itemhref=?Balancete.inicio>Balancete</a></li><li><aclass=dropdown-itemhref=?Pagar.inicio>Pagar</a></li><li><aclass=dropdown-itemhref=?Outros.inicio>Outros</a></li><?php endif;?><li><aclass=dropdown-itemhref=?Orcamento.inicio>Orçamento</a></li><li><aclass=dropdown-itemhref=?Pessoa.inicio>Pessoa</a></li><li><aclass=dropdown-itemhref=?Produto.inicio>Produto</a></li><li><aclass=dropdown-itemhref=?Venda.inicio>Relatório de Venda</a></li><li><aclass=dropdown-itemhref=?MercadoPago.inicio>Mercado Pago</a></li></ul></div><divclass="dropdown"><buttonclass="btn btn-outline-primary dropdown-toggle"type="button"data-bs-toggle="dropdown"aria-expanded="false"><?=$_SESSION['nome']?></button><ulclass="dropdown-menu"><li><aclass=dropdown-itemhref=?Login.sair>Sair</a></li><li><aclass=dropdown-itemhref=?Login.alterarSenha>Alterar senha</a></li></ul></div></header>
Pergunta
Frank K Hosaka
Usando o método da tentativa e erro, estou mudando o meu projeto PHP para o projeto Classe.
No antigo projeto, eu tinha os arquivos login.php, alterarSenha.php, sair.php. Estudando as classes, consegui diminuir o serviço para dois arquivos: o login.php e loginView.php, assim:
Link para o comentário
Compartilhar em outros sites
0 respostass a esta questão
Posts Recomendados
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.