NongkiNgopi.com – Dalam PHP, variabel dapat diakses melalui nama variabel dinamis. Nama variabel dapat disimpan dalam variabel lain, sehingga memungkinkan untuk diakses secara dinamis. semacam ini dikenal sebagai variabel dinamis. Untuk mengubah variabel menjadi variabel dinamis, tambahkan tanda $
di depan variabel.
$variableName = 'foo';
$foo = 'bar';
// Berikut ini semuanya ekuivalen, dan semuanya menghasilkan "bar":
echo $foo;
echo ${$variableName};
echo $$variableName;
Demikian juga, Anda juga dapat menetapkan nilai ke variabel secara dinamis menggunakan variabel dinamis:
$variableName = 'foo';
$$variableName = 'bar';
// Berikut ini semuanya menghasilkan 'bar'
echo $foo;
echo $$variableName;
echo ${$variableName};
Variabel dinamis berguna untuk memetakan panggilan fungsi/metode:
function tambah($a, $b) {
return $a + $b;
}
$namaFungsi = 'tambah';
echo $namaFungsi(1, 2); // menghasilkan 3
Hal ini menjadi sangat membantu dalam kelas PHP:
class myClass {
public function __construct() {
$namaFungsi = 'lakukanSesuatu';
$this->$namaFungsi('Halo Dunia');
}
private function lakukanSesuatu($string) {
echo $string; // menghasilkan "Halo Dunia"
}
}
Anda dapat menempatkan $variableName
di antara {}
atau tidak:
${$variableName} = $value;
Contoh-contoh berikut semuanya ekuivalen dan menghasilkan “baz”:
$fooBar = 'baz';
$varPrefix = 'foo';
echo $fooBar; // menghasilkan "baz"
echo ${$varPrefix . 'Bar'}; // juga menghasilkan "baz"
Menggunakan {}
hanya diperlukan ketika nama variabel itu sendiri adalah ekspresi, seperti ini:
${$variableNameBagian1 . $variableNameBagian2} = $value;
Namun, disarankan untuk selalu menggunakan {}
, karena lebih mudah dibaca.
Meskipun tidak disarankan, Anda dapat menggabungkan perilaku ini:
$$$$$$$$JanganCobaIniDirumahAnakAnak = $value;
Penting untuk dicatat bahwa penggunaan variabel dinamis yang berlebihan dianggap sebagai praktik buruk oleh banyak pengembang. Karena tidak cocok untuk analisis statis oleh IDE modern, basis kode besar dengan banyak variabel dinamis (atau pemanggilan metode dinamis) dapat dengan cepat menjadi sulit untuk dipelihara.
Perbedaan antara PHP5 dan PHP7
Alasan lain untuk selalu menggunakan {}
atau ()
adalah bahwa PHP5 dan PHP7 memiliki cara yang sedikit berbeda dalam menangani variabel dinamis, yang menghasilkan hasil yang berbeda dalam beberapa kasus. Pada PHP7, variabel, properti, dan metode dinamis sekarang akan dievaluasi secara ketat dari kiri ke kanan, dibandingkan dengan campuran kasus khusus pada PHP5. Contoh di bawah ini menunjukkan bagaimana urutan evaluasi telah berubah.
Kasus 1: $$foo['bar']['baz']
Interpretasi PHP5: ${$foo['bar']['baz']}
Interpretasi PHP7: ($$foo)['bar']['baz']
Kasus 2: $foo->$bar['baz']
Interpretasi PHP5: $foo->{$bar['baz']}
Interpretasi PHP7: ($foo->$bar)['baz']
Kasus 3: $foo->$bar['baz']()
Interpretasi PHP5: $foo->{$bar['baz']}()
Interpretasi PHP7: ($foo->$bar)['baz']()
Kasus 4: Foo::$bar['baz']()
Interpretasi PHP5: Foo::{$bar['baz']}()
Interpretasi PHP7: (Foo::$bar)['baz']()