برای تغییر یک متغییر توسط function از کدام استفاده کنیم global یا call by reference

پرسیده شده
فعالیت 1490 روز پیش
دیده شده 685 بار
1

با سلام

با هر دو روش زیر میتوانیم یک متغییر که خارج از یک function نوشته شده است را تغییر داد.

کدام بهتر است؟ و چرا؟

global :

$y = 10;
    function test()
    {
        global $y;
        return ++$y;
    }
    echo test() . '<br>';
    echo $y;

call by reference

  $y = 10;
    function test(&$y)
    {
        global $y;
        return ++$y;
    }
    echo test($y) . '<br>';
    echo $y;

 

فایل پیوست

مرتضی ترکمن
مرتضی ترکمن

6 بهمن 98

3
حذف شده

سلام و عرض وقت بخیر... در حقیقت دو مفهومی که می فرمایید هرکدام در جای خودش مطرح می شود و قابل استفاده است.

 

زمانی که شما یک متغیر یا پارامتری از تابع رو از طریق علامت & در ابتدای اون به حالت by reference تبدیل می کنید، در حقیقت تغییراتی که در ادامه برنامه برای اون متغیر یا آرگومان رخ میده، به رفرنس اون متغیر یا آرگومان در تابع مورد نظر هم برمیگرده... یعنی شما هربار در طول برنامه اون متغیر و یا اون تابع رو صدا بزنید، تغییرات رو هم در متغیر مذکور و هم تابع مذکور خواهید دید. نکته مهمی که وجود داره در حالتی که شما by reference می کنید، پارامتر یا متغیر مورد نظر در تابع شما تعریف شده است.

 

اما نکته اصلی این هست شما در حالتی متغیر رو با کلمه کلیدی global درون یک تابع سراسری می کنید که معمولا اون متغیر فقط در بیرون تابع تعریف شده و درون تابع تعریفش نکردید. و شما در حقیقت قصد دارید این متغیر در طول برنامه هرجا ازش استفاده کردید، چه داخل تابع چه خارج اون مجاز باشه. 

 

در واقع همونطور که جناب سهرابیان فرمودن شما باید براساس هدفتون در طول برنامه از این دو روش استفاده کنید حتی اگر نتیجه کار یکسان باشه...

فایل پیوست

علیرضا ابراهیمی

توسط

علیرضا ابراهیمی

14 فروردین 99

4
حذف شده

سلام

من دقیقا به سر فصل مربوطه نرسیدم ولی پاسخ رو با توجه به دو زبان kotlin , swift عرض می کنم .

در حال حاضر طبق گفته های برنامه نویسان حرفه ای نظیر آقای سمیر رحمانی که در حال حاضر در شرکت udemy فعالیت دارند و قبلا در شرکت yellowman ایران فعالیت داشتند .

برنامه نویسی functional programming سبقت ویژه ای از برنامه نویسی به صورت کلاس بندی گرفته .

 

از نظر من اینکه کدام بهتر هست نداریم ؟‌

بلکه هر تابع بسته به کدی که شما در داخل آن نوشته اید مورد ارزیابی و استفاده قرار می گیرد و دلیل استفاده از functional programming به همین مقصد است . به طور مثال :‌ شما تابعی به صورت call by reference ایجاد کرده اید و بعد بنابه نیاز پروژه و در واقع اهداف پروژه اینکه شما در آینده تا چه میزان روی پروژه ی خود سرمایه گذاری کرده اید اقدام به ماژولار کردن سورس خود می کنید به دلیل prformance بالاتر و ماندگاری بالاتر .

به صورت کامل تر  -  شما تشخیص می دید که براساس کد نوشته شده بهتر از global استفاده کنید چون کار مشخصی رو انجام میده و اون رو کافی هست در کلاس های والد یا غیر والد فراخوانی کنید و فقط اسمش رو بیارید ولی با توجه به کدی که برحسب call by reference نوشته اید مطمئنا باید مقادیری از کلاس دیگر به داخل آن واریز شده تا کارکرد خود را داشته باشد .
بنابراین با توجه به کارکرد کد شما کارکرد آن مشخص می شود .

فایل پیوست

حسن سهرابیان

توسط

حسن سهرابیان

6 بهمن 98