آموزش تابع در PHP و ترفندهای کار با Function

توابع در PHP کاربرهای فراوانی دارند. به کمک تابع‌های مختلف می‌توانیم کارهای خارق‌العاده‌ای را بدون نیاز به درک پیچیدگی آن‌ها انجام دهیم. در این آموزش علاوه بر آشنایی با ساختار تابع در php با نحوه تعریف توابع نیز آشنا می‌شویم.

زبان برنامه‌نویسی PHP بیش از 1,000 تابع از پیش تعریف شده (Built-in) دارد که با صدا زدن آن‌ها کارهای بزرگی انجام می‌شود.

مثلاً فرض کنید برای خواندن فایل در PHP فقط کافی است تابع fopen() را صدا زده و نام فایل را به آن بدهیم! بدون آنکه نیاز باشد خودمان را درگیر سختی‌های کار با فایل کنیم!

در این جلسه از آموزش با چگونگی استفاده از توابع در زبان php آشنا می‌شویم. ابتدا انواع آن را بررسی کرده و سپس شروع به تعریف توابع دلخواه می‌کنیم. همچنین نکاتی برای حرفه‌ای‌تر شدن را با هم مرور خواهیم کرد.

انواع تابع در PHP

تقریباً در تمام زبان‌های برنامه‌نویسی، دو نوع تابع وجود دارد:

  1. توابع داخلی (Built-in)
  2. توابع تعریف شده توسط کاربر (User Defined)

تابع داخلی همان هزاران توابعی هست که به طور پیش‌فرض روی کامپایلر PHP تعریف شده است. در هنگام برنامه‌نویسی، می‌توانیم برای اهداف مختلف از آن‌ها استفاده کنیم. برای مثال، برای کار با زمان در PHP از تابع معروف time() یا getdate() استفاده می‌کنیم.

اما اگر بخواهیم کار خاصی انجام دهیم، باید تابع خودمان را بنویسیم. این کار بسیار ساده است! ابتدا بهتر است ساختار یک تابع را درک کنیم:

تابع PHP چیست ؟

فرض کنید قطعه کدی در برنامه خود دارید که لازم است آن را در قسمت‌های مختلف تکرار کنید. به جای تکرار آن قطعه از کد، بهتر است آن را به صورت یک تابع تعریف کرده و هر بار فقط تابع را فراخوانی کنیم.

ساختار تابع در زبان PHP به صورت زیر است:

function Name() {
    //Some Code to be Executed;
}

ساختار تابع با کلمه کلیدی function، شروع می‌شود. سپس یک نام برای آن تعریف شده و محدوده کدهای آن به کمک براکت باز و بسته ({ و }) مشخص می‌شود.

در انتخاب نام تابع دقت داشته باشید که:

  • نام شامل حروف انگلیسی، اعداد و کاراکتر زیر خط (underline) باشد.
  • اولین کاراکتر در نام تابع باید حرف انگلیسی یا _ باشد.
  • نام مورد استفاده در سراسر کدهای آن صفحه برای تابع دیگری د نظر گرفته نشده باشد.
  • حروف کوچک یا بزرگ در نام توابع اهمیتی ندارد. (غیر حساس یا Case-Insensitive)

برای تعریف ورودی، از فضای درون پرانتزهای جلوی نام استفاده می‌کنیم. این مورد در بخش بعدی بررسی می‌شود.

بهتر است نامی برای تابع یا آرگومان‌های ورودی انتخاب کنید که علاوه بر خوانا بودن، هدف و کاری که انجام می‌دهند را مشخص کند.

تعریف تابع در PHP

حال که با ساختار کلی آشنا شدیم، بیایید تا یک تابع ساده بنویسیم. تابع زیر که نام آن sayHello() است، معروف‌ترین عبارت در برنامه نویسی را در خروجی چاپ می‌کند.

<?php
function sayHello() {
    echo "Hello world!";
}

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

البته پیشنهاد می‌کنم برای افزایش خوانایی کد، توابع بسیار طولانی (در حد چند صد خط) را به چند تابع تقسیم کنید.

برای صدا زدن یا فراخوانی تابعی که تعریف کردیم، باید نام آن را به همراه پرانتزهای جلوی آن بنویسیم:

sayHello();

نتیجه فراخوانی تابع، چاپ شدن عبارت Hello World! در خروجی است.

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

<?php
function addNumbers($i, $j, $k) {
    echo $i + $j + $k;
}

addNumbers(17, 26, 21);
آموزش کوکی در PHP و ۳ ترفند کار با cookie های پی‌اچ‌پی

آموزش کوکی در PHP و ۳ ترفند کار با cookie های پی‌اچ‌پی

در پروژه‌های بزرگ، معمولاً مجموعه‌ای از توابع پر کاربرد را تعریف می‌کنند که در بخش‌های مختلف سایت استفاده می‌شود. این کار معمولاً با فراخوانی فایل‌ها در هم استفاده می‌شود. یعنی توابع را در یک فایل نوشته، سپس با include و require در PHP آن‌ها را در فایل‌های دیگر وارد می‌کنیم.

ترفندهای کار با توابع PHP

در کار با تابع PHP معمولاً دو کار اساسی انجام می‌دهیم:

  1. تعریف و گرفتن ورودی در هنگام فراخوانی تابع
  2. خروجی دادن تابع

همچنین ممکن است گاهی لازم شود تا آرگومان‌های ورودی را به صورت اختیاری تعریف کنیم. در این بخش با این سه مبحث آشنا خواهیم شد.

گرفتن ورودی در تابع

تعریف ورودی برای تابع مشابه تعریف متغیر در PHP است. برای این منظور کافی است یک نام متغیر برای آرگومان ورودی خود در نظر گرفته و در ابتدای آن علامت دلار ($) قرار دهیم.

در محدوده کدهای تابع، هر کجا که به آن مقدار نیاز داشتیم، مشابه استفاده از متغیرها، به راحتی از آن استفاده می‌کنیم.

همان تابع sayHello() را به یاد بیاورید. می‌خواهیم یک مقدار ورودی برای آن تعریف کنیم تا نام فرد را گرفته و به او سلام دهد.

برای این کار به صورت زیر عمل می‌کنیم:

<?php
function sayHello($name) {
    echo "Hello " . $name . "!";
}

در خط دوم، برای تابع خود یک آرگومان ورودی به نام $name تعریف کردیم. سپس در خط سوم از آن برای اعلام سلام از آن استفاده شده است.

اگر می‌خواهید ترفندهای حرفه‌ای کار با رشته در PHP را بیاموزید، به آموزش رشته در PHP مراجعه کنید.

برای استفاده از این تابع، لازم است تا هنگام فراخوانی آن، مقدار ورودی مورد نظر را به تابع بدهیم.

sayHello("Omid"); // Hello Omid!
sayHello("Sara"); // Hello Sara!

مقادیری که در کامنت‌های جلوی هر خط آورده شده، خروجی تابع در برنامه خواهد بود.

تعریف خروجی برای تابع در PHP

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

فرض کنید در حال نوشتن فایل در PHP هستید. ابتدا باید به کمک تابع داخلی fopen() فایل مورد نظر را ایجاد یا باز کرده و شئ مربوط به آن را نگه داریم.

$file = fopen("SabzDanesh.txt", "w");

پس از اجرای تابع، یک مقدار بازگشتی توسط fopen() به ما داده شده که آن را درون متغیر $file برای انجام عملیات‌های بعدی می‌ریزم.

برای تعریف مقدار بازگشتی (Returning value) در تابع، از کلمه کلیدی return استفاده می‌کنیم.

وقتی اجرای کدهای تابع به return برسد، مقدار جلوی آن به عنوان خروجی بازگردانده شده و از تابع خارج می‌شویم.

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

تابع addNumbers() را به گونه‌ای می‌نویسیم که نتیجه جمع را به عنوان خروجی به ما بدهد:

function addNumbers($i, $j, $k) {
    return $i + $j + $k;
}

برای نمایش نتیجه در خروجی، باید مقدار برگشتی تابع را چاپ کنیم. به صورت زیر:

echo addNumbers(17, 23, 37);

آرگومان ورودی پیش‌فرض

اگر تابعی دارای یک آرگومان ورودی معمولی باشد و در هنگام فراخوانی، آن مقدار را تعریف نکنیم، با خطای Uncaught ArgumentCountError مواجه خواهیم شد.

خطای Argument Count Error وارد نکردن آرگومان تابع
خطای Argument Count Error وارد نکردن آرگومان تابع

گاهی اوقات لازم است برای برخی از آرگومان‌های ورودی، یک مقدار پیش‌فرض در نظر بگیرم. در این صورت، اگر آرگومان مورد نظر در هنگام فراخوانی تعریف نشد، از مقدار پیش‌فرض خودمان استفاده می‌شود.

برای تعریف مقدار پیش‌فرض برای ورودی‌های تابع، کافی است در هنگام تعریف پارامتر، مقدار مورد نظر را نیز به آن انتساب دهیم. به مثال زیر دقت کنید:

<?php
function addNumbers($i, $j, $k=0) {
    echo $i + $j + $k;
}
addNumbers(17, 21, 29); // 67
addNumbers(17, 21);     // 38
?>

در این جا برای آرگومان سوم ($k) مقدار پیش‌فرض 0 را در نظر گرفته‌ایم.

همان‌طور که می‌بینید در آخرین فراخوانی تابع addNumbers() فقط دو آرگومان اول به عنوان ورودی داده شده است؛ اما تابع بدون هیچ خطایی اجرا می‌شود.

تعریف تابع با تعداد آرگومان نامشخص در PHP

تعریف تابع با تعداد آرگومان نامشخص در PHP

جمع‌بندی: تابع در PHP

در این آموزش با توابع در پی‌اچ‌پی آشنا شدیم. زبان php بیش از هزار تابع داخلی دارد که در هر برنامه و هر زمانی که خواستیم می‌توانیم از آن‌ها استفاده کنیم.

علاوه بر آن‌ها، خودمان می‌توانیم توابع دلخواهی با کلمه کلیدی function تعریف کنیم. هر تابع می‌تواند بدون ورودی بوده یا چند ورودی داشته باشد. یاد گرفتیم که می‌توان برای این ورودی‌ها مقدار پیش‌فرض نیز تعیین کرد.

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

در این منبع انگلیسی چند مثال بیشتر از توابع PHP وجود دارد که می‌توانید ببینید.

این آموزش بخشی از یک آموزش جامع و قدم به قدم در سبز دانش است: دوره رایگان آموزش PHP