برچسب: اموزش پی اچ پی

  • ارسال با رفرنس در PHP

    ارسال با رفرنس در PHP

    توی پی اچ پی بجز اشیا بقیه ی مقادیر پریمیتیو هستند و رفرنس تایپ نیستن. ینی شما مثلا وقتی یه آرایه رو به یک آرایه دیگه assign میکنید اون دو تا آرایه جاهای جدا از حافظه رو اشغال میکنن و طبیعی هست که تغییر یکی روی اونیکی اثری نذاره. یه مثال ساده:

    <?php
    
    $numbers = [1, 2, 3];
    
    $anothers = $numbers;
    
    $anothers[1] = 5;
    
    var_dump($numbers);
    
    // Output:
    
    array(3) {
      [۰]=>
      int(1)
      [۱]=>
      int(2)
      [۲]=>
      int(3)
    }

    اشیا اینطور نیستن و میشه توی این مثال راحتتر منظورم رو برداشت کرد:

    <?php
    
    class Test {
        public $name;
    }
    
    $t1 = new Test();
    $t1->name = "Test 1";
    
    $t2 = $t1;
    $t2->name = "Test 2";
    
    var_dump($t1->name);
    
    // Output:
    string(6) "Test 2"

    برای اینکه اشیا رو ازشون کپی بگیریم خیلی راحت ازش clone میگیریم:

    <?php
    
    class Test {
        public $name;
    }
    
    $t1 = new Test();
    $t1->name = "Test 1";
    
    $t2 = clone $t1;
    $t2->name = "Test 2";
    
    var_dump($t1->name);
    
    // Output:
    string(6) "Test 1"

    پریمیتیو ها رو هم میشه مثل رفرنس اساین کرد به یه علامت & قبل از متغیری که میخواد اساین بشه:

    $a = 2;
    $b = &$a;
    $b++;
    var_dump($a);
    
    // Output:
    int(3)

    و نهایتا اگه بخوایم چیزی که primitive هست رو بصورت رفرنس ارسال کنیم یه علامت & قبل از اسمش میذاریم. به این صورت:

    $x = 3;
    
    function change(&$x) {
        $x++;
    }
    
    change($x);
    
    var_dump($x);
    
    // Output:
    
    int(4)

    توی یه سری زبون ها نیازه که جایی که کال میکنیم هم علامت رو بذاریم ولی توی پی اچ پی فقط توی ورودی تابع بنویسیم کافیه.

    امیدوارم به دردتون بخوره.