ارسال با رفرنس در 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)

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

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

دیدگاه‌ها

یک پاسخ به “ارسال با رفرنس در PHP”

  1. علی محمدیان نیم‌رخ
    علی محمدیان

    خیلی کاربردی بود!

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *