3v4l.org

run code in 300+ PHP versions simultaneously
<?php /*! * Previsão de Tempo - CPTEC/INPE * * @documentation: http://servicos.cptec.inpe.br/XML/ * @icons: http://tempo.cptec.inpe.br/~rtempo/legenda.shtml */ class WeatherForecast { private $_source = 'CPTEC/INPE'; private $_api = 'http://servicos.cptec.inpe.br/XML/'; private $_city = null; private $_labels = array( 'ec' => array( 'description' => 'Encoberto com Chuvas Isoladas', 'text' => 'Céu totalmente encoberto com chuvas em algumas regiões, sem aberturas de sol.', ), 'ci' => array( 'description' => 'Chuvas Isoladas', 'text' => 'Muitas nuvens com curtos períodos de sol e chuvas em algumas áreas.', ), 'c' => array( 'description' => 'Chuva', 'text' => 'Muitas nuvens e chuvas periódicas.', ), 'in' => array( 'description' => 'Instável', 'text' => 'Nebulosidade variável com chuva a qualquer hora do dia.', ), 'pp' => array( 'description' => 'Possibilidade de Pancadas de Chuva', 'text' => 'Nebulosidade variável com pequena chance (inferior a 30%) de pancada de chuva.', ), 'cm' => array( 'description' => 'Chuva pela Manhã', 'text' => 'Chuva pela manhã melhorando ao longo do dia.', ), 'cn' => array( 'description' => 'Chuva a Noite', 'text' => 'Nebulosidade em aumento e chuvas durante a noite.', ), 'pt' => array( 'description' => 'Pancadas de Chuva a Tarde', 'text' => 'Predomínio de sol pela manhã. À tarde chove com trovoada.', ), 'pm' => array( 'description' => 'Pancadas de Chuva pela Manhã', 'text' => 'Chuva com trovoada pela manhã. À tarde o tempo abre e não chove.', ), 'np' => array( 'description' => 'Nublado e Pancadas de Chuva', 'text' => 'Muitas nuvens com curtos períodos de sol e pancadas de chuva com trovoadas.', ), 'pc' => array( 'description' => 'Pancadas de Chuva', 'text' => 'Chuva de curta duração e pode ser acompanhada de trovoadas a qualquer hora do dia.', ), 'pn' => array( 'description' => 'Parcialmente Nublado', 'text' => 'Sol entre poucas nuvens.', ), 'cv' => array( 'description' => 'Chuvisco', 'text' => 'Muitas nuvens e chuva fraca composta de pequenas gotas d´ água.', ), 'ch' => array( 'description' => 'Chuvoso', 'text' => 'Nublado com chuvas contínuas ao longo do dia.', ), 't' => array( 'description' => 'Tempestade', 'text' => 'Chuva forte capaz de gerar granizo e ou rajada de vento, com força destrutiva (Veloc. aprox. de 90 Km/h) e ou tornados.', ), 'ps' => array( 'description' => 'Predomínio de Sol', 'text' => 'Sol na maior parte do período.', ), 'e' => array( 'description' => 'Encoberto', 'text' => 'Céu totalmente encoberto, sem aberturas de sol.', ), 'n' => array( 'description' => 'Nublado', 'text' => 'Muitas nuvens com curtos períodos de sol.', ), 'cl' => array( 'description' => 'Céu Claro', 'text' => 'Sol durante todo o período. Ausência de nuvens.', ), 'nv' => array( 'description' => 'Nevoeiro', 'text' => 'Gotículas de água em suspensão que reduzem a visibilidade.', ), 'g' => array( 'description' => 'Geada', 'text' => 'Cobertura de cristais de gelo que se formam por sublimação direta sobre superfícies expostas cuja temperatura está abaixo do ponto de congelamento.', ), 'ne' => array( 'description' => 'Neve', 'text' => 'Vapor de água congelado na nuvem, que cai em forma de cristais e flocos.', ), 'nd' => array( 'description' => 'Não Definido', 'text' => 'Não Definido.', ), 'pnt' => array( 'description' => 'Pancadas de Chuva a Noite', 'text' => 'Chuva de curta duração podendo ser acompanhada de trovoadas à noite.', ), 'psc' => array( 'description' => 'Possibilidade de Chuva', 'text' => 'Nebulosidade variável com pequena chance (inferior a 30%) de chuva.', ), 'pcm' => array( 'description' => 'Possibilidade de Chuva pela Manhã', 'text' => 'Nebulosidade variável com pequena chance (inferior a 30%) de chuva pela manhã.', ), 'pct' => array( 'description' => 'Possibilidade de Chuva a Tarde', 'text' => 'Nebulosidade variável com pequena chance (inferior a 30%) de chuva pela tarde.', ), 'pcn' => array( 'description' => 'Possibilidade de Chuva a Noite', 'text' => 'Nebulosidade variável com pequena chance (inferior a 30%) de chuva à noite.', ), 'npt' => array( 'description' => 'Nublado com Pancadas a Tarde', 'text' => 'Muitas nuvens com curtos períodos de sol e pancadas de chuva com trovoadas à tarde.', ), 'npn' => array( 'description' => 'Nublado com Pancadas a Noite', 'text' => 'Muitas nuvens com curtos períodos de sol e pancadas de chuva com trovoadas à noite.', ), 'ncn' => array( 'description' => 'Nublado com Possibilidade de Chuva à Noite', 'text' => 'Muitas nuvens com curtos períodos de sol com pequena chance (inferior a 30%) de chuva à noite.', ), 'nct' => array( 'description' => 'Nublado com Possibilidade de Chuva à Tarde', 'text' => 'Muitas nuvens com curtos períodos de sol com pequena chance (inferior a 30%) de chuva à tarde.', ), 'ncm' => array( 'description' => 'Nublado com Possibilidade de Chuva pela Manhã', 'text' => 'Muitas nuvens com curtos períodos de sol com pequena chance (inferior a 30%) de chuva pela manhã.', ), 'npm' => array( 'description' => 'Nublado com Pancadas pela Manhã', 'text' => 'Muitas nuvens com curtos períodos de sol e chuva com trovoadas pela manhã.', ), 'npp' => array( 'description' => 'Nublado com Possibilidade de Chuva', 'text' => 'Muitas nuvens com curtos períodos de sol com pequena chance (inferior a 30%) de chuva a qualquer hora do dia.', ), 'vn' => array( 'description' => 'Variação de Nebulosidade', 'text' => 'Períodos curtos de sol intercalados com períodos de nuvens.', ), 'ct' => array( 'description' => 'Chuva a Tarde', 'text' => 'Nebulosidade em aumento e chuvas a partir da tarde.', ), 'ppn' => array( 'description' => 'Possibilidade de Pancadas de Chuva à Noite', 'text' => 'Nebulosidade variável com pequena chance (inferior a 30%) de chuva à noite.', ), 'ppt' => array( 'description' => 'Possibilidade de Pancadas de Chuva à Tarde', 'text' => 'Nebulosidade variável com pequena chance (inferior a 30%) de chuva pela tarde.', ), 'ppm' => array( 'description' => 'Possibilidade de Pancadas de Chuva pela Manhã', 'text' => 'Nebulosidade variável com pequena chance (inferior a 30%) de chuva pela manhã.', ), ); public function __construct($city) { $this->_city = $city; } private function _getApiData() { return simplexml_load_file($this->_api . 'cidade/7dias/' . $this->_city . '/previsao.xml'); } public function get() { $api = $this->_getApiData(); $data = new stdClass(); $data->source = $this->_source; $data->city = (string) $api->nome; $data->state = (string) $api->uf; $data->updated_at = (string) $api->atualizacao; $data->forecast = array(); for ($i = 0; $i < count($api->previsao); $i++) { $forecast = $api->previsao[$i]; $data->forecast[$i]->day = (string) $forecast->dia; $data->forecast[$i]->iuv = (float) $forecast->iuv; $data->forecast[$i]->temperature = new stdClass(); $data->forecast[$i]->temperature->high = (float) $forecast->maxima; $data->forecast[$i]->temperature->low = (float) $forecast->minima; $data->forecast[$i]->temperature->average = ($data->forecast[$i]->temperature->low + $data->forecast[$i]->temperature->high) / 2; $data->forecast[$i]->weather = new stdClass(); $data->forecast[$i]->weather->abbreviation = (string) $forecast->tempo; $data->forecast[$i]->weather->description = $this->_labels[(string) $forecast[$i]->tempo]['description']; $data->forecast[$i]->weather->text = $this->_labels[(string) $forecast[$i]->tempo]['text']; $data->forecast[$i]->weather->icon = 'http://img0.cptec.inpe.br/~rgrafico/icones_principais/tempo/icones/' . (string) $forecast->tempo . '.png'; } return $data; } } $wf = new WeatherForecast(237); // Porto Alegre, RS $data = $wf->get(); header('Content-type: application/json; charset=UTF-8'); header('Access-Control-Allow-Origin: *'); header('Access-Control-Allow-Methods: GET'); echo json_encode($data);
Finding entry points
Branch analysis from position: 0
1 jumps found. (Code = 62) Position 1 = -2
filename:       /in/jDMTt
function name:  (null)
number of ops:  21
compiled vars:  !0 = $wf, !1 = $data
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
  206     0  E >   NEW                                              $2      'WeatherForecast'
          1        SEND_VAL_EX                                              237
          2        DO_FCALL                                      0          
          3        ASSIGN                                                   !0, $2
  207     4        INIT_METHOD_CALL                                         !0, 'get'
          5        DO_FCALL                                      0  $5      
          6        ASSIGN                                                   !1, $5
  208     7        INIT_FCALL                                               'header'
          8        SEND_VAL                                                 'Content-type%3A+application%2Fjson%3B+charset%3DUTF-8'
          9        DO_ICALL                                                 
  209    10        INIT_FCALL                                               'header'
         11        SEND_VAL                                                 'Access-Control-Allow-Origin%3A+%2A'
         12        DO_ICALL                                                 
  210    13        INIT_FCALL                                               'header'
         14        SEND_VAL                                                 'Access-Control-Allow-Methods%3A+GET'
         15        DO_ICALL                                                 
  211    16        INIT_FCALL                                               'json_encode'
         17        SEND_VAR                                                 !1
         18        DO_ICALL                                         $10     
         19        ECHO                                                     $10
         20      > RETURN                                                   1

Class WeatherForecast:
Function __construct:
Finding entry points
Branch analysis from position: 0
1 jumps found. (Code = 62) Position 1 = -2
filename:       /in/jDMTt
function name:  __construct
number of ops:  4
compiled vars:  !0 = $city
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
  174     0  E >   RECV                                             !0      
  175     1        ASSIGN_OBJ                                               '_city'
          2        OP_DATA                                                  !0
  176     3      > RETURN                                                   null

End of function __construct

Function _getapidata:
Finding entry points
Branch analysis from position: 0
1 jumps found. (Code = 62) Position 1 = -2
filename:       /in/jDMTt
function name:  _getApiData
number of ops:  10
compiled vars:  none
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
  178     0  E >   INIT_FCALL                                               'simplexml_load_file'
          1        FETCH_OBJ_R                                      ~0      '_api'
          2        CONCAT                                           ~1      ~0, 'cidade%2F7dias%2F'
          3        FETCH_OBJ_R                                      ~2      '_city'
          4        CONCAT                                           ~3      ~1, ~2
          5        CONCAT                                           ~4      ~3, '%2Fprevisao.xml'
          6        SEND_VAL                                                 ~4
          7        DO_ICALL                                         $5      
          8      > RETURN                                                   $5
  179     9*     > RETURN                                                   null

End of function _getapidata

Function get:
Finding entry points
Branch analysis from position: 0
1 jumps found. (Code = 42) Position 1 = 120
Branch analysis from position: 120
2 jumps found. (Code = 44) Position 1 = 124, Position 2 = 25
Branch analysis from position: 124
1 jumps found. (Code = 62) Position 1 = -2
Branch analysis from position: 25
2 jumps found. (Code = 44) Position 1 = 124, Position 2 = 25
Branch analysis from position: 124
Branch analysis from position: 25
filename:       /in/jDMTt
function name:  get
number of ops:  126
compiled vars:  !0 = $api, !1 = $data, !2 = $i, !3 = $forecast
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
  181     0  E >   INIT_METHOD_CALL                                         '_getApiData'
          1        DO_FCALL                                      0  $4      
          2        ASSIGN                                                   !0, $4
  182     3        NEW                                              $6      'stdClass'
          4        DO_FCALL                                      0          
          5        ASSIGN                                                   !1, $6
  183     6        FETCH_OBJ_R                                      ~10     '_source'
          7        ASSIGN_OBJ                                               !1, 'source'
          8        OP_DATA                                                  ~10
  184     9        FETCH_OBJ_R                                      ~12     !0, 'nome'
         10        CAST                                          6  ~13     ~12
         11        ASSIGN_OBJ                                               !1, 'city'
         12        OP_DATA                                                  ~13
  185    13        FETCH_OBJ_R                                      ~15     !0, 'uf'
         14        CAST                                          6  ~16     ~15
         15        ASSIGN_OBJ                                               !1, 'state'
         16        OP_DATA                                                  ~16
  186    17        FETCH_OBJ_R                                      ~18     !0, 'atualizacao'
         18        CAST                                          6  ~19     ~18
         19        ASSIGN_OBJ                                               !1, 'updated_at'
         20        OP_DATA                                                  ~19
  187    21        ASSIGN_OBJ                                               !1, 'forecast'
         22        OP_DATA                                                  <array>
  188    23        ASSIGN                                                   !2, 0
         24      > JMP                                                      ->120
  189    25    >   FETCH_OBJ_R                                      ~22     !0, 'previsao'
         26        FETCH_DIM_R                                      ~23     ~22, !2
         27        ASSIGN                                                   !3, ~23
  190    28        FETCH_OBJ_R                                      ~28     !3, 'dia'
         29        CAST                                          6  ~29     ~28
         30        FETCH_OBJ_W                                      $25     !1, 'forecast'
         31        FETCH_DIM_W                                      $26     $25, !2
         32        ASSIGN_OBJ                                               $26, 'day'
         33        OP_DATA                                                  ~29
  191    34        FETCH_OBJ_R                                      ~33     !3, 'iuv'
         35        CAST                                          5  ~34     ~33
         36        FETCH_OBJ_W                                      $30     !1, 'forecast'
         37        FETCH_DIM_W                                      $31     $30, !2
         38        ASSIGN_OBJ                                               $31, 'iuv'
         39        OP_DATA                                                  ~34
  192    40        NEW                                              $38     'stdClass'
         41        DO_FCALL                                      0          
         42        FETCH_OBJ_W                                      $35     !1, 'forecast'
         43        FETCH_DIM_W                                      $36     $35, !2
         44        ASSIGN_OBJ                                               $36, 'temperature'
         45        OP_DATA                                                  $38
  193    46        FETCH_OBJ_R                                      ~44     !3, 'maxima'
         47        CAST                                          5  ~45     ~44
         48        FETCH_OBJ_W                                      $40     !1, 'forecast'
         49        FETCH_DIM_W                                      $41     $40, !2
         50        FETCH_OBJ_W                                      $42     $41, 'temperature'
         51        ASSIGN_OBJ                                               $42, 'high'
         52        OP_DATA                                                  ~45
  194    53        FETCH_OBJ_R                                      ~50     !3, 'minima'
         54        CAST                                          5  ~51     ~50
         55        FETCH_OBJ_W                                      $46     !1, 'forecast'
         56        FETCH_DIM_W                                      $47     $46, !2
         57        FETCH_OBJ_W                                      $48     $47, 'temperature'
         58        ASSIGN_OBJ                                               $48, 'low'
         59        OP_DATA                                                  ~51
  195    60        FETCH_OBJ_R                                      ~56     !1, 'forecast'
         61        FETCH_DIM_R                                      ~57     ~56, !2
         62        FETCH_OBJ_R                                      ~58     ~57, 'temperature'
         63        FETCH_OBJ_R                                      ~59     ~58, 'low'
         64        FETCH_OBJ_R                                      ~60     !1, 'forecast'
         65        FETCH_DIM_R                                      ~61     ~60, !2
         66        FETCH_OBJ_R                                      ~62     ~61, 'temperature'
         67        FETCH_OBJ_R                                      ~63     ~62, 'high'
         68        ADD                                              ~64     ~59, ~63
         69        DIV                                              ~65     ~64, 2
         70        FETCH_OBJ_W                                      $52     !1, 'forecast'
         71        FETCH_DIM_W                                      $53     $52, !2
         72        FETCH_OBJ_W                                      $54     $53, 'temperature'
         73        ASSIGN_OBJ                                               $54, 'average'
         74        OP_DATA                                                  ~65
  196    75        NEW                                              $69     'stdClass'
         76        DO_FCALL                                      0          
         77        FETCH_OBJ_W                                      $66     !1, 'forecast'
         78        FETCH_DIM_W                                      $67     $66, !2
         79        ASSIGN_OBJ                                               $67, 'weather'
         80        OP_DATA                                                  $69
  197    81        FETCH_OBJ_R                                      ~75     !3, 'tempo'
         82        CAST                                          6  ~76     ~75
         83        FETCH_OBJ_W                                      $71     !1, 'forecast'
         84        FETCH_DIM_W                                      $72     $71, !2
         85        FETCH_OBJ_W                                      $73     $72, 'weather'
         86        ASSIGN_OBJ                                               $73, 'abbreviation'
         87        OP_DATA                                                  ~76
  198    88        FETCH_DIM_R                                      ~82     !3, !2
         89        FETCH_OBJ_R                                      ~83     ~82, 'tempo'
         90        CAST                                          6  ~84     ~83
         91        FETCH_OBJ_R                                      ~81     '_labels'
         92        FETCH_DIM_R                                      ~85     ~81, ~84
         93        FETCH_DIM_R                                      ~86     ~85, 'description'
         94        FETCH_OBJ_W                                      $77     !1, 'forecast'
         95        FETCH_DIM_W                                      $78     $77, !2
         96        FETCH_OBJ_W                                      $79     $78, 'weather'
         97        ASSIGN_OBJ                                               $79, 'description'
         98        OP_DATA                                                  ~86
  199    99        FETCH_DIM_R                                      ~92     !3, !2
        100        FETCH_OBJ_R                                      ~93     ~92, 'tempo'
        101        CAST                                          6  ~94     ~93
        102        FETCH_OBJ_R                                      ~91     '_labels'
        103        FETCH_DIM_R                                      ~95     ~91, ~94
        104        FETCH_DIM_R                                      ~96     ~95, 'text'
        105        FETCH_OBJ_W                                      $87     !1, 'forecast'
        106        FETCH_DIM_W                                      $88     $87, !2
        107        FETCH_OBJ_W                                      $89     $88, 'weather'
        108        ASSIGN_OBJ                                               $89, 'text'
        109        OP_DATA                                                  ~96
  200   110        FETCH_OBJ_R                                      ~101    !3, 'tempo'
        111        CAST                                          6  ~102    ~101
        112        CONCAT                                           ~103    'http%3A%2F%2Fimg0.cptec.inpe.br%2F%7Ergrafico%2Ficones_principais%2Ftempo%2Ficones%2F', ~102
        113        CONCAT                                           ~104    ~103, '.png'
        114        FETCH_OBJ_W                                      $97     !1, 'forecast'
        115        FETCH_DIM_W                                      $98     $97, !2
        116        FETCH_OBJ_W                                      $99     $98, 'weather'
        117        ASSIGN_OBJ                                               $99, 'icon'
        118        OP_DATA                                                  ~104
  188   119        PRE_INC                                                  !2
        120    >   FETCH_OBJ_R                                      ~106    !0, 'previsao'
        121        COUNT                                            ~107    ~106
        122        IS_SMALLER                                               !2, ~107
        123      > JMPNZ                                                    ~108, ->25
  202   124    > > RETURN                                                   !1
  203   125*     > RETURN                                                   null

End of function get

End of class WeatherForecast.

Generated using Vulcan Logic Dumper, using php 8.0.0


preferences:
166.99 ms | 1408 KiB | 19 Q