آبجکت‌ها در php با Identifier ارسال می‌شوند

عکس صرفا برای زیبایی پست است!
عکس صرفا برای زیبایی پست است!

پریروز داشتم این تیکه از کد کلاس TransformRequest لاراول رو می‌خوندم:

/**
* Clean the data in the parameter bag.
*
* @param  \Symfony\Component\HttpFoundation\ParameterBag  $bag
* @return void
*/
protected function cleanParameterBag(ParameterBag $bag)
{
    $bag->replace($this->cleanArray($bag->all()));
}

و کرمم گرفت که ببینم پی‌اچ‌پی چطور داره با رفرنس پاس میده آبجکت رو و اون زیر میرا چه خبره؟ نتیجه جالب بود برام! پی‌اچ‌پی اساسا آبجکت‌ها و ریسورس‌ها رو با رفرنس پاس نمیده، با آیدنتیفایر پاس میده :))).

رفرنس رو که همه‌مون می‌شناسیم، یه خونه داریم و کد پستی‌ش رو به هر کسی بدیم مستقیم میاد در خونه. این وسط این کد پستی رو به اصغر آقا نقاش بدیم همینه، آقا داریوش تخریب‌چی همینه و منم همینم! یعنی چه من بیام خونه‌تون مهمونی و چه اصغر آقا نقاش بیاد خونه رو رنگ بزنه به همون‌جایی دسترسی داریم که آقا داریوش بیاد کلا بمب بذاره زیرش و همه چی رو با خاک یکسان کنه. اممماااااا! اما ماجرای پاس دادن با آیدنتیفایر هم داستانش تقریبا به همین شکل‌ه، با این تفاوت که وقتی یکی بخواد خونه رو خراب کنه دیگه خونه رو خراب نمیکنه، فقط آدرس رو خراب میکنه! هوم؟

کلاس Home رو در نظر بگیریم که یه ویژگی به اسم color داره:

<?php
class Home
{
    public $color;
}

$home = new Home;
var_dump($home);

// /srv/http/test/homeForVirgool.php:9:
// class Home#1 (1) {
//  public $color =>
//    NULL
// }

اگه تابع asgharMr رو جوری تعریف کنیم که بیاد ویژگی رنگ رو سبز کنه و بعد مقدار رنگ رو چاپ کنیم، بالطبع انتظار داریم مقدار سبز باشه و هست:

function asgharMr(Home $h) : void
{
    $h->color = 'green';
}

asgharMr($home);
var_dump($home);

// /srv/http/test/homeForVirgool.php:17:
// class Home#1 (1) {
//   public $color =>
//    string(5) "green"
//  }

اما بعدش اگه تابع mrDariush رو جوری تعریف کنیم که کلاس رو بگیره و بجاش بذاره null، وقتی از کلاس میایم بیرون هیچی هیچ تغییری نکرده :دی.

function mrDariush(Home $h) : void
{
    $h = null;
}

mrDariush($home);
var_dump($home);

// /srv/http/test/homeForVirgool.php:25:
// class Home#1 (1) {
//   public $color =>
//    string(5) "green"
//  }

پ.ن یک: اینایی که تو ترم یک به شما میگن، باعث ذوق کردن‌های پیری ماست! :دی.
پ.ن دو: معرفی این پست در اکانت اینتساگرام تیم‌مون :دی. اکانت یسناتیم رو فالو کنید، قراره هیجان‌انگیز باشیم :دی.
پ.ن سه: کرمم رو نوشته بودم کرم‌م؛ قشنگ‌تره خب :(. ولی آقامون طه :/ شد و درستش کردم :س.