Edited at

PHPの親クラスと子クラスに同じ定数(const)があった時のselfとstaticの違い。

More than 1 year has passed since last update.


  • selfの場合、親にしかないメソッド呼んだときは親の定数が使われる。

  • staticの場合、親にしかないメソッドでも子の方が採用。

<?php

class OYA {
const TEST = '親';

public function getSelfOverride() {
return self::TEST;
}

public function getSelfOya() {
return self::TEST;
}

public function getStaticOverride() {
return static::TEST;
}

public function getStaticOya() {
return static::TEST;
}

}

class KO extends OYA {
const TEST = '子';

public function getSelfOverride() {
return self::TEST;
}

public function getSelfKo() {
return self::TEST;
}

public function getStaticOverride() {
return static::TEST;
}

public function getStaticKo() {
return static::TEST;
}
}

var_dump(phpversion() === "7.0.15-0ubuntu0.16.04.4");

var_dump(OYA::TEST === '親');
var_dump(KO::TEST === '子');

$ko = new KO;
var_dump($ko::TEST === '子');

var_dump($ko->getSelfOverride() === '子');
var_dump($ko->getSelfKo() === '子');
var_dump($ko->getSelfOya() === '親');

var_dump($ko->getStaticOverride() === '子');
var_dump($ko->getStaticKo() === '子');
var_dump($ko->getStaticOya() === '子');