در بخش اول توابع PHP نحوه با مزیت های توابع, تعریف تابع, پارامترها و برگشت دادن مقادیر آشنا شدیم. در بخش آخر قصد داریم مباحث باقی مانده از توابع php در سری آموزش PHP را به شما یاد بدیم.
پاس دادن آرگومان ها به تابع با رفرنس
در PHP دو راه برای پاس دادن آرگومان ها به تابع وجود دارد : با مقدار و با رفرنس
بطور پیش فرض, آرگومان های تابع با مقدار پاس داده می شوند بنابراین اگر آرگومان مقدار داخل تابع تغییر کند, تاثیری روی خارج تابع نخواهد داشت.
به هر حال, برای اجازه دادن به تابع برای تغییر آرگومان ها, باید یک رفرنس پاس داده شود.
پاس دادن یک آرگومان با رفرنس با افزودن علامت &
قبل از نام آرگومان در تعریف تابع, انجام می شود :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<?php /* Defining a function that multiply a number by itself and return the new value */ function selfMultiply(&$number){ $number *= $number; return $number; } $mynum = 5; echo $mynum; // Outputs: 5 selfMultiply($mynum); echo $mynum; // Outputs: 25 ?> |
درک محدوده (Scope) متغیر
می توانید متغیرها را هرجایی در یک اسکریپت PHP تعریف کنید اما مکان تعریف, گستره دید متغیر را در برنامه PHP مشخص می کند مثلا کجا متغیر می تواند استفاده یا در دسترس قرار بگیرد.
این قابل دسترس بودن را اسکوپ متغیر می نامند.
بصورت پیش فرض, متغیرها تعریف شده داخل یک تابع بصورت محلی (local) هستند و خارج از آن تابع قابل نمایش/دستکاری نیستند :
1 2 3 4 5 6 7 8 9 10 11 |
<?php // Defining function function test(){ $greet = "Hello World!"; echo $greet; } test(); // Outputs: Hello World! echo $greet; // Generate undefined variable error ?> |
مشابه آن, اگر سعی در دسترسی یا وارد کردن یک متغیر خارحی به داخل تابع را داشته باشید, با خطای undefined variable مواجه می شوید :
1 2 3 4 5 6 7 8 9 10 11 12 |
<?php $greet = "Hello World!"; // Defining function function test(){ echo $greet; } test(); // Generate undefined variable error echo $greet; // Outputs: Hello World! ?> |
همانطور که در مثال بالا دیدید, متغیر تعریف شده داخل تابع قابل دسترس در خارج از آن نیست و به همین ترتیب متغیر تعریف شده خارج از تابع قابل دسترس در داخل تابع نیست.
این جداسازی شانس اینکه متغیر داخل یک تابع توسط متغیرهای برنامه اصلی دستکاری شوند را کم می کند.
نکته : از آنجا که متغیرهای محلی فقط داخل تابعی که در آن تعریف شده اند قابل شناسایی هستند, امکان استفاده چندین باره از نام برای یک متغیر در توابع مختلف وجود دارد.
کلمه کلیدی global
موقعیت هایی ممکن است پیش بیاید که نیاز به وارد کردن یک متغیر از برنامه اصلی به یک تابع یا برعکس باشد.
در این موارد, می توانید از کلمه کلیدی global
قبل از متغیرها داخل یک تابع استفاده کنید.
این کلمه کلیدی متغیر را به یک متغیر سراسری تبدیل می کند که در داخل و خارج تابع قابل دسترسی و نمایش است :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
<?php $greet = "Hello World!"; // Defining function function test(){ global $greet; echo $greet; } test(); // Outpus: Hello World! echo $greet; // Outpus: Hello World! // Assign a new value to variable $greet = "Goodbye"; test(); // Outputs: Goodbye echo $greet; // Outputs: Goodbye ?> |
در مورد کنترل نمایش و دسترسی در بخش کلاس و آبجکت های PHP بیشتر یاد می گیرید.
ساخت توابع بازگشتی (Recursive)
یک تابع recursive تابعی است که خود را چندین و چند بار تا زماتی که شرط برقرار است اجرا می کند.
توابع بازگشتی معمولا برای حل محاسبات پیچیده ریاضی یا پردازش عملیات تو در تو عمیق مورد استفاده می شود مثلا چاپ تمام المان های یک آرایه تو در تو.
بیشترین استفاده ای که داریم در داینامیک سازی منوهای چندسطحی, محاسبه زیرمجموعه های یک سیستم زیرمجموعه گیری و پورسانت دهی هرمی و .. است.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
<?php // Defining recursive function function printValues($arr) { global $count; global $items; // Check input is an array if(!is_array($arr)){ die("ERROR: Input is not an array"); } /* Loop through array, if value is itself an array recursively call the function else add the value found to the output items array, and increment counter by 1 for each value found */ foreach($arr as $a){ if(is_array($a)){ printValues($a); } else{ $items[] = $a; $count++; } } // Return total count and values found in array return array('total' => $count, 'values' => $items); } // Define nested array $species = array( "birds" => array( "Eagle", "Parrot", "Swan" ), "mammals" => array( "Human", "cat" => array( "Lion", "Tiger", "Jaguar" ), "Elephant", "Monkey" ), "reptiles" => array( "snake" => array( "Cobra" => array( "King Cobra", "Egyptian cobra" ), "Viper", "Anaconda" ), "Crocodile", "Dinosaur" => array( "T-rex", "Alamosaurus" ) ) ); // Count and print values in nested array $result = printValues($species); echo $result['total'] . ' value(s) found: '; echo implode(', ', $result['values']); ?> |
نکته : در هنگام استفاده از توابع بازگشتی مراقب باشید, چراکه اگر کد نادرست نوشته شود, امکان ایجاد یک حلقه بی نهایت از فراخوانی تابع ایجاد می شود.
یکی از مجموعه توابع مهم در PHP توابع ریاضی است که یادگیری و استفاده از آنها بسیار مهم و ضروری است که در مقاله دیگری به آن پرداختیم :
کار با اعداد – توابع ریاضی در PHP
امیدوارم در این بخش آموزش PHP, از کار با توابع php نهایت استفاده را برده باشید.
هر سوالی داشتید ، از قسمت نظرات ارسال کنید . سریعا ، پاسخگوی سوالات شما هستیم .
موفق باشید