توابع (Functions) در PHP

03 خرداد 1397
درسنامه درس 8 از سری آموزش PHP
php-season-4-1

خب دوستان عزیزم تا به اینجای کار مباحث اولیه و مقدماتی برای ساخت یک نرم افزار به زبان PHP را یاد گرفتید. از این فصل به بعد وارد مباحث پیشرفته تر و کاربردی تری خواهیم شد. در این فصل قصد داریم شما را با مفهومی تحت عنوان تابع (Funtcion) در PHP آشنا کنیم. توابع ابزاری هستند که به برنامه نویس کمک می کنند تا تعداد خطوط کمتری کدنویسی نماید و بتواند از یک دسته کد در هر نقطه ای که نیاز داشت به سرعت استفاده کند.

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

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

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

  • کاهش تعداد خطوط برنامه
  • کاهش خطای برنامه و کدها
  • کاهش زمان اجرای برنامه
  • دریافت آرگومان های ورودی برای انجام عملیات های بیشتر

زبان برنامه نویسی PHP بیش از هزاران تابع آماده (توکار) دارد که در قسمت های قبلی با تعدادی از آنها آشنا شدیم. مثلا تابع print که در زیر نحوه ی استفاده از آن را ملاحظه می کنید، برای نمایش متن در خروجی استفاده می شود. در واقع مشابه تابع echo‌ عمل می کند:

print("print is a pseudo-function");

در این مثال پرانتز ها بیانگر این هستند که تابع print یک ورودی از نوع متنی دریافت و آن را در خروجی نمایش می دهد.

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

phpinfo();

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

برخی دیگر از توابع توکار زبان PHP مثل تابع strrev یا str_repeat وجود دارند که برای کار با رشته ها می باشند:

<?php
	echo strrev(" .dlrow olleH"); // بر عکس نوشتن رشته ها
	echo str_repeat("Hip ", 2); // تکرار کردن رشته
	echo strtoupper("hooray!"); // بزرگ کردن تمام حروف رشته
?>

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

ساخت تابع در PHP

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

function function_name([parameter [, ...]])
{
    // Statements
}

یعنی ابتدا کلمه ی function را نوشته و سپس با توجه به نیاز نام تابع را که دلخواه است تعیین می کنید. داخل پرانتزها پارامترهایی که به صورت ورودی هستند نوشته و در نهایت داخل دو آکولاد { } مجموعه کدهایی که تابع اجرا خواهد کرد را، برنامه نویسی می کنید. بنابراین اصول ایجاد یک تابع در زبان PHP به صورت زیر خلاصه می شود:

  • قرار دادن کلمه function‌ در ابتدای جمله
  • درج نام تابع که باید با حروف یا علامت آندرلاین یا اعداد همراه با حروف نوشته شود
  • پرانتزها
  • قرار دادن یک یا چند پارامتر و جدا کردن آنها با کامای انگلیسی (,)
  • درج کدهایی که باید درون یک تابع اجرا شود

توجه به این نکته ضروری است که نام توابع به بزرگ و کوچک بودن حروف حساس است یعنی تابع PRINT با تابع print با تابع PRint کاملا متفاوت عمل می کند.

بازگشت یک مقدار توسط توابع در PHP

گاهی نیاز است که توابع یک سری محاسبات را انجام داده و مقدار نهایی را به عنوان خروجی در اختیار برنامه قرار دهند. در این حالت باید از دستور return درون تابع استفاده کرد. در مثال زیر فرض کنید یک تابع تعریف کرده ایم که نام و نام خانوادگی را به صورت مجزا دریافت می کند و سپس آنها را به همدیگر متصل کرده و مقدار نهایی (حاصل جمع نام و نام خانوادگی) را در خروجی نمایش می دهد.

<?php
	echo fullName("مسعود","صالحی");
	function fullName($firstName, $lastName)
	{
		return $firstName . " " . $lastName;
	}
?>

همانطور که ملاحظه می کنید در این مثال ابتدا یک تابع به نام fullName تعریف و با استفاده از علامت دات (.) مقدار آرگومان های ورودی firstName و lastName را به یکدیگر متصل و در نهایت به خروجی ارسال کرده ایم. برای فراخوانی تابع کافیست نام آن (fullName) را به همراه آرگومان موردنظر در برنامه ی خود بنویسیم.

بازگشت یک آرایه توسط تابع در PHP

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

<?php
	$userData = fullName("مسعود","صالحی", 28)
	echo $userData[0] . " " . $userData[2];
	function fullName($firstName, $lastName, $age)
	{
		return array($firstName, $lastName, $age);
	}
?>

بازگشت متغییرهای گلوبال (جهانی) توسط توابع در PHP

در فصل های قبلی در ارتباط با متغییرهای جهانی و داخلی صحبت کردیم و اینجا اشاره ای مختصر به آنها خواهیم داشت.

متغییرهای جهانی به متغییرهایی گفته می شود که خارج از یک تابع در دسترس هستند و در سایر توابع می توان از آنها استفاده کرد.

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

حال اگر بخواهیم یک متغییر جهانی را درون یک تابع استفاده و مقدار آن را تغییر دهیم باید از کلمه ی global‌ استفاده کنیم. به مثال زیر توجه کنید:

<?php
	$firstName = 'roxo';
	$lastName = 'academy';
	echo $firstName . " " . $lastName;
	fullName();
	echo $firstName . " " . $lastName;
	
	function fullName($firstName, $lastName)
	{
		global $firstName;
		$firstName = 'Masoud';
		global $lastName;
		$lastName = 'Salehi';
	}
?>

در این مثال ابتدا مقادیر firstName و lastName را برابر roxo و academy قرار داده ایم. سپس نام و نام خانوادگی را در خروجی نمایش می دهیم. در مرحله بعدی تابع fullName را اجرا کرده و مجددا خروجی را به صورت نام و نام خانوادگی به تصویر کشیده ایم. اما نکته ی قابل توجه این است که قبل از اجرای تابع نام و نام خانوادگی برابر roxo academy و پس از اعمال تابع برابر Masoud Salehi‌ است. به عبارت دیگر با استفاده از کلمه ی global درون تابع به متغییر خارج از تابع دسترسی پیدا کرده و مقدار آن را تغییر داده ایم.

استفاده از توابع در سایر فایل های PHP

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

دستور include

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

<?php
    include "library.php";
    // Your code goes here
?>

در مثال فوق کلیه ی توابع موجود در فایل library.php داخل فایل جاری در دسترس است.

دستور include_once

با استفاده از این دستور می توانید به سیستم بگویید که اگرچه چندین فایل مشابه library.php در فایل جاری فراخوانی شده است ولی شما فقط یکی از آنها را در نظر بگیر. مثلا فرض کنید یک فایل با نام functions.php درون فایل جاری فراخوانی شده است و درون همین functions.php یکبار دیگر فایل library.php فراخوانی گردیده است. حال اگر با دستور زیر فراخوانی توابع را انجام دهید خواهیم داشت:

<?php
    include "library.php";
    include "funtcions.php";
    // Your code goes here
?>

در این صورت با خطا مواجه خواهید شد چون درون فایل جاری در واقع دو بار فایل library.php فراخوانی گردیده است. (یکبار درون فایل functions.php و یکبار درون فایل جاری). بنابراین برای جلوگیری از این خطا از دستور زیر استفاده می کنیم:

<?php
    includeـonce "library.php";
    includeـonce "funtcions.php";
    // Your code goes here
?>

دستور require

این دستور مشابه دستور include عمل می کند با این تفاوت که در دستور include اگر تابع موردنظر یافت نشد یا فایل موجود نبود برنامه بدون هیچ خطایی به کار خود ادامه می دهد و تنها یک توصیه یا warning‌ ارائه می کند. درحالیکه دستور require ابتدا چک می کند که تابع وجود دارد یا خیر در صورتیکه وجود نداشت خطایی را نمایش می دهد. برای دقیق تر شدن برنامه بهتر است به جای include از دستور require استفاده کنید:

<?php
    require "library.php";
    // Your code goes here
?>

دستور require_once

این دستور نیز مشابه دستور include_once است با تفاوتی که در نمایش خطاها دارد. بنابراین بهترین حالت برای فراخوانی یک تابع استفاده از دستور require_once است:

<?php
    requireـonce "library.php";
    requireـonce "funtcions.php";
    // Your code goes here
?>

بسیار عالی! مجددا تبریک عرض می کنیم در این بخش شما توانستید با مفهوم توابع و نحوه ی پیاده سازی آنها به صورت کامل آشنا شده و با استفاده از دستورات require و include‌ آنها را در پروژه خود فراخوانی کنید. در بخش بعدی به مفاهیم Object ها یا اشیاء در زبان برنامه نویسی PHP‌ می پردازیم.

جهت دریافت آموزش ویدیویی صفر تا صد PHP به همراه ساخت CMS مشابه وردپرس روی اینجا یا تصویر زیر کلیک کنید.

تمام فصل‌های سری ترتیبی که روکسو برای مطالعه‌ی دروس سری آموزش PHP توصیه می‌کند:
نویسنده شوید

دیدگاه‌های شما

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.