3v4l.org

run code in 300+ PHP versions simultaneously
<?php class A { private int $i = 1; // インスタンスが保持する変化する値 public function __toString(): string { // 文字列に変換されるたびに i の値が増えます。 return (string)$this->i++; } } // インスタンスをグローバル定数に割り当てます // これは PHP 8.1 から可能になった"引数デフォルト値にNew"の機能です // @see https://www.php.net/releases/8.1/ja.php#new_in_initializers // @see https://wiki.php.net/rfc/new_in_initializers const CONSTANT = new A; class B { // 新たな定数を文字列結合で構築します public const ClassConstant1 = '' . CONSTANT; public const ClassConstant2 = '' . CONSTANT; public const ClassConstant3 = '' . CONSTANT; public const ClassConstant4 = '' . CONSTANT; } // 定数を呼び出します // 呼び出したタイミングで定数が評価されます // これにより定義上で末尾ながらも最初に呼んだ ClassConstant4 が 1 を持ち、 // 最後に呼んだ ClassConstant1 が 4 を持ちます var_dump(B::ClassConstant4);// string(1) "1" var_dump(B::ClassConstant3);// string(1) "2" var_dump(B::ClassConstant2);// string(1) "3" var_dump(B::ClassConstant1);// string(1) "4" // 一度評価されるとその後は定まった値です var_dump(B::ClassConstant4);// string(1) "1" /* ↑の var_dump 群ではなく、次のコードを実行するとまた定数の値が変わります */ var_dump(B::ClassConstant1);// string(1) "1" var_dump(B::ClassConstant2);// string(1) "2" var_dump(B::ClassConstant3);// string(1) "3" var_dump(B::ClassConstant4);// string(1) "4"
Finding entry points
Branch analysis from position: 0
1 jumps found. (Code = 62) Position 1 = -2
filename:       /in/eCOpP
function name:  (null)
number of ops:  39
compiled vars:  none
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
    3     0  E >   DECLARE_CLASS                                            'a'
   14     1        DECLARE_CONST                                            'CONSTANT', <const ast>
   27     2        INIT_FCALL                                               'var_dump'
          3        FETCH_CLASS_CONSTANT                             ~0      'B', 'ClassConstant4'
          4        SEND_VAL                                                 ~0
          5        DO_ICALL                                                 
   28     6        INIT_FCALL                                               'var_dump'
          7        FETCH_CLASS_CONSTANT                             ~2      'B', 'ClassConstant3'
          8        SEND_VAL                                                 ~2
          9        DO_ICALL                                                 
   29    10        INIT_FCALL                                               'var_dump'
         11        FETCH_CLASS_CONSTANT                             ~4      'B', 'ClassConstant2'
         12        SEND_VAL                                                 ~4
         13        DO_ICALL                                                 
   30    14        INIT_FCALL                                               'var_dump'
         15        FETCH_CLASS_CONSTANT                             ~6      'B', 'ClassConstant1'
         16        SEND_VAL                                                 ~6
         17        DO_ICALL                                                 
   32    18        INIT_FCALL                                               'var_dump'
         19        FETCH_CLASS_CONSTANT                             ~8      'B', 'ClassConstant4'
         20        SEND_VAL                                                 ~8
         21        DO_ICALL                                                 
   36    22        INIT_FCALL                                               'var_dump'
         23        FETCH_CLASS_CONSTANT                             ~10     'B', 'ClassConstant1'
         24        SEND_VAL                                                 ~10
         25        DO_ICALL                                                 
   37    26        INIT_FCALL                                               'var_dump'
         27        FETCH_CLASS_CONSTANT                             ~12     'B', 'ClassConstant2'
         28        SEND_VAL                                                 ~12
         29        DO_ICALL                                                 
   38    30        INIT_FCALL                                               'var_dump'
         31        FETCH_CLASS_CONSTANT                             ~14     'B', 'ClassConstant3'
         32        SEND_VAL                                                 ~14
         33        DO_ICALL                                                 
   39    34        INIT_FCALL                                               'var_dump'
         35        FETCH_CLASS_CONSTANT                             ~16     'B', 'ClassConstant4'
         36        SEND_VAL                                                 ~16
         37        DO_ICALL                                                 
         38      > RETURN                                                   1

Class A:
Function __tostring:
Finding entry points
Branch analysis from position: 0
1 jumps found. (Code = 62) Position 1 = -2
filename:       /in/eCOpP
function name:  __toString
number of ops:  6
compiled vars:  none
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
    7     0  E >   POST_INC_OBJ                                     ~0      'i'
          1        CAST                                          6  ~1      ~0
          2        VERIFY_RETURN_TYPE                                       ~1
          3      > RETURN                                                   ~1
    8     4*       VERIFY_RETURN_TYPE                                       
          5*     > RETURN                                                   null

End of function __tostring

End of class A.

Class B: [no user functions]

Generated using Vulcan Logic Dumper, using php 8.0.0


preferences:
145.25 ms | 997 KiB | 14 Q