isset() dan magic method __get()

Lama tak buat posting dikarenakan karena kesibukan dan mud menulis yang susah sekali datangnya.

Oke,

Sekarang saya akan sedikit berbagi karena baru-baru ini ada kasus yang membuat saya sempat bingung, tetapi sebenarnya konyol.

Jadi ceritanya begini, saya punya sebuah class berikut:

class A
{
    public $data = array('angka1' => 1, 'angka2' = 2)
    public function __get($key)
    {
        return (isset($data[$key])) ? $data[$key] : false;
    }
}

kemudian saya panggil:

$myClass = new A();

semua tampak normal, tapi kemudian saya mau memanggil suatu data dengan mengecek keberadaannya terlebih dahulu:

if(isset($myClass->angka1)) echo $myClass->angka1
else echo "Kok nggak ada?";

Kalau di execute script diatas selalu akan mengeluarkan output

Kok nggak ada?

padahal kalau diekesekusi langsung

echo $myClass->angka1;

hasil outputnya akan menjadi

Ternyata oh ternyata.. semua karena si method __get(). Kalau ditelaah, property $myClass->angka1 tidak ada didefinisikan pada class A. Tetapi karena ada method __get() data akan diambil dari property $data di dalam class A. Jadi masuk akal kenapa isset tidak menangkap datanya ada tetapi dikeluarkan ada datanya.

Ya ini hanya sharing saja, siapa tau ada yang mengalami hal yang sama saat meng-coding. Semoga bisa dijadikan bahan referensi.

Happy Coding.

 

  • jack

    kren nie pak… wlaupun tidak tau pasti, setidaknya pernah baca, ada bayangan walaupun burem2 pak..heheheh

  • kotakorange

    ya kalo Jack mendalami nanti.. pasti paham apa yang saya maksud.. tp ini juga bukan untuk expert sich.. jadi cerita singkatnya mengakses suatu property dari object yang belum didefinisikan.. *moga g tambah puyeng.. 🙂