CLASS get class() 和 get class() 之間的區別

__CLASS__ magic constant 返回與沒有引數呼叫的 get_class() 函式相同的結果,它們都返回定義它的類的名稱(即編寫函式呼叫/常量名稱的位置)。

相反,get_class($this)get_called_class() 函式呼叫,都將返回例項化的實際類的名稱:

<?php

class Definition_Class {

  public function say(){
     echo '__CLASS__ value: ' . __CLASS__ . "\n";
     echo 'get_called_class() value: ' . get_called_class() . "\n";
     echo 'get_class($this) value: ' . get_class($this) . "\n";
     echo 'get_class() value: ' . get_class() . "\n";
  }
  
}

class Actual_Class extends Definition_Class {}

$c = new Actual_Class();
$c->say();
// Output:
// __CLASS__ value: Definition_Class
// get_called_class() value: Actual_Class
// get_class($this) value: Actual_Class
// get_class() value: Definition_Class