Reference

មេរៀន​នេះ មាន​ជា​វីដេអូ ។

មេរៀន​ជា​វីដេអូ

Reference យើង​អាច​និយាយ​ឲ្យ​ងាយ​យល់​ថា ការ​ចាប់​យក​តម្លៃ​ដដែល ដោយ​ប្រើ​អញ្ញាត​មួយ​ផ្សេង​ទៀត ។ ដើម្បី​ចាប់​យក Reference នៃ​អញ្ញាត​ណាមួយ ត្រូវ​សរសេរ & នៅ​ពី​មុខ​អញ្ញាត​នោះ ។

<?php
/* ធម្មតា */
$a = 10;
$b = $a;
$a = 20;
echo $a . "<br>";    // បង្ហាញ 20
echo $b . "<br>";    // បង្ហាញ 10
echo "<hr>";

/* Reference */
$a = 10;
$b = &$a;
$a = 20;
echo $a . "<br>";    // បង្ហាញ 20
echo $b . "<br>";    // បង្ហាញ 20
echo "<hr>";

// ប្ដូរ Reference
$c = 30;
$b = &$c;
$b = 100;
echo $a . "<br>";    // បង្ហាញ 20
echo $b . "<br>";    // បង្ហាញ 100
echo $c . "<br>";    // បង្ហាញ 100
?>

បម្រើបម្រាស់ Reference នៅ​លើ foreach

<pre>
<?php
// យើង​មាន array ដូច​ខាងក្រោម ៖
$arr = [0, 11, 22, 33];

// ប្ដូរ​តម្លៃ​នៃ​របស់​នីមួយៗ​នៃ array ខាង​លើ ទៅ​ជា ២ ដង​នៃ​តម្លៃ​បច្ចុប្បន្ន ។
// តើ​យើង​អាច​ធ្វើ​បែប​នេះ​បាន​ទេ ?

foreach ($arr as $value) {
    $value = $value*2;
}

print_r($arr);
?>
</pre>

វិធី​ខាងលើ គឺ​មិន​ជោគជ័យ​ទេ ព្រោះ​ $value ចាប់តែ​តម្លៃ​នីមួយៗ​នៃ $arr ពេល​យើង​ផ្លាស់​ប្ដូរ​តម្លៃ​នៃ $value យើង​មិន​បាន​ផ្លាស់​ប្ដូរ​តម្លៃ​នៃ​ធាតុ​នីមួយៗ​នៃ $arr ទេ ។

ដើម្បី​សម្រេច​បំណង​ខាងលើ មាន ២ វិធី​ដែល​យើង​អាច​ប្រើ​បាន ។

វិធី​ធម្មតា

<pre>
<?php
$arr = [0, 11, 22, 33];

foreach ($arr as $key => $value)
    $arr[$key] = $value*2;

print_r($arr);
?>
</pre>

វិធី​ដែល​ប្រើ Reference

<pre>
<?php
$arr = [0, 11, 22, 33];

foreach ($arr as &$value)
    $value = $value*2;

print_r($arr);
?>
</pre>

ប៉ុន្តែ មាន​បញ្ហា​មួយ​ចំនួន អាច​នឹង​កើត​ឡើង នៅ​ពេល​ដែល​យើងប្រើ​វីធី​ដែល​ប្រើ Reference ។

<pre>
<?php
$arr = [0, 11, 22, 33];

foreach ($arr as &$value)
    $value = $value*2;

print_r($arr);

foreach ($arr as $value) {
    echo $arr[3] . "<br>";
}
?>
</pre>

បញ្ហា​កើត​ឡើង ដោយ​សារតែ ៖ នៅ foreach ទី​ពីរ តម្លៃ​នៃ $value ប្ដូរ​ទៅតាម​ជុំ​នីមួយៗ ។ កាលណា​វា​ប្ដូរ​តម្លៃ​នៃ $value វា​ដូច​ជា​ប្ដូរ​តម្លៃ​នៃ $arr[3] ដូច្នេះ​ដែរ ។ ដោយ​សារ​តែ នៅ​ពេល​ដែល​ចប់ foreach ទីមួយ $value មាន​តម្លៃ &$arr[3] ។

ដើម្បី​ដោះស្រាយ​បញ្ហាខាងលើ យើង​ប្រើ unset() ដើម្បី​លុប​អញ្ញាត $value បន្ទាប់ពី foreach ទី​មួយ ។ (មើល​ខាងក្រោម)

<pre>
<?php
$arr = [0, 11, 22, 33];

foreach ($arr as &$value)
    $value = $value*2;

print_r($arr);

unset($value);
foreach ($arr as $value) {
    echo $arr[3] . "<br>";
}
?>
</pre>
ទំព៏រ​ដើម កូដ វីដេអូ បញ្ជី ចែករំលែក បោះពុម្ភ ឡើង​លើ Facebook Google Plus Twitter មតិ ឧបត្ថម្ភ ទំនាក់ទំនង អាជ្ញាប័ណ្ឌ សិទ្ធ​អ្នក​និពន្ធ បិទ Khode Academy មុន បន្ទាប់ ប្ដូរ​ម៉ូត