@ 2014-01-21T19:07:10Z <?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);
}
}
?>
Enable javascript to submit You have javascript disabled. You will not be able to edit any code.
Here you find the average performance (time & memory) of each version. A grayed out version indicates it didn't complete successfully (based on exit-code).
Version System time (s) User time (s) Memory (MiB) 5.4.24 0.033 0.037 19.14 5.4.23 0.030 0.040 19.26 5.4.22 0.047 0.070 19.14 5.4.21 0.043 0.053 19.21 5.4.20 0.043 0.060 19.21 5.4.19 0.043 0.043 18.98 5.4.18 0.043 0.063 18.98 5.4.17 0.050 0.053 18.96 5.4.16 0.027 0.040 19.18 5.4.15 0.027 0.043 19.11 5.4.14 0.033 0.033 16.39 5.4.13 0.043 0.077 16.39 5.4.12 0.040 0.060 16.48 5.4.11 0.043 0.050 16.52 5.4.10 0.040 0.033 16.37 5.4.9 0.033 0.050 16.70 5.4.8 0.040 0.053 16.53 5.4.7 0.030 0.043 16.55 5.4.6 0.043 0.060 16.34 5.4.5 0.040 0.050 16.46 5.4.4 0.027 0.043 16.50 5.4.3 0.040 0.057 16.45 5.4.2 0.023 0.037 16.42 5.4.1 0.050 0.060 16.45 5.4.0 0.027 0.033 15.84 5.3.28 0.043 0.053 14.52 5.3.27 0.063 0.050 14.79 5.3.26 0.030 0.043 14.64 5.3.25 0.030 0.040 14.69 5.3.24 0.030 0.040 14.71 5.3.23 0.033 0.037 14.78 5.3.22 0.050 0.053 14.49 5.3.21 0.047 0.070 14.63 5.3.20 0.053 0.060 14.59 5.3.19 0.037 0.040 14.62 5.3.18 0.040 0.050 14.61 5.3.17 0.023 0.040 14.65 5.3.16 0.030 0.033 14.59 5.3.15 0.027 0.037 14.59 5.3.14 0.047 0.063 14.60 5.3.13 0.040 0.033 14.63 5.3.12 0.037 0.043 14.59 5.3.11 0.023 0.040 14.50 5.3.10 0.023 0.053 14.13 5.3.9 0.030 0.043 14.05 5.3.8 0.030 0.033 14.05 5.3.7 0.033 0.037 14.21 5.3.6 0.033 0.050 14.07 5.3.5 0.040 0.050 13.98 5.3.4 0.030 0.047 14.14 5.3.3 0.027 0.040 14.00 5.3.2 0.033 0.033 13.70 5.3.1 0.043 0.057 13.68 5.3.0 0.047 0.057 13.59
preferences:dark mode live preview
139.13 ms | 1394 KiB | 7 Q