3v4l.org

run code in 150+ php & hhvm versions
Bugs & Features
<?php /** * 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 5.4.0 - 5.6.28, 7.0.0 - 7.1.0
Parse error: syntax error, unexpected 'typeof' (T_STRING) in /in/AN5HT on line 35
Process exited with code 255.
Output for hhvm-3.10.0 - 3.12.0
Fatal error: syntax error, unexpected T_STRING in /in/AN5HT on line 35
Process exited with code 255.
Output for 5.3.0 - 5.3.29
Parse error: syntax error, unexpected T_STRING in /in/AN5HT on line 35
Process exited with code 255.