this는 현재 인스턴스를 가리키고
self는 호출된 클래스 자체를 가르킴
class Greeter {
function greet() {
echo 'hello';
}
function __construct() {
$this->greet(); //hello
echo ', ';
self::greet(); //hello
}
}
$obj = new Greeter();
결과 : hello, hello
class X {
function greet() { echo 'Greetings from X'; }
function __construct() {
$this->greet(); // $obj->greet();
echo ', ';
self::greet(); // X::greet();
}
}
class Y extends X {
function greet() { echo 'Greetings from Y'; }
}
$obj = new Y();
결과 : Greetings From Y, Greetings From X
construct가 자식클래스(Y)에는 없지만 부모클래스(X)에 construct가 있기 때문에 인자가 없는 Y클래스가 생성된 경우에 부모클래스(X)의 생성자가 실행되고 그 생성자 안에 있는
$this는 현재 인스턴스 $obj를 가리키고, self는 명령이 실행되는 위치 construct의 클래스 자체(X)를 가리키기 때문