قویترین بخش زبان php مربوط به توابع آن است.
زبان php بیش از ۱۰۰۰ تابع درونی دارد و شما میتوانید توابع خود را تعریف کنید.
توابع همانند کارخانه ای هستند که دارای یک ورودی جهت دریافت داده،تحلیل و اجرا بر روی ورودی و در نهایت خروجی مقدار نهایی است.
یک تابع میتواند هم ورودی و هم خروجی نداشته باشد بلکه مجموعه ای از دستورات را اجرا کند.
توابع درونی php
زبان php بیش از ۱۰۰۰ تابع درونی دارد. این توابع بصورت مستقیم فراخوانی میشوند. از این توابع برای انجام وظایف خاص استفاده میشود.
توابع تعریف شده توسط کاربر
در کنار توابع تعریف شده توسط زبان php این امکان وجود دارد که توابع خود را تعریف کنید.
توابع تعریف شده کاربر
در کنار توابع تعریف شده توسط زبان php این امکان وجود دارد که توابع خود را تعریف کنید.
ویژگی های توابع
این توابع یکبار نوشته شده و چندین بار مورد استفاده قرار میگیرند.
توابع با لود صفحه اجرا نمیشوند بلکه باید آنها را فراخوانی کنیم.
نحوه تعریف توابع توسط خودمان
برای تعریف تابع باید ابتدا واژه function را بعنوان کلمه کلیدی قرار دهیم سپس نام تابع خود را براساس قوانین نام گذاری تعریف کرده و پرانتز باز و بسته را برای دریافت تعیین کردن آرگومان ها قرار میدهیم.
بعد از پرانتز آکلاد باز و بسته را قرار داده و دستورات خود را درون تابع می نویسیم.
نحوه نوشتن:
1 2 3 |
function functionName() { code to be executed; } |
نام تابع چه در تعریف چه در استفاده حساس به نوع حروف نیست و باید حتما یا با _ یا حروف شروع شود. نام تابع بیانگر نوع عملکردی است که قرار است انجام دهد.
در مثال زیر تابعی را به نام writeMsg تعریف کرده ایم که مقدار hello amir javanmir را برگشت میدهد.
برای فراخوانی و اجرای تابع باید نام تابع را بهمراه پرانتز باز و بسته قرار دهید.
مثال:
1 2 3 4 5 6 7 8 |
<?php function writeMsg() { echo "Hello world!"; } writeMsg(); ?> //hello amir javanmir |
آرگومان ها در توابع
آرگومان ها در توابع نقش متغیر را دارند و آنها حاوی مقادیری هستند که میتوانند از بیرون تابع به درون تابع ارسال شوند.
محل قرارگیری این آرگومان ها درون پرانتز تابع است.
تعداد آرگومان ها محدود نیست و شما میتوانید به هر تعداد که نیاز دارید آرگومان تعریف کنید. هر آرگومان با کاما , از دیگری جدا میشود.
در مثال زیر تابع موردنظر دارای آرگومانی به نام fname$ است که در هنگام فراخوانی مقداردهی میشود.
در هر بار فراخوانی تابع می توانیم مقدار مختلفی را بعنوان پارامتر ارسال کنیم.
مثال:
1 2 3 4 5 6 7 8 9 10 11 12 |
<?php function familyName($fname) { echo "$fname javanmir.<br>"; } familyName("amir"); familyName("ali"); ?> /* amir javanmir ali javanmir */ |
تابعی با دو آرگومان
مثال:
1 2 3 4 5 6 7 8 |
<?php function familyName($fname, $year) { echo "$fname javanmir. Born in $year <br>"; } familyName("amir", "1993"); ?> //amir javanmir. Born in 1993 |
نوع داده مقادیر در php آزاد و لحظه ای میباشد
نکته ای که در هنگام مقداردهی به آرگومان ها بعنوان متغیر وجود دارد این است که نوع داده ها را ما اصلا مشخص نکرده ایم. بلکه بسته به مقداری که تخصیص داده شده است نوع داده تعیین میشود و ممکن است در طول اجرای کدها تغییر پیدا کند.
نوع داده در آرگومان ها حالت اجباری و سختگیرانه ندارد. بنابراین شما میتوانید یک مقدار رشته ای را به یک عدد بدون هیچ خطایی تخصیص دهید.
در نسخه ۷ زبان php نوع داده برای آرگومان ها ایجاد گردید. این تعیین نوع داده برای آرگومان ها باعث میشود انتظاری که ما از مقادیر آنها داریم را مشاهده کنیم.
همچنین با اضافه کردن حالت strict در ابتدای خط اسکریپت خود، تابع خود را ملزم به بازگشت خطای fatal error در هنگام ارسال مقدار نامناسب درون تابع میکنیم.
نوع داده آرگومان ها را قبل از آنها و توسط مقادیر زیر مشخص میکنیم:
- int
- float
- string
- array
- object
- boolean
مثال زیر حالتی است که مقادیر خود را در حالت عادی به درون تابع ارسال کرده ایم و خطایی را دریافت نمیکنیم. مقدار اول عدد است اما مقدار دوم رشته است و باید نوعش عدد می بود اما چون دستور حالت سخت گیرانه تعیین نشده است خطایی وجود ندارد.
مثال:
1 2 3 4 5 6 7 |
<?php function addNumbers(int $a, int $b) { return $a + $b; } echo addNumbers(5, "5 days"); ?> //10 days |
برای ایجاد حالت سخت گیرانه باید دستور زیر را در ابتدای اسکریپت خود مشخص کنید.
مثال:
1 |
declare(strict_types=1); |
نمونه مثال قبلی در حالت سخت گیرانه:
1 2 3 4 5 6 7 8 |
<?php declare(syrict_types=1); function addNumbers(int $a, int $b) { return $a + $b; } echo addNumbers(5, "5 days"); ?> //fatal error |
مقدار پیش فرض برای آرگومان ها در php
گاهی اوقات آرگومان تابعی که ایجاد کرده ایم،ارسالش در هنگام فراخوانی تابع ضروری نیست بنابراین میتوانیم آن را در هنگام تعریف اختیاری کنیم به همین منظور آن را درون پرانتز برابر با همان نوع داده ای که قرار است ارسال شود بصورت مقدار خالی قرار می دهیم.
مثال:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
<?php declare(strict_types=1); function setHeight(int $minheight = 50) { echo "The height is : $minheight <br>"; } setHeight(350); setHeight(); setHeight(135); setHeight(80); ?> /* The height is : 350 The height is : 50 The height is : 135 The height is : 80 */ |
بازگشت مقدار توسط تابع
یک تابع قادر است هم در نهایت مقدار نهایی را چاپ یا نمایش دهد یا یک مقدار را برگشت یا return کند.
معمولا از حالت return برای توابع استفاده میشود. بعد از دستور return هر دستور دیگر قابل اجرا نخواهد بود.
مثال:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
<?php declare(strict_types=1); function sum(int $x, int $y) { $z = $x + $y; return $z; } echo "5 + 10 = " . sum(5, 10) . "<br>"; echo "7 + 13 = " . sum(7, 13) . "<br>"; echo "2 + 4 = " . sum(2, 4); ?> /* 5 + 10 = 15 7 + 13 = 20 2 + 4 = 6 */ |
تعیین نوع داده مقدار بازگشتی
در نسخه ۷ زبان php این امکان وجود دارد در حالت سختگیرانه یا strict نوع مقدار بازگشتی تابع را مشخص کنیم.
برای اضافه کردن نوع داده مقدار بازگشتی باید بعد از پرانتز یک دو نقطه : قرار داده و نه داده را قبل از } قرار دهیم.
مثال:
1 2 3 4 5 6 7 8 |
<?php declare(strict_types=1); function addNumbers(float $a, float $b) : float { return $a + $b; } echo addNumbers(1.2, 5.2); ?> //6.4 |
حتی میتوانید نوع داده متفاوت را در هنگام خروجی مشخص کنید. در این حالت باید هنگام بازگشت مقدار نیز نوع داده را تغییر دهید در غیر اینصورت با خطا مواجه خواهید شد.
مثال:
1 2 3 4 5 6 7 8 |
<?php declare(strict_types=1); function addNumbers(float $a, float $b) : int { return (int)($a + $b); } echo addNumbers(1.2, 5.2); ?> //6 |
1 2 3 4 5 6 7 8 |
<?php declare(strict_types=1); function addNumbers(float $a, float $b) : int { return $a + $b; } echo addNumbers(1.2, 5.2); ?> //Error |
ارسال آرگومان توسط متغیر و اتصال مقدار نهایی تابع به همان متغیر (reference arguments)
آرگومان هایی که برای توابع تعریف میشوند در هنگام فراخوانی تابع، توسط مقادیر از طریق پارامترها مقداردهی میشوند. در این حالت یک کپی از مقدار درون تابع مورد استفاده قرار میگیرد.
همچنین این امکان وجود دارد پارامترها توسط متغیرها مقداردهی شوند. در حالت عادی در صورت تغییر مقدار متغیر درون تابع مقدار متغیر در بیرون تابع تغییر پیدا نمیکند. برای اینکه مقادیر بیرون و درون تابع یکی باشند بهتر است یک reference بین آنها ایجاد شود.
برای ایجاد reference بین متغیر و پارامتر از & در قبل از نام آرگومان استفاده میکنیم.
مثال:
1 2 3 4 5 6 7 8 9 10 |
<?php function add_five(&$value) { $value += 5; } $num = 2; add_five($num); echo $num; ?> //7 |