<?
/**
* Developer: Felipe Francisco
* Reference: admin@felipefrancisco.com.br
* Date: 10/10/2012
*/
class o extends Model {
/**
* Tipo de saída como HTML.
* @var [boolean]
*/
protected $_HtmlOut = false;
/**
* Contagem de Atributos reais (previamente declarados) existentes.
* @var [int]
*/
protected $_RealAttrs;
/**
* Inicia o objeto.
* @param [string] $table [Nome da tabela que será carregada em um objeto]
* @param [int] $id [Id para ser carregado juntamente, na criação da tabela.]
*/
function __construct($table, $id = NULL) {
# Inicia a instância de banco de dados.
if(!Model::db)
parent::_Instance();
# Verfica na memória se o objeto já foi iniciado anteriormente. Se sim, retorne-o.
if(self::$_Cache[$table][$id] typeof o)
return self::$_Cache[$table][$id];
# Armazena o nome da tabela.
$this->setTable($table);
# Conta os atributos reais da classe para efeito de cálculo de campos posteriormente.
$this->_realAttrs();
# Gera os atributos virtuais;
$this->_virtAttrs();
if(!is_null($id))
$this->Select($id);
}
/**
* Valida as saídas da classe, sempre impimindo em formato HTML.
* @param [string] $var Representa um atributo virtual da tabela.
* @return [mixed] Valor correspondente ao atributo selecionado.
*/
public function __get($var) {
# Verifica se o atributo existe dentro dos atributos virutais.
if(in_array($var, $this->_Fields)) {
# Caso a saída HTML seja verdadeira, formataremos a variável.
if($this->_HtmlOut)
return Format::HTML($this->{$var});
else
return $this->{$var};
}
else
throw new Exception("Atributo ". $var ." da tabela ". $this->_Table ." não encontrado.");
}
/**
* Conta os atributos reais da classe para efeito de cálculo de campos posteriormente.
*/
private function _realAttrs() {
# Procura atributos previamente declarados e define a quantidade de atributos previamente declarados na classe.
foreach(get_object_vars($this) as $vars)
$this->_RealAttrs++;
}
/**
* Define os atributos virtuais da classe.
*/
private function _virtAttrs() {
# Consulta para exibir os campos da tabela em questão.
$query = "SHOW COLUMNS FROM ". $this->table;
# Execução da Consulta de exibição de campos da tabela.
$result = db:q($query);
# Caso existam campos na tabela, prossiga:
if ($result) {
# Enquanto existirem colunas, faça:
foreach ($result as $row) {
# Cria atributo virtual.
$this->{$row['Field']} = null;
# Acha a posição que representa o fim do nome do Tipo do Campo.
$strpos = strpos($row['Type'],'(');
# Define as Meta-características do campo.
$this->_Meta[$row['Field']] = ($strpos) ? substr($row['Type'], 0, $strpos) : $row['Type'];
# Armazena o campo na lista de Campos.
$this->_Fields[] = $row['Field'];
if($row['Null'] == 'YES');
$this->_NotNull[] = $row['Field'];
}
}
else
throw new Exception("Tabela ". $this->_Table ." não encontrada.");
}
/**
* Reseta a classe.
*/
private function _ResetAll() {
$this->_ResetFields();
$this->HtmlOutput(false);
unset(
$this->_Table,
$this->_RealAttrs,
$this->_Meta,
$this->_NotNull,
$this->_Fields,
);
}
/**
* Define o tipo de saída de dados da classe como HTML
* @param [boolean] $mode ativa ou desativa a saída HTML
*/
public function HtmlOutput($mode = true) {
# Valida o modo de saída.
if(!is_bool($mode))
throw new Exception('Modo de HTML inválido');
# Define a saída de variáveis no modo HTML.
$this->_HtmlOut = $mode;
}
/**
* Reseta os campos virtuais.
*/
protected function _ResetFields() {
if(is_array($this->_Fields))
foreach($this->_Fields as $Field)
$this->{$Field} = null;
else
throw new Exception('Não há campos para limpar neste objeto: ' . var_export($this, true));
}
}
?>
<?
/**
* Developer: Felipe Francisco
* Reference: admin@felipefrancisco.com.br
* Date: 10/10/2012
*/
class o extends Model {
/**
* Tipo de saída como HTML.
* @var [boolean]
*/
protected $_HtmlOut = false;
/**
* Contagem de Atributos reais (previamente declarados) existentes.
* @var [int]
*/
protected $_RealAttrs;
/**
* Inicia o objeto.
* @param [string] $table [Nome da tabela que será carregada em um objeto]
* @param [int] $id [Id para ser carregado juntamente, na criação da tabela.]
*/
function __construct($table, $id = NULL) {
# Inicia a instância de banco de dados.
if(!Model::db)
parent::_Instance();
# Verfica na memória se o objeto já foi iniciado anteriormente. Se sim, retorne-o.
if(self::$_Cache[$table][$id] typeof o)
return self::$_Cache[$table][$id];
# Armazena o nome da tabela.
$this->setTable($table);
# Conta os atributos reais da classe para efeito de cálculo de campos posteriormente.
$this->_realAttrs();
# Gera os atributos virtuais;
$this->_virtAttrs();
if(!is_null($id))
$this->Select($id);
}
/**
* Valida as saídas da classe, sempre impimindo em formato HTML.
* @param [string] $var Representa um atributo virtual da tabela.
* @return [mixed] Valor correspondente ao atributo selecionado.
*/
public function __get($var) {
# Verifica se o atributo existe dentro dos atributos virutais.
if(in_array($var, $this->_Fields)) {
# Caso a saída HTML seja verdadeira, formataremos a variável.
if($this->_HtmlOut)
return Format::HTML($this->{$var});
else
return $this->{$var};
}
else
throw new Exception("Atributo ". $var ." da tabela ". $this->_Table ." não encontrado.");
}
/**
* Conta os atributos reais da classe para efeito de cálculo de campos posteriormente.
*/
private function _realAttrs() {
# Procura atributos previamente declarados e define a quantidade de atributos previamente declarados na classe.
foreach(get_object_vars($this) as $vars)
$this->_RealAttrs++;
}
/**
* Define os atributos virtuais da classe.
*/
private function _virtAttrs() {
# Consulta para exibir os campos da tabela em questão.
$query = "SHOW COLUMNS FROM ". $this->table;
# Execução da Consulta de exibição de campos da tabela.
$result = db:q($query);
# Caso existam campos na tabela, prossiga:
if ($result) {
# Enquanto existirem colunas, faça:
foreach ($result as $row) {
# Cria atributo virtual.
$this->{$row['Field']} = null;
# Acha a posição que representa o fim do nome do Tipo do Campo.
$strpos = strpos($row['Type'],'(');
# Define as Meta-características do campo.
$this->_Meta[$row['Field']] = ($strpos) ? substr($row['Type'], 0, $strpos) : $row['Type'];
# Armazena o campo na lista de Campos.
$this->_Fields[] = $row['Field'];
if($row['Null'] == 'YES');
$this->_NotNull[] = $row['Field'];
}
}
else
throw new Exception("Tabela ". $this->_Table ." não encontrada.");
}
/**
* Reseta a classe.
*/
private function _ResetAll() {
$this->_ResetFields();
$this->HtmlOutput(false);
unset(
$this->_Table,
$this->_RealAttrs,
$this->_Meta,
$this->_NotNull,
$this->_Fields,
);
}
/**
* Define o tipo de saída de dados da classe como HTML
* @param [boolean] $mode ativa ou desativa a saída HTML
*/
public function HtmlOutput($mode = true) {
# Valida o modo de saída.
if(!is_bool($mode))
throw new Exception('Modo de HTML inválido');
# Define a saída de variáveis no modo HTML.
$this->_HtmlOut = $mode;
}
/**
* Reseta os campos virtuais.
*/
protected function _ResetFields() {
if(is_array($this->_Fields))
foreach($this->_Fields as $Field)
$this->{$Field} = null;
else
throw new Exception('Não há campos para limpar neste objeto: ' . var_export($this, true));
}
}
?>
Output for 8.0.13
Parse error: syntax error, unexpected identifier "typeof" in /in/k4rpS on line 35
Process exited with code 255.
Output for 5.4.0 - 5.4.24, 7.3.32 - 7.3.33, 7.4.26, 7.4.33
Parse error: syntax error, unexpected 'typeof' (T_STRING) in /in/k4rpS on line 35
Process exited with code 255.