3v4l.org

run code in 300+ PHP versions simultaneously
<? /** * 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)); } } ?>

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).

VersionSystem time (s)User time (s)Memory (MiB)
8.3.40.0120.00318.54
8.3.30.0100.00718.68
8.3.20.0080.00018.73
8.3.10.0080.00018.57
8.3.00.0040.00419.25
8.2.170.0040.01122.96
8.2.160.0120.00418.84
8.2.150.0060.00324.18
8.2.140.0080.00024.66
8.2.130.0080.00026.16
8.2.120.0080.00021.07
8.2.110.0070.00320.95
8.2.100.0040.00817.72
8.2.90.0000.00919.21
8.2.80.0040.00417.97
8.2.70.0080.00017.35
8.2.60.0090.00017.91
8.2.50.0000.00717.80
8.2.40.0000.01019.11
8.2.30.0030.00617.53
8.2.20.0040.00517.58
8.2.10.0000.00717.47
8.2.00.0040.00417.42
8.1.270.0080.00023.99
8.1.260.0040.00426.35
8.1.250.0080.00028.09
8.1.240.0100.00022.80
8.1.230.0040.00717.76
8.1.220.0040.00417.74
8.1.210.0040.00418.77
8.1.200.0060.00317.10
8.1.190.0000.00917.10
8.1.180.0030.00618.10
8.1.170.0000.00817.62
8.1.160.0040.00418.94
8.1.150.0080.00018.55
8.1.140.0040.00417.23
8.1.130.0040.00417.38
8.1.120.0000.00717.34
8.1.110.0000.00717.31
8.1.100.0040.00417.32
8.1.90.0000.00817.36
8.1.80.0040.00417.23
8.1.70.0040.00417.20
8.1.60.0040.00417.36
8.1.50.0000.00717.33
8.1.40.0050.00317.29
8.1.30.0030.00517.53
8.1.20.0000.00817.41
8.1.10.0040.00417.41
8.1.00.0000.00817.37
8.0.300.0080.00018.77
8.0.290.0040.00416.75
8.0.280.0030.00318.47
8.0.270.0030.00317.19
8.0.260.0070.00016.68
8.0.250.0000.00616.85
8.0.240.0000.01016.72
8.0.230.0030.00516.69
8.0.220.0070.00016.63
8.0.210.0050.00216.69
8.0.200.0030.00316.66
8.0.190.0070.00016.82
8.0.180.0030.00616.80
8.0.170.0060.00316.75
8.0.160.0000.00716.74
8.0.150.0000.00716.71
8.0.140.0040.00416.73
8.0.130.0050.00013.44
8.0.120.0030.00716.71
8.0.110.0050.00216.69
8.0.100.0040.00416.81
8.0.90.0040.00416.66
8.0.80.0110.00716.65
8.0.70.0040.00316.62
8.0.60.0050.00316.64
8.0.50.0060.00316.59
8.0.30.0130.00716.88
8.0.20.0080.01216.70
8.0.10.0000.00816.82
8.0.00.0080.01016.50
7.4.330.0050.00012.97
7.4.320.0000.00916.42
7.4.300.0000.00616.34
7.4.290.0070.00016.38
7.4.280.0030.00616.37
7.4.270.0000.01016.23
7.4.260.0030.00313.16
7.4.250.0000.00916.34
7.4.240.0000.00716.48
7.4.230.0070.00016.34
7.4.220.0120.00616.33
7.4.210.0110.00816.41
7.4.200.0030.00316.38
7.4.190.0040.00416.59
7.4.160.0060.01616.20
7.4.150.0070.01016.59
7.4.140.0110.01117.86
7.4.130.0160.01016.20
7.4.120.0090.00916.34
7.4.110.0070.01316.58
7.4.100.0070.01016.46
7.4.90.0170.00016.22
7.4.80.0030.01719.39
7.4.70.0090.00816.53
7.4.60.0100.00616.42
7.4.50.0070.00016.57
7.4.40.0000.01316.39
7.4.30.0100.00716.38
7.3.330.0000.00812.98
7.3.320.0000.00513.10
7.3.310.0000.00616.18
7.3.300.0040.00415.98
7.3.290.0080.00816.14
7.3.280.0040.01216.16
7.3.270.0180.00016.20
7.3.260.0090.01216.41
7.3.240.0060.01016.35
7.3.230.0110.00916.08
7.3.210.0030.01316.14
7.3.200.0130.00716.25
7.3.190.0070.00716.51
7.3.180.0080.01116.22
7.3.170.0150.00616.05
7.3.160.0120.00316.20
7.2.330.0040.01316.30
7.2.320.0030.01616.48
7.2.310.0110.00616.30
7.2.300.0030.01316.14
7.2.290.0070.01016.62
5.4.240.0100.04319.23
5.4.230.0230.03319.12
5.4.220.0170.03718.98
5.4.210.0200.05018.86
5.4.200.0070.06319.14
5.4.190.0200.04718.86
5.4.180.0230.04019.18
5.4.170.0200.05018.98
5.4.160.0270.06318.78
5.4.150.0270.05019.29
5.4.140.0300.05016.32
5.4.130.0070.04316.32
5.4.120.0130.04716.54
5.4.110.0230.06716.24
5.4.100.0230.03016.45
5.4.90.0430.04016.37
5.4.80.0200.04016.17
5.4.70.0130.04316.52
5.4.60.0170.06716.38
5.4.50.0170.07016.25
5.4.40.0370.04716.22
5.4.30.0200.03716.37
5.4.20.0170.03716.53
5.4.10.0200.03716.42
5.4.00.0200.06315.82
5.3.290.0270.07014.50
5.3.280.0300.06314.58
5.3.270.0270.04714.55
5.3.260.0300.06714.51
5.3.250.0200.05314.44
5.3.240.0130.06714.44
5.3.230.0200.04314.43
5.3.220.0270.07714.50
5.3.210.0330.04314.39
5.3.200.0230.03314.66
5.3.190.0330.04014.55
5.3.180.0170.03714.39
5.3.170.0130.04014.40
5.3.160.0200.04314.44
5.3.150.0230.05014.50
5.3.140.0400.05314.41
5.3.130.0300.04014.39
5.3.120.0230.04314.39
5.3.110.0170.06314.50
5.3.100.0170.04713.89
5.3.90.0370.04014.00
5.3.80.0270.02713.97
5.3.70.0130.04713.87
5.3.60.0130.04713.89
5.3.50.0200.04013.72
5.3.40.0230.07013.82
5.3.30.0170.04013.87
5.3.20.0300.03313.69
5.3.10.0270.04013.59
5.3.00.0230.04313.48

preferences:
45.98 ms | 400 KiB | 5 Q