PHP __CLASS __,get_class()和get_ Called_class()之间的区别

示例

__CLASS__magic常量返回的结果与get_class()不带参数调用的函数的结果相同,并且都返回定义该类的名称(即,您在其中编写函数call / constant name的位置)。

相反,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();
// 输出:
// __CLASS__值:Definition_Class
// get_drawn_class()值:Actual_Class
// get_class($this)值:Actual_Class
// get_class()值:Definition_Class