Kapan menggunakan self dan $this dalam PHP?

Kapan menggunakan self dan $this dalam PHP?

iis

August 12, 2019

Di PHP 5, apa perbedaan antara menggunakan self dan $ this?

Kapan masing-masing sesuai?

php

Jawaban singkat

Gunakan $this untuk merujuk ke objek saat ini. Gunakan self untuk merujuk ke kelas saat ini. Dengan kata lain, gunakan $this-> member untuk anggota non-statis, gunakan self::$ member untuk anggota statis.

Jawaban Lengkap

Berikut adalah contoh penggunaan $ this yang benar dan self untuk variabel anggota yang tidak statis dan statis:

class X {
private $non_static_member = 1;
private static $static_member = 2;
function __construct() {
echo $this->non_static_member . ' '
. self::$static_member;
}
}
new X();

Berikut adalah contoh penggunaan $ this yang salah dan self untuk variabel anggota yang tidak statis dan statis:

class X {
private $non_static_member = 1;
private static $static_member = 2;
function __construct() {
echo self::$non_static_member . ' '
. $this->static_member;
}
}
new X();

Berikut adalah contoh polimorfisme dengan $ this untuk fungsi anggota:

class X {
function foo() {
echo 'X::foo()';
}
function bar() {
$this->foo();
}
}
class Y extends X {
function foo() {
echo 'Y::foo()';
}
}
$x = new Y();
$x->bar();

Berikut adalah contoh menekan perilaku polimorfik dengan menggunakan self untuk fungsi anggota:

class X {
function foo() {
echo 'X::foo()';
}
function bar() {
self::foo();
}
}
class Y extends X {
function foo() {
echo 'Y::foo()';
}
}
$x = new Y();
$x->bar();

Idenya adalah bahwa $ this-> foo () memanggil fungsi anggota foo () dari apa pun jenis persis dari objek saat ini. Jika objeknya bertipe X, ia memanggil X :: foo (). Jika objeknya bertipe Y, ia memanggil Y :: foo (). Tetapi dengan self :: foo (), X :: foo () selalu dipanggil.