3v4l.org

run code in 300+ PHP versions simultaneously
<?php abstract class Model { /** * Tabela representativa. * @var [array] */ private $_Table; /** * Meta-Descrições dos Campos. * @var [array] */ protected $_Meta; /** * Listagem dos Campos. * @var [array] */ protected $_Fields; /** * Listagem de Campos que não são podem ser Nulos. * @var [array] */ protected $_NotNull; /** * Instância de banco de dados Singleton. * @var [PDO] */ protected static $db; /** * Listagem de todas as instâncias. * @var [array][array] */ private static $_Cache; public static function _Instance() { self::$db = new db(); } /** * Define a tabela que será usada no objeto. * @param [string] $table Tabela representativa. */ private function setTable($table) { # Verifica se a entrada é válida. if(empty($table)) throw new Exception("A tabela não pode ser vazia."); # Define a tabela na classe. $this->_Table = $table; } public function Insert() { try { Validate::Run($this); foreach($this->_Fields as $Field) $binds[':' . $Field] = $this->{$Field}; $values = implode(', ', keys($binds)); $fields = $this->_Fields; unset($fields[0]); $fields = implode(', ', $this->_Fields); $query = "INSERT INTO ". $this->_Table ."(". $fields .") VALUES(". $values .")"; self::e($query, $binds); $this->Select(self::$db->lastInsertId()); } catch(Exception $e) { echo $e->getMessage(); return false; } } public function Select($id = NULL) { if(is_null($id)) { $id = $this->{$this->_Fields[0]}; if(is_null($id)) throw new Exception("Impossível realizar select com id nulo da tabela ". $this->_Table ."."); } $fields = implode(', ', $this->_Fields); $query = "SELECT ". $fields ." FROM ". $this->_Table ." WHERE ". $this->_Fields[0] ." = ?"; $stmt = self::e($query , array($id)); $row = $stmt->fetch(PDO::FETCH_ASSOC); if($row) { $this->_ResetFields(); foreach($this->_Fields as $Field) $this->{$Field} = $row[$Field]; # $this->{'Hash'} = Bcrypt::hash($id . $this->_Table); self::$_Cache[$this->_Table][$this->_Fields[0]] = $this; } else throw new Exception("Id ". $id ." não existe na tabela ". $this->_Table); } public function Delete($id = NULL) { if(is_null($id)) { $id = $this->{$this->_Fields[0]}; if(is_null($id)) throw new Exception("Impossível deletar um id nulo da tabela ". $this->_Table ."."); } $query = "SELECT ". $fields ." FROM ". $this->_Table ." WHERE ". $this->_Fields[0] ." = ?"; $stmt = self::e($query , array($id)); if($stmt->fetch()) { if(Db::$VirtualDeletion['on']) { $query = "UPDATE ". $this->_Table ." SET ". Db::$VirtualDeletion['Field'] ." = '". Db::$VirtualDeletion['Value'] ."' WHERE ". $this->_Fields[0] ." = ?"; self::e($query, array($id)); } else { $query = "DELETE FROM ". $this->_Table ." WHERE ". $this->_Fields[0] ." = ?"; self::e($query, array($id)); } return true; } else throw new Exception("O id ". $id ." não pode ser excluído da tabela ". $this->_Table ." pois não existe."); } public function Update($id = NULL) { if(is_null($id)) { $id = $this->{$this->_Fields[0]}; if(is_null($id)) throw new Exception("Impossível realizer update em um id nulo da tabela ". $this->_Table ."."); } Validate::Run($this); foreach($this->_Fields as $Field) $binds[':' . $Field] = $this->{$Field}; $fields = $this->_Fields; unset($fields[0]); foreach($fields as $Field) $values[] = $Field .' = '. $this->{$Field}; $values[] = implode(', ', $values); $query = "UPDATE ". $this->_Table ." SET ". $values ." WHERE ". $this->_Fields[0] ." = :" . $this->_Fields[0]; self::e($query, $binds); unset( self::$_Cache[$this->_Table][$this->_Fields[0]] ); $this->Select($id); } /** * Limpa os objetos da memória cache. */ public static function Clear() { unset(self::$_Cache); } protected static function e($query, $binds) { $_stmt = self::$db->prepare($query); $_stmt->execute($binds); return $_stmt; } protected static function q($query) { return self::$db->query($query); } public function __destruct() { self::$db = null; unset(self::$_Cache); } } ?>
Output for 5.3.0 - 5.3.29, 5.4.0 - 5.4.45, 5.5.0 - 5.5.38, 5.6.0 - 5.6.40, 7.0.0 - 7.0.33, 7.1.0 - 7.1.33, 7.2.0 - 7.2.33, 7.3.0 - 7.3.33, 7.4.0 - 7.4.33, 8.0.0 - 8.0.30, 8.1.0 - 8.1.27, 8.2.0 - 8.2.17, 8.3.0 - 8.3.4

preferences:
252.82 ms | 404 KiB | 399 Q