Di PHP, ketika suatu properti atau metode ditandai sebagai pribadi, maka hanya dapat diakses dari dalam kelas. Ini termasuk Contoh lain dari kategori yang sama. Sekilas hal ini mungkin tampak berlawanan dengan intuisi, karena kita terbiasa berurusan dengan contoh kategori. Namun operator visibilitas tidak berlaku pada level objek, melainkan pada level kategori.
Contoh:
class Foo
{
private $private;
public function __construct($value)
{
$this->private = $value;
}
public function getOther(Foo $object)
{
return $object->private;
}
}
$foo1 = new Foo('foo1');
$foo2 = new Foo('foo2');
echo $foo1->getOther($foo2); // outputs 'foo2'
Ini harus memperjelas bahwa kedua contoh Foo dapat mengakses properti pribadi masing-masing.
Apa kegunaan praktisnya? Kandidat yang baik adalah objek nilai. Jika kita ingin memastikan bahwa masing-masing instance Foo benar-benar sama, kita dapat dengan mudah membandingkan properti privatnya:
class Foo
{
// ...
public function equals(Foo $other)
{
return $this->private === $other->private;
}
}
// ...
echo $foo1->equals($foo2) ? 'Equal' : 'Different';
Nicholas Dionysopoulos – 24/03/2011
informasi bagus, Matthias! Ini sungguh berlawanan dengan intuisi. Pada bahasa berorientasi objek lain yang saya ketahui (Delphi, berbagai dialek .NET), variabel privat tidak dapat diakses di luar konteks instance objek pemilik.
Jonathan Mayhack – 24/03/2011
Informasi bagus. Tidak tahu cara kerja php.
Juga, kasus penggunaan yang bagus… sangat praktis!
Haha – 24/03/2011
Hal yang sama berlaku di Java, dan ketika saya menemukannya, saya merasa agak janggal… tapi ternyata ada gunanya. Jika Anda dapat memperluas kelas untuk membuat fungsi yang membaca instance lain dari kelas dasar, Anda mengalahkan prinsip di balik private 🙂