در مطلب تعریف توابع در پی اچ پی بخش نخست در مورد نوشتن تابع ها و ویژگی با اعلان آشکارا گونه (نوع) آرگومان، صحبت کردیم. در این مطلب می خواهیم ویژگی ها دیگری از پی اچ پی ۷ را آموزش دهیم که در نوشتن تابع ها به کار گرفته می شوند. در این مطلب می خواهیم در مورد مفهوم Nullable Type در پی اچ پی ۷.۱ صحبت کنیم، پس اگر هم اکنون نسخه پی اچ پی ۷ دارید، باید آن را به نسخه ۷.۱ به بالا بروز رسانی کنید.

مفهوم Type Hinting در پی اچ پی

در مطلب تعریف توابع در پی اچ پی بخش نخست دیدید که در پی اچ پی ۷ به بالا می توانیم گونه آرگومان تابع را آشکارا مشخص کنیم. به تعیین آشکار گونه یک متغیر یا آرگومان تابع، Type Hinting گفته می شود. در کد زیر و به دنبال نمونه ای از مطلب تعریف توابع در پی اچ پی بخش نخست، تابعی به نام ()printArray تعریف شده که یک آرگومان از گونه Array را دریافت و سپس تمامی المان های آن را به همراه اندازه یا تعداد کاراکترهای هر المان نشان می دهد.

تابع های ()ucfirst و ()strlen

در کد بالا آشکار گونه آرگومان را array تعیین کرده ایم و سپس این آرایه ورودی و بوسیله حلقه foreach پیمایش شده و در هر گام یک عنصر از آرایه (آرگومان) names$ درون متغیر name$ ریخته شده و سپس نخست بوسیله تابع ()ucfirst، کاراکتر نخست هر رشته به حرف بزرگ تبدیل شده و سپس بوسیله تابع ()strlen اندازه یا تعداد کاراکترهای رشته بدست می آید. شکل زیر خروجی کد بالا و در فراخوانی تابع با آرایه name_of_friends$ را نشان می دهد.

تبدیل کاراکتر نخست هر رشته به حرف بزرگ بوسیله تابع ()ucfirst

تبدیل تمامی حرف های رشته به حرف کوچک بوسیله تابع ()strtolower

تبدیل تمامی حرف های رشته به حرف بزرگ بوسیله تابع ()strtoupper

بدست آوردن اندازه یا تعداد کاراکترهای یک رشته بوسیله تابع ()strlen

تعیین مقدار پیش فرض برای آرگومان ها

در کد زیر تابعی به نام sampleFunc نوشته ایم که در آرگومان از گونه رشته و ارایه دریافت می کند. آرگومان دارای مقدار پیش فرض null است، ولی لزومی ندارد که حتما به آن مقدار null دهیم بلکه می تواند مقدار پیش فرض آن یک آرایه معمولی یا انجمنی باشد. همین مورد برای دیگر گونه ها نیز می تواند به کار گرفته شود. توجه کنید که نخست باید آرگومان های بدون مقدار پیش فرض نوشته شوند و سپس به دنبال آنها تا پایان، می توان آرگومان های با مقدار پیش فرض را بنویسیم.

نوع Nullable در پی اچ پی ۷.۱ به بالا

در کدهای زیر دو تابع همسان نوشته شده اند که یکی مقدار پیشفرض null را دریافت کرده و در خط های ۱۰ و ۱۱ یکبار بدون مقدار و یکبار با رشته Amir فراخوانی شده است. در تابع دوم، پیش از تعیین گونه آرگومان، نشان پرسش (?) قرار گرفته است، به این معنی که این آرگومان می تواند یک رشته (فراخوانی خط ۱۴) یا یک مقدار null (فراخوانی خط ۱۳) را دریافت کند ولی به این معنی نیست که نباید هیچ مقداری را برای آن تعیین نکنیم. به عبارت دیگر اگر در فراخوانی تابع دوم، هیچ مقدار رشته، یا null به آن فرستاده نشود، پس یک خطا نشان داده می شود. به عبارت دیگر آرگومان تابع دوم یا می تواند مقدار رشته ای و یا مقدار null را دریافت کند.

تعیین گونه مقدار برگشتی تابع

گفتیم که تابع می تواند هیچ مقدار یا یک مقدار را برگشت دهد و برای تعیین آن باید عبارت return را به کار ببریم. در شکل زیر در کنار آموزش عبارت return ویژگی دیگری از پی اچ پی ۷.۱ به بالا، یعنی برگشت مقدار از گونه ویژه مانند int یا برگشت مقدار null را نیز آموزش داده ایم. در شکل زیر و پس از فهرست آرگومان (پس پرانتزهای باز و بسته)، یک کاراکتر : (دو نقطه روی هم) نوشته و سپس با یک فاصله، نخست نشان پرسش (?) و سپس نوع برگشتی نوشته شده است که این همانند تعریف آرگومان در تابع است.

نخست یک آرایه که شامل فهرست کاربران و سن آنها است، درون تابع تعریف شده است. کلیدهای آرایه انجمنی درون تابع، از گونه رشته و همان نام کاربران هستند. البته ممکن است که این فهرست نخست از پایگاه داده واکشی و سپس درون یک آرایه در تابع نگهداری شوند. سپس بوسیله تابع ()strtolower رشته وروی، به حرف های کوچک تبدیل می شود و سپس درون شرط if و بوسیله تابع ()array_key_exists بررسی می شود ورودی یا همان نام کاربر یا همان کلید آرایه، درون آرایه users$ وجود دارد یا نه؟ اگر وجود داشت، پس تابع ()array_key_exists مقدار true برگشت داده و از این رو بوسیله دستور return درون if، مقدار کلید، یعنی سن کاربر برگشت داده می شود، وگرنه کلید پیدا نشده، پس مقدار null برگشت داده می شود. در پایان دو بار و با ورودی های متفاوت بررسی می شود که آیا مقدار برگشتی تابع، مقدار null نباشد (توجه کنید از عملگر ==! کمک گرفته ایم) 

تابع های void در پی اچ پی

در زبان هایی مانند سی، سی پلاس پلاس، سی شارپ و جاوا، لازم است تا گونه برگشتی تابع را مشخص کنیم و اگر تابع چیزی برگشت نمی دهد، باید گونه آن به صورت void باشد. در پی اچ پی، نیازی به تعیین گونه برگشتی نیست، حتی با توجه به آنچه که در بخش بالایی گفته شد. یعنی می توان گونه برگشتی را تعیین نکرد ولی عبارت return مقداری را برگشت دهد. در پی اچ پی ۷.۱ به بالا، در کنار تعیین گونه به صورت بالا، تابع را به صورت void نوشت، به صوری که آشکار می گوییم تابع چیزی برگشت نمی دهد. همانند تابع زیر که دو مقدار عددی دریافت و سپس آنها را با یکدیگر جمع و نتیجه را نشان می دهد.

ولی اگر همانند کد زیر با اینکه آشکارا نوع تابع را void، یعنی بدون مقدار برگشتی تعیین کرده ایم، چون عبارت return را به کار برده ایم، پس همانند شکل دیگر خطایی نشان داده می شود، مبنی بر اینکه تابع مقداری را نباید برگشت دهد.