主に3種類あるけれども微妙にに違う。
とくに__CLASS__は挙動に癖あるので注意したい。
<?php
namespace testnamespace;
class base{
public function __construct(){
echo __CLASS__.PHP_EOL;
echo get_class($this).PHP_EOL;
echo $this::class.PHP_EOL;// PHP8以降のみ
}
}
class child extends base{}
class child2 extends child{
public function __construct(){
echo __CLASS__.PHP_EOL;
echo get_class($this).PHP_EOL;
echo $this::class.PHP_EOL;
}
}
$b = new base();
echo '--------------'.PHP_EOL;
$c = new child();
echo '--------------'.PHP_EOL;
$c2 = new child2();出力
testnamespace\base
testnamespace\base
testnamespace\base
--------------
testnamespace\base
testnamespace\child
testnamespace\child
--------------
testnamespace\child2
testnamespace\child2
testnamespace\child2