LoginSignup
10
6

More than 5 years have passed since last update.

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

Last updated at Posted at 2017-08-24
  • 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()      === '子');

10
6
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
6