3v4l.org

run code in 300+ PHP versions simultaneously
<?php class Employee { public $name; // имя-фамилия public $rate; // часовая ставка (сколько он получает тугриков за час работы) public $hours = array(); // массив, содержащий отработанные часы по неделям public $overtime = 0; public function __construct($name, $rate) { // задаем имя и часовую ставку $this->name = $name; $this->rate = $rate; } /** Считает общее число отработанных часов */ public function getNormalHours() { // Просто складываем значения часов в массиве return array_sum($this->hours); } public function getOvertimeHours() { return $this->overtime; } /** Считает зарплату */ public function getSalary() { // Получаем число отработанных часов $hours = $this->getNormalHours() - $this->overtime; // и умножаем на часовую ставку $salary = $hours * $this->rate + $this->overtime * $this->rate * 2; return $salary; } public function getShortName() { return preg_replace('/(?<=(?<=(?<=[а-яё])[ ])[А-ЯЁ])[а-яё]+/ui', ".", $this->name); } } function printTable ($employees) { // Ширина колонок $col1 = 30; $col2 = 8; $col3 = 10; $col4 = 8; $col5 = 8; $totalSelery = 0; $totalNormalHours = 0; $totalOvertimeHours = 0; // Заголовок таблицы echo padRight("Сотрудник", $col1) . padLeft("Часы", $col2) . padLeft("Овертайм", $col3) . padLeft("Ставка", $col4) . padLeft("З/п", $col5) . "\n\n"; // Сама таблица foreach ($employees as $employee) { echo padRight($employee->getShortName(), $col1) . padLeft($employee->getNormalHours(), $col2) . padLeft($employee->getOvertimeHours(), $col3) . padLeft($employee->rate, $col4) . padLeft($employee->getSalary(), $col5) . "\n"; $totalSelery += $employee->getSalary(); $totalNormalHours += $employee->getNormalHours(); $totalOvertimeHours += $employee->getOvertimeHours(); } echo padRight("Всего", $col1) . padLeft($totalNormalHours, $col2) . padLeft($totalOvertimeHours, $col3) . padLeft("", $col4) . padLeft($totalSelery, $col5); } function padLeft ($field, $col) { echo str_repeat(" ", $col - mb_strlen($field)).$field; } function padRight ($field, $col) { echo $field.str_repeat(" ", $col - mb_strlen($field)); } $ivan = new Employee("Иванов Иван", 10); // name и rate заданы через конструктор, потому осталось лишь написать часы $ivan->hours = array(40, 40, 40, 40); // Иван работает по 40 часов в неделю $peter = new Employee("Петров Петр", 8); $peter->hours = array(40, 10, 40, 50); $peter->overtime = 10; $employees = array(); $employees[] = $ivan; $employees[] = $peter; printTable($employees);
Finding entry points
Branch analysis from position: 0
1 jumps found. (Code = 62) Position 1 = -2
filename:       /in/NSVsb
function name:  (null)
number of ops:  25
compiled vars:  !0 = $ivan, !1 = $peter, !2 = $employees
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
   91     0  E >   NEW                                              $3      'Employee'
          1        SEND_VAL_EX                                              '%D0%98%D0%B2%D0%B0%D0%BD%D0%BE%D0%B2+%D0%98%D0%B2%D0%B0%D0%BD'
          2        SEND_VAL_EX                                              10
          3        DO_FCALL                                      0          
          4        ASSIGN                                                   !0, $3
   93     5        ASSIGN_OBJ                                               !0, 'hours'
          6        OP_DATA                                                  <array>
   95     7        NEW                                              $7      'Employee'
          8        SEND_VAL_EX                                              '%D0%9F%D0%B5%D1%82%D1%80%D0%BE%D0%B2+%D0%9F%D0%B5%D1%82%D1%80'
          9        SEND_VAL_EX                                              8
         10        DO_FCALL                                      0          
         11        ASSIGN                                                   !1, $7
   96    12        ASSIGN_OBJ                                               !1, 'hours'
         13        OP_DATA                                                  <array>
   97    14        ASSIGN_OBJ                                               !1, 'overtime'
         15        OP_DATA                                                  10
   99    16        ASSIGN                                                   !2, <array>
  100    17        ASSIGN_DIM                                               !2
         18        OP_DATA                                                  !0
  101    19        ASSIGN_DIM                                               !2
         20        OP_DATA                                                  !1
  103    21        INIT_FCALL                                               'printtable'
         22        SEND_VAR                                                 !2
         23        DO_FCALL                                      0          
         24      > RETURN                                                   1

Function printtable:
Finding entry points
Branch analysis from position: 0
2 jumps found. (Code = 77) Position 1 = 36, Position 2 = 83
Branch analysis from position: 36
2 jumps found. (Code = 78) Position 1 = 37, Position 2 = 83
Branch analysis from position: 37
1 jumps found. (Code = 42) Position 1 = 36
Branch analysis from position: 36
Branch analysis from position: 83
1 jumps found. (Code = 62) Position 1 = -2
Branch analysis from position: 83
filename:       /in/NSVsb
function name:  printTable
number of ops:  110
compiled vars:  !0 = $employees, !1 = $col1, !2 = $col2, !3 = $col3, !4 = $col4, !5 = $col5, !6 = $totalSelery, !7 = $totalNormalHours, !8 = $totalOvertimeHours, !9 = $employee
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
   43     0  E >   RECV                                             !0      
   45     1        ASSIGN                                                   !1, 30
   46     2        ASSIGN                                                   !2, 8
   47     3        ASSIGN                                                   !3, 10
   48     4        ASSIGN                                                   !4, 8
   49     5        ASSIGN                                                   !5, 8
   51     6        ASSIGN                                                   !6, 0
   52     7        ASSIGN                                                   !7, 0
   53     8        ASSIGN                                                   !8, 0
   56     9        INIT_FCALL_BY_NAME                                       'padRight'
         10        SEND_VAL_EX                                              '%D0%A1%D0%BE%D1%82%D1%80%D1%83%D0%B4%D0%BD%D0%B8%D0%BA'
         11        SEND_VAR_EX                                              !1
         12        DO_FCALL                                      0  $18     
   57    13        INIT_FCALL_BY_NAME                                       'padLeft'
         14        SEND_VAL_EX                                              '%D0%A7%D0%B0%D1%81%D1%8B'
         15        SEND_VAR_EX                                              !2
         16        DO_FCALL                                      0  $19     
         17        CONCAT                                           ~20     $18, $19
   58    18        INIT_FCALL_BY_NAME                                       'padLeft'
         19        SEND_VAL_EX                                              '%D0%9E%D0%B2%D0%B5%D1%80%D1%82%D0%B0%D0%B9%D0%BC'
         20        SEND_VAR_EX                                              !3
         21        DO_FCALL                                      0  $21     
         22        CONCAT                                           ~22     ~20, $21
   59    23        INIT_FCALL_BY_NAME                                       'padLeft'
         24        SEND_VAL_EX                                              '%D0%A1%D1%82%D0%B0%D0%B2%D0%BA%D0%B0'
         25        SEND_VAR_EX                                              !4
         26        DO_FCALL                                      0  $23     
         27        CONCAT                                           ~24     ~22, $23
   60    28        INIT_FCALL_BY_NAME                                       'padLeft'
         29        SEND_VAL_EX                                              '%D0%97%2F%D0%BF'
         30        SEND_VAR_EX                                              !5
         31        DO_FCALL                                      0  $25     
         32        CONCAT                                           ~26     ~24, $25
         33        CONCAT                                           ~27     ~26, '%0A%0A'
         34        ECHO                                                     ~27
   63    35      > FE_RESET_R                                       $28     !0, ->83
         36    > > FE_FETCH_R                                               $28, !9, ->83
   64    37    >   INIT_FCALL_BY_NAME                                       'padRight'
         38        INIT_METHOD_CALL                                         !9, 'getShortName'
         39        DO_FCALL                                      0  $29     
         40        SEND_VAR_NO_REF_EX                                       $29
         41        SEND_VAR_EX                                              !1
         42        DO_FCALL                                      0  $30     
   65    43        INIT_FCALL_BY_NAME                                       'padLeft'
         44        INIT_METHOD_CALL                                         !9, 'getNormalHours'
         45        DO_FCALL                                      0  $31     
         46        SEND_VAR_NO_REF_EX                                       $31
         47        SEND_VAR_EX                                              !2
         48        DO_FCALL                                      0  $32     
         49        CONCAT                                           ~33     $30, $32
   66    50        INIT_FCALL_BY_NAME                                       'padLeft'
         51        INIT_METHOD_CALL                                         !9, 'getOvertimeHours'
         52        DO_FCALL                                      0  $34     
         53        SEND_VAR_NO_REF_EX                                       $34
         54        SEND_VAR_EX                                              !3
         55        DO_FCALL                                      0  $35     
         56        CONCAT                                           ~36     ~33, $35
   67    57        INIT_FCALL_BY_NAME                                       'padLeft'
         58        CHECK_FUNC_ARG                                           
         59        FETCH_OBJ_FUNC_ARG                               $37     !9, 'rate'
         60        SEND_FUNC_ARG                                            $37
         61        SEND_VAR_EX                                              !4
         62        DO_FCALL                                      0  $38     
         63        CONCAT                                           ~39     ~36, $38
   68    64        INIT_FCALL_BY_NAME                                       'padLeft'
         65        INIT_METHOD_CALL                                         !9, 'getSalary'
         66        DO_FCALL                                      0  $40     
         67        SEND_VAR_NO_REF_EX                                       $40
         68        SEND_VAR_EX                                              !5
         69        DO_FCALL                                      0  $41     
         70        CONCAT                                           ~42     ~39, $41
         71        CONCAT                                           ~43     ~42, '%0A'
         72        ECHO                                                     ~43
   70    73        INIT_METHOD_CALL                                         !9, 'getSalary'
         74        DO_FCALL                                      0  $44     
         75        ASSIGN_OP                                     1          !6, $44
   71    76        INIT_METHOD_CALL                                         !9, 'getNormalHours'
         77        DO_FCALL                                      0  $46     
         78        ASSIGN_OP                                     1          !7, $46
   72    79        INIT_METHOD_CALL                                         !9, 'getOvertimeHours'
         80        DO_FCALL                                      0  $48     
         81        ASSIGN_OP                                     1          !8, $48
   63    82      > JMP                                                      ->36
         83    >   FE_FREE                                                  $28
   75    84        INIT_FCALL_BY_NAME                                       'padRight'
         85        SEND_VAL_EX                                              '%D0%92%D1%81%D0%B5%D0%B3%D0%BE'
         86        SEND_VAR_EX                                              !1
         87        DO_FCALL                                      0  $50     
   76    88        INIT_FCALL_BY_NAME                                       'padLeft'
         89        SEND_VAR_EX                                              !7
         90        SEND_VAR_EX                                              !2
         91        DO_FCALL                                      0  $51     
         92        CONCAT                                           ~52     $50, $51
   77    93        INIT_FCALL_BY_NAME                                       'padLeft'
         94        SEND_VAR_EX                                              !8
         95        SEND_VAR_EX                                              !3
         96        DO_FCALL                                      0  $53     
         97        CONCAT                                           ~54     ~52, $53
   78    98        INIT_FCALL_BY_NAME                                       'padLeft'
         99        SEND_VAL_EX                                              ''
        100        SEND_VAR_EX                                              !4
        101        DO_FCALL                                      0  $55     
        102        CONCAT                                           ~56     ~54, $55
   79   103        INIT_FCALL_BY_NAME                                       'padLeft'
        104        SEND_VAR_EX                                              !6
        105        SEND_VAR_EX                                              !5
        106        DO_FCALL                                      0  $57     
        107        CONCAT                                           ~58     ~56, $57
        108        ECHO                                                     ~58
   81   109      > RETURN                                                   null

End of function printtable

Function padleft:
Finding entry points
Branch analysis from position: 0
1 jumps found. (Code = 62) Position 1 = -2
filename:       /in/NSVsb
function name:  padLeft
number of ops:  13
compiled vars:  !0 = $field, !1 = $col
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
   83     0  E >   RECV                                             !0      
          1        RECV                                             !1      
   84     2        INIT_FCALL                                               'str_repeat'
          3        SEND_VAL                                                 '+'
          4        INIT_FCALL                                               'mb_strlen'
          5        SEND_VAR                                                 !0
          6        DO_ICALL                                         $2      
          7        SUB                                              ~3      !1, $2
          8        SEND_VAL                                                 ~3
          9        DO_ICALL                                         $4      
         10        CONCAT                                           ~5      $4, !0
         11        ECHO                                                     ~5
   85    12      > RETURN                                                   null

End of function padleft

Function padright:
Finding entry points
Branch analysis from position: 0
1 jumps found. (Code = 62) Position 1 = -2
filename:       /in/NSVsb
function name:  padRight
number of ops:  13
compiled vars:  !0 = $field, !1 = $col
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
   87     0  E >   RECV                                             !0      
          1        RECV                                             !1      
   88     2        INIT_FCALL                                               'str_repeat'
          3        SEND_VAL                                                 '+'
          4        INIT_FCALL                                               'mb_strlen'
          5        SEND_VAR                                                 !0
          6        DO_ICALL                                         $2      
          7        SUB                                              ~3      !1, $2
          8        SEND_VAL                                                 ~3
          9        DO_ICALL                                         $4      
         10        CONCAT                                           ~5      !0, $4
         11        ECHO                                                     ~5
   89    12      > RETURN                                                   null

End of function padright

Class Employee:
Function __construct:
Finding entry points
Branch analysis from position: 0
1 jumps found. (Code = 62) Position 1 = -2
filename:       /in/NSVsb
function name:  __construct
number of ops:  7
compiled vars:  !0 = $name, !1 = $rate
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
   10     0  E >   RECV                                             !0      
          1        RECV                                             !1      
   13     2        ASSIGN_OBJ                                               'name'
          3        OP_DATA                                                  !0
   14     4        ASSIGN_OBJ                                               'rate'
          5        OP_DATA                                                  !1
   15     6      > RETURN                                                   null

End of function __construct

Function getnormalhours:
Finding entry points
Branch analysis from position: 0
1 jumps found. (Code = 62) Position 1 = -2
filename:       /in/NSVsb
function name:  getNormalHours
number of ops:  6
compiled vars:  none
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
   21     0  E >   INIT_FCALL                                               'array_sum'
          1        FETCH_OBJ_R                                      ~0      'hours'
          2        SEND_VAL                                                 ~0
          3        DO_ICALL                                         $1      
          4      > RETURN                                                   $1
   22     5*     > RETURN                                                   null

End of function getnormalhours

Function getovertimehours:
Finding entry points
Branch analysis from position: 0
1 jumps found. (Code = 62) Position 1 = -2
filename:       /in/NSVsb
function name:  getOvertimeHours
number of ops:  3
compiled vars:  none
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
   25     0  E >   FETCH_OBJ_R                                      ~0      'overtime'
          1      > RETURN                                                   ~0
   26     2*     > RETURN                                                   null

End of function getovertimehours

Function getsalary:
Finding entry points
Branch analysis from position: 0
1 jumps found. (Code = 62) Position 1 = -2
filename:       /in/NSVsb
function name:  getSalary
number of ops:  15
compiled vars:  !0 = $hours, !1 = $salary
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
   32     0  E >   INIT_METHOD_CALL                                         'getNormalHours'
          1        DO_FCALL                                      0  $2      
          2        FETCH_OBJ_R                                      ~3      'overtime'
          3        SUB                                              ~4      $2, ~3
          4        ASSIGN                                                   !0, ~4
   34     5        FETCH_OBJ_R                                      ~6      'rate'
          6        MUL                                              ~7      !0, ~6
          7        FETCH_OBJ_R                                      ~8      'overtime'
          8        FETCH_OBJ_R                                      ~9      'rate'
          9        MUL                                              ~10     ~8, ~9
         10        MUL                                              ~11     ~10, 2
         11        ADD                                              ~12     ~7, ~11
         12        ASSIGN                                                   !1, ~12
   35    13      > RETURN                                                   !1
   36    14*     > RETURN                                                   null

End of function getsalary

Function getshortname:
Finding entry points
Branch analysis from position: 0
1 jumps found. (Code = 62) Position 1 = -2
filename:       /in/NSVsb
function name:  getShortName
number of ops:  8
compiled vars:  none
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
   39     0  E >   INIT_FCALL                                               'preg_replace'
          1        SEND_VAL                                                 '%2F%28%3F%3C%3D%28%3F%3C%3D%28%3F%3C%3D%5B%D0%B0-%D1%8F%D1%91%5D%29%5B+%5D%29%5B%D0%90-%D0%AF%D0%81%5D%29%5B%D0%B0-%D1%8F%D1%91%5D%2B%2Fui'
          2        SEND_VAL                                                 '.'
          3        FETCH_OBJ_R                                      ~0      'name'
          4        SEND_VAL                                                 ~0
          5        DO_ICALL                                         $1      
          6      > RETURN                                                   $1
   40     7*     > RETURN                                                   null

End of function getshortname

End of class Employee.

Generated using Vulcan Logic Dumper, using php 8.0.0


preferences:
174.93 ms | 959 KiB | 23 Q