Ir para conteúdo
Fórum Script Brasil
  • 0

bd::x, desisti do projeto semiLaravel


Frank K Hosaka

Pergunta

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 {

    private static $bindings = [];
    private static $initialized = false;
    private static $query;
    private static $pdo;

    static function get() {
        $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;
    }

    static function 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;
    }
    
    protected static function getPdo() {
        self::initialize();
        return self::$pdo;
    }

    static function 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;
    }

    static function getx() {
        $stmt = self::getPdo()->prepare(self::$query);
        if (!empty(self::$bindings)) {
            foreach (self::$bindings as $key => $value) {
                $stmt->bindValue(":$key", $value);
            }
        }
        $stmt->execute();
        return;
    }
    

    static function 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;
        }
    }

    static function x($sql,$bindings=[]) {
        self::initialize();
        self::$query=$sql;
        self::$bindings=$bindings;
        return new static;
    }
}


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 Create Read Update Delete, por que não criar um método para todas as tarefas do CRUD?

 

Link para o comentário
Compartilhar em outros sites

0 respostass a esta questão

Posts Recomendados

Até agora não há respostas para essa pergunta

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.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,1k
×
×
  • Criar Novo...