When to use self over $this?

前端 未结 23 3152
醉梦人生
醉梦人生 2020-11-21 11:19

In PHP 5, what is the difference between using self and $this?

When is each appropriate?

23条回答
  •  轮回少年
    2020-11-21 12:13

    Here is a small benchmark (7.2.24 on repl.it):

                Speed (in seconds)  Percentage
    $this->     0.91760206222534    100
    self::      1.0047659873962     109.49909865716
    static::    0.98066782951355    106.87288857386
    

    Results for 4 000 000 runs. Conclusion: it doesn't matter. And here is the code I used:

    called(); }
      public function calling_self() { self::called(); }
      public function calling_static() { static::called(); }
      public static function called() {}
    }
    
    $foo = new Foo();
    $n = 4000000;
    $times = [];
    
    // warmup
    for ($i = 0; $i < $n; $i++) { $foo->calling_this(); }
    for ($i = 0; $i < $n; $i++) { $foo->calling_self(); }
    for ($i = 0; $i < $n; $i++) { $foo->calling_static(); }
    
    $start = microtime(true);
    for ($i = 0; $i < $n; $i++) { $foo->calling_this(); }
    $times["this"] = microtime(true)-$start;
    
    $start = microtime(true);
    for ($i = 0; $i < $n; $i++) { $foo->calling_self(); }
    $times["self"] = microtime(true)-$start;
    
    $start = microtime(true);
    for ($i = 0; $i < $n; $i++) { $foo->calling_static(); }
    $times["static"] = microtime(true)-$start;
    
    $min = min($times);
    echo $times["this"] . "\t" . ($times["this"] / $min)*100 . "\n";
    echo $times["self"] . "\t" . ($times["self"] / $min)*100 . "\n";
    echo $times["static"] . "\t" . ($times["static"] / $min)*100 . "\n";
    

提交回复
热议问题