mugyu
3/11/2019 - 9:36 AM

比較 self::hoge() and static::hoge()

比較 self::hoge() and static::hoge()

<?php
/**
 * 比較 self::hoge() and static::hoge() 
 */

class A1 {
	public static function message() {
		return "A1\n";
	}

	public function say() {
		// self::だと、そのレベルのクラスのメソッドを束縛する
		echo self::message();
	}
}

class B1 extends A1 {
	public static function message() {
		return "B1\n";
	}
}


class A2 {
	public static function message() {
		return "A1\n";
	}

	public function say() {
		// static::だと、最終レベルのクラスのメソッドを束縛する
		echo static::message();
	}
}

class B2 extends A2 {
	public static function message() {
		return "B1\n";
	}
}

$b1 = new B1();
$b1->say();  // => A1

$b2 = new B2();
$b2->say();  // => B1

// 最終レベルで self:: を書いているなら特に問題ないけど、
// 中間レベルのクラスで書くと勘違いしそうな感じ