23
تشکر

PHP 7 – تعریف نوع بازگشتی

PHP 7

PHP 7

معمولاً تمام برنامه نویسان آشنایی، حداقل جزئی با زبان C یا موارد مشابه دارند. در این زبان‌ها شما باید مقدار بازگشتی تابع را مشخص کنید و تابع نیز باید دقیقاً مقداری از همان نوع را بازگشت بدهد، در غیر اینصورت با خطای زمان اجرا مواجه خواهید شد.

حالا شاید تعجب کنید که این ویژگی نیز به PHP 7 اضافه شده است، یعنی شما میتوانید نوع مقادیر توابع یا متدها را مشخص کنید، که در اینصورت موظف می‌شوید که مقداری از همان نوع را برگردانید.
از طرفی به یاد داشته باشید که این ویژگی کاملاً اختیاری است و شما مجبور به استفاده نیستید، یعنی هنوز هم میتوانید در یک تابع مقادیر مختلفی را بازگشت بدهید.

Return Type Declarations

استفاده از این ویژگی بسیار راحت است. کافیست بعد از معرفی نام تابع یا متد با گذاشتن یک دو نقطه نوع مقدار بازگشتی تابع را مشخص کنید.

برای مثال تابع زیر تنها باید مقداری از نوع آرایه را بازگشت بدهد.

نوع مقادیری که می‌توانید برای مقدار بازگشتی تعیین کنید شامل array, int, float, bool, string, callable, closure و یا نام یک interface یا یک کلاس می‌تواند باشد.
توجه داشته باشید که برای مقادیر بازگشتی int, float, bool و string، پی‌اچ‌پی تا جایی که بتواند، از گزارش خطا جلوگیری میکند و خودش عملیات type casting را انجام می‌دهد.

برای مثال در تابع زیر تعریف شده است که حتماً باید مقدار int برگرداند، اما همانطور که می‌بینید مقدار بازگشتی از نوع float است، ولی این باعث خطا نمی‌شود زیرا خود PHP مقدار float را به int تبدیل میکند.

اما اینکار در صورتی انجام می‌شود که حالت strict_types را فعال نکرده باشید.

ذر حالت strict_types مقادیر بازگشتی باید دقیقا با یکدیگر هماهنگ باشند. برای مثال تابع زیر دچار خطا می‌شود.

مثال زیر را مشاهده کنید. در این مثال تابع باید مقداری از نوع کلاس DateTime را برگرداند، اما چون مقدار null را برگشت می‌دهد، باعث بروز خطا می‌شود.

خطاهایی که تا به حال از آن‌ها صحبت کردیم، خطا‌های از نوع E_RECOVERABLE_ERROR هستند.
شما همچنین می‌توانید نوع مقدار بازگشتی متد‌ها را درون interface تعریف کنید. در این صورت کلاس‌هایی که آن interface را implement می‌کنند حتماً باید مقداری از نوع مشخص شده در interface را برگشت دهند، در غیر اینصورت خطایی از نوع E_COMPILE_ERROR برگشت داده می‌شود.

توجه‌ کنید که برای متدهای constructors, destructors و clone نمی‌توانید مقدار بازگشتی را مشخص کنید.

همچنین اگر می‌خواهید تابع شما چندین نوع از مقادیر را بازگشت دهد، کافیست به همان روال گذشته تابع را بنویسید.

منابع: PHP Manual, PHP RFC

این مطلب از سری مطالب، PHP 7 است
  • سید امیر می‌گه:

    آقای محسن شفیعی خیلی خسته نباشید.شما هم با دانش هستید و هم با اخلاق.

    من مدتهای خیلی قبل یک جسارتکی در نظرات داشتم (که میشه به دلیل خستگی اخر نصفه شد و فشار روحی گذشت) به شما دوست عزیز و با تجربه داشتم.

    تا امروز که موردش پیش نیومده بود و اون موضوع هم از خاطر من رفته بود و چون اون مطلب نظراتش بسته شده بود و ایمیل شخصی شما رو نداشتم دیگه همینجا پوزشم رو عرض میکنم.

    انشالله که هموراه پیشتاز در عرصه علم و معنویت باشید.

    یا حق…

  • وحید می‌گه:

    ببخشید منظورم متد clone() بود.

    • محسن شفیعی می‌گه:

      با دستور clone میتونید از یک شیٔ یک کپی بگیرید. حالا اگر در کلاس متد __clone رو نوشته باشید، کدهای درون آن زمان clone کردن شیٔ اجرا میشن.

      اینکار برای این مورد استفاده قرار میگیره چون همیشه برنامه نویس نمیخواد شیٔ به صورت کامل کپی بشه بلکه دوست داره تغییراتی قبل از کپی انجام بشه.

      http://php.net/manual/en/language.oop5.cloning.php

  • وحید می‌گه:

    ممنون آقا محسن.
    به همت شما آهسته آهسته با PHP7 هم آشنا میشیم.
    میشه در مورد تابع down توضح بدید؟
    لطفا اگه مطلب خوب در مورد لاراول دارید منتشر کنید. حتی اگه فقط متن و توضیح هم باشه مطمئنا کاربردی خواهد بود. (مثلا از روش هایی که استفاده می کنید, تجربیات کار با این فریمورک و … )
    ممون♥


  • نظرات این مطلب بسته است.