پرش به محتوا

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

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

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

1 دیدگاه دربارهٔ «ارسال با رفرنس در PHP»

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

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