A última vez que eu vi a classe bd, ele estava ocupando quase 300 linhas, é muita coisa, não vale a pena tentar imitar o Laravel, mas eu aprendi muita coisa, e assim montei uma classe bd com poucos métodos, que não precisa mexer toda vez que aparece uma tarefa nova:
arquivo .htaccess
RewriteEngine On
# Redirecionar tudo para index.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php [QSA,L]
arquivo index.php
<?php
require('config.php');
$requestUri = $_SERVER['REQUEST_URI'];
$path = substr($requestUri, strlen($basePath));if($path ==""){
$path ="loginLogin";}if(!strpos($path,'(')){
$path .='()';}if(preg_match('/^([a-z]+)([A-Z][a-zA-Z]*)\((.*)\)$/', $path, $matches)){
$classe = $matches[1];
$metodo = $matches[2];
$argumentos = explode(',', $matches[3]);
$argumentos = array_map('urldecode', $argumentos);if(!empty($argumentos[0])&&!empty($argumentos)){
$classe::$metodo(...$argumentos);}else{
$classe::$metodo();}}else{
echo "Formato de URL inválido.";}?>
arquivo config.php
<?php
session_start();
error_reporting(E_ALL);
ini_set('display_errors',1);
date_default_timezone_set('America/Sao_Paulo');
$baseDir = $_SERVER['SERVER_NAME']==='frank.com'?
$_SERVER['DOCUMENT_ROOT']: $_SERVER['DOCUMENT_ROOT'].'/chirper/';
$basePath = $_SERVER['SERVER_NAME']==='frank.com'?'/':'/chirper/';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']?'12345678':'');
spl_autoload_register(function($class){
$path = str_replace('\\', DIRECTORY_SEPARATOR, strtolower($class)).'.php';if(file_exists($path)){require $path;}else{
echo "classe $class não encontrada";exit;}});class bd {privatestatic $bindings =[];privatestatic $initialized =false;privatestatic $query;privatestatic $pdo;staticfunctionget(){
$stmt =self::getPdo()->prepare(self::$query);if(!empty(self::$bindings)){foreach(self::$bindings as $key => $value){
$stmt->bindValue(":$key", $value);}}
$stmt->execute();
$result = $stmt->fetchAll(PDO::FETCH_OBJ);self::$query ='';self::$bindings =[];return $result;}staticfunction get1(){self::$query .=" LIMIT 1";
$stmt =self::getPdo()->prepare(self::$query);if(!empty(self::$bindings)){foreach(self::$bindings as $key => $value){
$stmt->bindValue(":$key", $value);}}
$stmt->execute();
$result = $stmt->fetchAll(PDO::FETCH_OBJ)[0];self::$query ='';self::$bindings =[];return $result;}protectedstaticfunction getPdo(){self::initialize();returnself::$pdo;}staticfunction getv($column){
$stmt =self::getPdo()->prepare(self::$query);if(!empty(self::$bindings)){foreach(self::$bindings as $key => $value){
$stmt->bindValue(":$key", $value);}}
$stmt->execute();
$result = $stmt->fetch(PDO::FETCH_ASSOC);self::$query ='';self::$bindings =[];return $result[$column]??null;}staticfunction getx(){
$stmt =self::getPdo()->prepare(self::$query);if(!empty(self::$bindings)){foreach(self::$bindings as $key => $value){
$stmt->bindValue(":$key", $value);}}
$stmt->execute();return;}staticfunction initialize(){if(!self::$initialized){
$dsn ='mysql:host='. HOST .';dbname='. DBNAME;self::$pdo =new PDO($dsn, USER, PASSWORD);self::$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);self::$initialized =true;}}staticfunction x($sql,$bindings=[]){self::initialize();self::$query=$sql;self::$bindings=$bindings;returnnewstatic;}}
exemplo de comandos:
$lctos=bd::x("select * from tbdiario where dia=:dia order by lcto",['dia'=>$dia])->get();
$somaDebito=bd::x("select sum(valor) as soma from tbdiario where dia=:dia and contad>0",['dia'=>$dia])->getv('soma');
bd::x("insert into tbcontacorrente (docto,lcto) values (:dif,:lcto)",['dif'=>$dif,'lcto'=>$lcto])->getx();
bd::x("delete from tbcontacorrente where docto=:docto",['docto'=>$p->docto])->getx();
ou seja, ao invés de criar um método para cada tarefa CRUD CreateReadUpdateDelete, por que não criar um método para todas as tarefas do CRUD?
Pergunta
Frank K Hosaka
A última vez que eu vi a classe bd, ele estava ocupando quase 300 linhas, é muita coisa, não vale a pena tentar imitar o Laravel, mas eu aprendi muita coisa, e assim montei uma classe bd com poucos métodos, que não precisa mexer toda vez que aparece uma tarefa nova:
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.