3v4l.org

run code in 500+ 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:  5
compiled vars:  none
line      #* E I O op                               fetch          ext  return  operands
-----------------------------------------------------------------------------------------
   39     0  E >   FETCH_OBJ_R                                          ~0      'name'
          1        FRAMELESS_ICALL_3                preg_replace        ~1      '%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        OP_DATA                                                      ~0
          3      > RETURN                                                       ~1
   40     4*     > RETURN                                                       null

End of function getshortname

End of class Employee.

Generated using Vulcan Logic Dumper, using php 8.5.0


preferences:
160.13 ms | 2091 KiB | 17 Q