@ 2014-01-21T19:08:06Z <?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.013 0.043 19.15 5.4.23 0.013 0.057 19.11 5.4.22 0.013 0.057 18.84 5.4.21 0.010 0.077 19.14 5.4.20 0.007 0.077 19.14 5.4.19 0.003 0.037 18.86 5.4.18 0.003 0.037 19.13 5.4.17 0.000 0.040 18.91 5.4.16 0.010 0.030 18.90 5.4.15 0.000 0.040 19.22 5.4.14 0.000 0.037 16.34 5.4.13 0.003 0.033 16.49 5.4.12 0.000 0.037 16.54 5.4.11 0.003 0.033 16.30 5.4.10 0.007 0.030 16.49 5.4.9 0.000 0.037 16.36 5.4.8 0.010 0.027 16.29 5.4.7 0.007 0.030 16.29 5.4.6 0.003 0.043 16.65 5.4.5 0.003 0.033 16.64 5.4.4 0.003 0.037 16.41 5.4.3 0.000 0.050 16.43 5.4.2 0.003 0.033 16.36 5.4.1 0.000 0.040 16.29 5.4.0 0.000 0.043 15.83 5.3.28 0.007 0.080 14.78 5.3.27 0.003 0.040 14.53 5.3.26 0.007 0.033 14.79 5.3.25 0.007 0.033 14.65 5.3.24 0.007 0.033 14.79 5.3.23 0.000 0.040 14.66 5.3.22 0.007 0.043 14.66 5.3.21 0.007 0.033 14.60 5.3.20 0.000 0.040 14.60 5.3.19 0.003 0.040 14.52 5.3.18 0.000 0.037 14.65 5.3.17 0.000 0.043 14.74 5.3.16 0.010 0.030 14.62 5.3.15 0.000 0.037 14.52 5.3.14 0.007 0.040 14.73 5.3.13 0.000 0.040 14.62 5.3.12 0.000 0.047 14.58 5.3.11 0.003 0.037 14.65 5.3.10 0.003 0.037 14.08 5.3.9 0.003 0.040 14.07 5.3.8 0.000 0.037 13.94 5.3.7 0.007 0.030 14.08 5.3.6 0.000 0.037 14.09 5.3.5 0.003 0.040 14.05 5.3.4 0.000 0.040 14.02 5.3.3 0.000 0.040 14.01 5.3.2 0.003 0.040 13.74 5.3.1 0.007 0.030 13.76 5.3.0 0.003 0.033 13.74
preferences:dark mode live preview
143.1 ms | 1394 KiB | 7 Q