توابع (Functions)
توابع قلب یک کد درست طراØÛŒ شده است Ùˆ باعث Ù…ÛŒ شوند کدها خوانا تر شوند Ùˆ بتوان دوباره از آنها استÙاده نمود. هیچ پروژه بزرگی بدون استÙاده از تابع نمی تواند انجام شود.
در این درس می خوانیم :
چگونه یک تابع را معرÙÛŒ کنیم Ùˆ از آن استÙاده کنیم.
چگونه مقدایر به تابع ارسال کنیم و از آنها مقادیر را بازخوانی کنیم.
چگونه توابع با صورت داینامیک استÙاده کنیم.
چگونه به متغیرهای Global در توابع دسترسی پیدا کنیم.
چگونه به یک تابع ØاÙظه دهیم.
تابع چیست ؟
شما Ù…ÛŒ توانید تابع را یک ماشین در نظر بگیرید. یک ماشین مواد اولیه را از شما Ù…ÛŒ گیرد Ùˆ بر روی آنها عملیات از پیش تعیین شده را انجام Ù…ÛŒ دهد Ùˆ در نهایت به شما Ù…Øصولی را Ù…ÛŒ دهد. تابع مقادیر را از شما دریاÙت Ù…ÛŒ کند ØŒ بر روی آنها عملیات انجام Ù…ÛŒ دهد Ùˆ در نهایت کاری Ú©Ù‡ Ù…ÛŒ خواهید با آن انجام Ù…ÛŒ دهد Ùˆ نتیجه را برای شما بر Ù…ÛŒ گرداند.
اگر شما نیاز به درست کردن یک کیک داشته باشید مسلما خودتان آن را درست Ù…ÛŒ کنید. ولی اگه 1000 کیک بخواهید درست کنید مطمئنا ماشینی طراØÛŒ Ù…ÛŒ کنید Ú©Ù‡ برای شما کیک درست کند. در موقع نوشتن تابع هم همیشه باید این مورد مدنظرتان باشد Ú©Ù‡ طوری تابع را بنویسید Ú©Ù‡ بتوان از آن بارها استÙاده کرد.
تابع در خود کدهایی را جای می دهد که شما هر وقت به آن نیاز دارید آن تابع را صدا می کنید مقادیر اولیه را به آن می دهید و تابع جواب را برای شما برمی گرداند.
Ùراخوانی تابع
دو مدل تابع وجود دارد. اولی توابعی هستند که درون خود php هستند و دیگری توابعی است که شما می نویسید.
یکی از ابتدایی ترین توابعی که در خود php هستند تابع print است.
در مثال بالا ما تابع print را صدا کردیم Ùˆ مقدار "hello word" رو برای اون Ùرستادیم. Øالا تابع وارد عمل Ù…ÛŒ شود Ùˆ این جمله را چاپ Ù…ÛŒ کند. تابع شامل دو بخش است. اولی نام تابع Print در اینجا Ùˆ دیگری مقادیری Ú©Ù‡ برای تابع Ù…ÛŒ Ùرستیم argument همان Ú©Ù‡ در داخل پرانتز جلوی تابع آمده است. برخی توابع نیاز به چند Argument دارند Ú©Ù‡ آنها را با کاما ØŒ جدا Ù…ÛŒ کنیم. مثلا :
ABS() مثلا ، یک عدد را می گیرد و قدر مطلق آن را بر می گرداند.
قوانین استÙاده از توابعی Ú©Ù‡ خودمان Ù…ÛŒ نویسیم هم به همین Ø´Ú©Ù„ است.
تعری٠یک تابع
شما Ù…ÛŒ توانید تابع را با استÙاده از دستور Function تعری٠نمایید.
هر مقدار که بخواهیم می توانیم این تابع را اجرا کنیم و خروجی بگیریم.
توجه داشته باشید Ú©Ù‡ اگر تابعی Argument نیاز داشته باشد ØŒ موقع صدا کردن تابع باید Øتما مقدار برای آن بÙرستیم.
نکته در صورتیکه تابع را به این صورت تعری٠کنید :
مثلا :
[php]
PrintBR();
PrintBr("Hello");
Øتی Ù…ÛŒ توانید به این صورت نیز از return استÙاده کنید.
صدا کردن یک Function به صورت داینامیک
این امکان وجود داره Ú©Ù‡ شما اسم تابع یک String یا یک متغیر بگذارید. Ùˆ برای صدا کردنش از اون استÙاده کنید. مثلا :
شاید این سوال پیش بیاد Ú©Ù‡ چرا ما باید همچین چیزی رو لازم داشته باشیم. در مثال Ùوق عملا ما Ùقط کار خودمون رو زیادتر کردیم. ولی در واقع در برخی مواقع لازم داریم Ú©Ù‡ جریان کد رو با توجه به مولÙÙ‡ های داخل url یا شرایط برنامه عوض کنیم.
یعنی مثلا در شرایطی یک function اجرا شود و در شرایط دیگه function دیگری.
متغیر ها در داخل تابع
مهم : متغیرهایی Ú©Ù‡ داخل یک تابع تعری٠می شوند ØŒ Ùقط در داخل همون تابع قابل دسترسی هستند. یعنی اون متغیر ها بیرون تابع یا در تابع های دیگر در دسترس نیستند. در پروژهای بزرگ این امکان خیلی به شما Ú©Ù…Ú© Ù…ÛŒ کند
چون شما Ù…ÛŒ توانید از اسم های تکراری برای متغیرهایتان در تابع های مختل٠استÙاده کنید بدون اینکه دخالتی در یکدیگر داشته باشند.
در مثال بالا خروجی چیزی رو چاپ نخواهد نمود. چون $testvariable Ú©Ù‡ در خط 11 برای چاپ خوانده Ù…ÛŒ شود قبلا تعری٠نشده است Ùˆ $testvariable خط 9 Ùقط در داخل function قابل دسترسی هستند.
استÙاده از متغیر به صورت Global (یعنی داخل Ùˆ خارج تابع ها)
به صورت Default متغیرهای تعری٠شده بیرون یک تابع ،داخل تابع در دسترس نیست.
مثلا در مثال زیر
به طور مثال می توانید برای این منظور کد بالا را به صورت زیر بازنویسی کنیدر :
در خط 10 از دستور global $life; استÙاده کردیم. در این Øالت مقدار $life Ú©Ù‡ بیرون تابع Ùˆ در خط 7 تعری٠شده در داخل تابع قابل دسترس Ù…ÛŒ شود Ùˆ خروجی این کد The meaning of life is 42 چاپ خواهد شد.
شما باید برای هر متغیری Ú©Ù‡ Ù…ÛŒ خواهید ازش در تابع استÙاده کنید از این دستور استÙاده کنید. Ùˆ همچنین در هر تابعی Ú©Ù‡ Ù…ÛŒ خواهید از متغیری خارج از آن تابع استÙاده کند باید از این دستور استÙاده شود.
مهم : دقت کنید که اگه $life داخل تابع تغییر دهید مقدار $life در کل برنامه عوض می شود.
دانلود نسخه pdf لینک زیر هست
http://www.divshare.com/download/1024377-26e
توابع قلب یک کد درست طراØÛŒ شده است Ùˆ باعث Ù…ÛŒ شوند کدها خوانا تر شوند Ùˆ بتوان دوباره از آنها استÙاده نمود. هیچ پروژه بزرگی بدون استÙاده از تابع نمی تواند انجام شود.
در این درس می خوانیم :
چگونه یک تابع را معرÙÛŒ کنیم Ùˆ از آن استÙاده کنیم.
چگونه مقدایر به تابع ارسال کنیم و از آنها مقادیر را بازخوانی کنیم.
چگونه توابع با صورت داینامیک استÙاده کنیم.
چگونه به متغیرهای Global در توابع دسترسی پیدا کنیم.
چگونه به یک تابع ØاÙظه دهیم.
تابع چیست ؟
شما Ù…ÛŒ توانید تابع را یک ماشین در نظر بگیرید. یک ماشین مواد اولیه را از شما Ù…ÛŒ گیرد Ùˆ بر روی آنها عملیات از پیش تعیین شده را انجام Ù…ÛŒ دهد Ùˆ در نهایت به شما Ù…Øصولی را Ù…ÛŒ دهد. تابع مقادیر را از شما دریاÙت Ù…ÛŒ کند ØŒ بر روی آنها عملیات انجام Ù…ÛŒ دهد Ùˆ در نهایت کاری Ú©Ù‡ Ù…ÛŒ خواهید با آن انجام Ù…ÛŒ دهد Ùˆ نتیجه را برای شما بر Ù…ÛŒ گرداند.
اگر شما نیاز به درست کردن یک کیک داشته باشید مسلما خودتان آن را درست Ù…ÛŒ کنید. ولی اگه 1000 کیک بخواهید درست کنید مطمئنا ماشینی طراØÛŒ Ù…ÛŒ کنید Ú©Ù‡ برای شما کیک درست کند. در موقع نوشتن تابع هم همیشه باید این مورد مدنظرتان باشد Ú©Ù‡ طوری تابع را بنویسید Ú©Ù‡ بتوان از آن بارها استÙاده کرد.
تابع در خود کدهایی را جای می دهد که شما هر وقت به آن نیاز دارید آن تابع را صدا می کنید مقادیر اولیه را به آن می دهید و تابع جواب را برای شما برمی گرداند.
Ùراخوانی تابع
دو مدل تابع وجود دارد. اولی توابعی هستند که درون خود php هستند و دیگری توابعی است که شما می نویسید.
یکی از ابتدایی ترین توابعی که در خود php هستند تابع print است.
PHP Code:
در جلو تمامی توابع Øتما باید () پرانتزها باشند ØŒ البته print یک استثنا است Ú©Ù‡ بدون پرانتز هم کار Ù…ÛŒ کندکد PHP:
print("Hello Web");
PHP Code:
هر دو دستور بالا یک خروجی را Ù…ÛŒ دهند ولی این مورد Ùقط در دستور print عملی است.کد PHP:
print(("Hello Web");
and
print "Hello Web";
در مثال بالا ما تابع print را صدا کردیم Ùˆ مقدار "hello word" رو برای اون Ùرستادیم. Øالا تابع وارد عمل Ù…ÛŒ شود Ùˆ این جمله را چاپ Ù…ÛŒ کند. تابع شامل دو بخش است. اولی نام تابع Print در اینجا Ùˆ دیگری مقادیری Ú©Ù‡ برای تابع Ù…ÛŒ Ùرستیم argument همان Ú©Ù‡ در داخل پرانتز جلوی تابع آمده است. برخی توابع نیاز به چند Argument دارند Ú©Ù‡ آنها را با کاما ØŒ جدا Ù…ÛŒ کنیم. مثلا :
PHP Code:
بسیاری از توابع اطلاعاتی برای شما بر می گرداند در راستای عملی که انجام می دهند. مثلا در صورت درست بودن یا نبودن True یا Falseبر می گردانند. کد PHP:
some_function( $an_argument, $another_argument );
ABS() مثلا ، یک عدد را می گیرد و قدر مطلق آن را بر می گرداند.
PHP Code:
در این مثال ما عدد -321 را به $num دادیم. این مقدار را به تابع abs Ùرستادیم در آنجا Ù…Øاسبات لازم انجام شد Ùˆ جواب برگردانده شد Ú©Ù‡ ما آنرا در داخل $newnum ریختیم Ùˆ آن را چاپ کردیم. البته ما Ù…ÛŒ توانستیم کد را Ú©Ù…ÛŒ جمع Ùˆ جور تر بنویسیم Ùˆ مستقیما عدد را به abs بدهیم Ùˆ همانجا چاپ کنیم.کد PHP:
1: <html>
2: <head>
3: <title>Listing 6.1</title>
4: </head>
5: <body>
6: <?php
7: $num = − 321;
8: $newnum = abs( $num );
9: print $newnum;
10: // prints "321"
11: ?>
12: </body>
13: </html>
PHP Code:
این یک خط کد همان کاری را می کند که در مثال قبل انجام دادیم.کد PHP:
print( abs( − 321 ) );
قوانین استÙاده از توابعی Ú©Ù‡ خودمان Ù…ÛŒ نویسیم هم به همین Ø´Ú©Ù„ است.
تعری٠یک تابع
شما Ù…ÛŒ توانید تابع را با استÙاده از دستور Function تعری٠نمایید.
PHP Code:
نام تابع درست بعد از دستور Function Ù…ÛŒ آید Ùˆ بلاÙاصله بعد از آن پرانتزها قرار Ù…ÛŒ گیرند. اگر تابع شما Argument اØتیاج دارد ØŒ شما باید متغیرهای مورد نیاز را (Ú©Ù‡ به وسیله کاما از هم جدا شده اند) را داخل پرانتز بنویسید. اگر تابع شما به Argument اØتیاجی ندارد داخل پرانتز چیزی ننویسید.کد PHP:
function some_function( $argument1, $argument2 )
{
// function code here
}
PHP Code:
در خط 7 کد بالا ما تابع bighello را تعری٠کردیم. مشخص است عملیاتی که این تابع انجام می دهد این است که کلمه Hello! را بین کدهای H1 چاپ خواهد نمود. ما تابع bighello را بدون Argument تعری٠کردیم ، به همین دلیل داخل پرانتز چیزی ننوشتیم. کد PHP:
1: <html>
2: <head>
3: <title>Listing 6.2</title>
4: </head>
5: <body>
6: <?php
7: function bighello()
8: {
9: print "<h1>HELLO!</h1>";
10: }
11: bighello();
12: ?>
13: </body>
14: </html>
PHP Code:
در مثال بالا ما تابع printBR را با Argument تعری٠می کنیم. Øالا در خطوط 11 Ùˆ12 Ùˆ 13 سه مقدار متÙاوت را به تابع Ù…ÛŒ Ùرستیم Ùˆ مثلا سه خط چاپ شده در خروجی خواهیم داشت. $txt همانطور Ú©Ù‡ Ù…ÛŒ بینید در خط 7 تعری٠شده است. موقعی Ú©Ù‡ در خطوط 11 Ùˆ 12 Ùˆ13 ما تابع را صدا Ù…ÛŒ کنیم $txt هر دÙعه مقداری Ú©Ù‡ برایش Ùرستاده شده است را به خود Ù…ÛŒ گیرد Ùˆ در خط 9 آن را چاپ Ù…ÛŒ کند.کد PHP:
1: <html>
2: <head>
3: <title>Listing 6.3</title>
4: </head>
5: <body>
6: <?php
7: function printBR( $txt )
8: {
9: print ("$txt<br>\n");
10: }
11: printBR("This is a line");
12: printBR("This is a new line");
13: printBR("This is yet another line");
14: ?>
15: </body>
16: </html>
هر مقدار که بخواهیم می توانیم این تابع را اجرا کنیم و خروجی بگیریم.
توجه داشته باشید Ú©Ù‡ اگر تابعی Argument نیاز داشته باشد ØŒ موقع صدا کردن تابع باید Øتما مقدار برای آن بÙرستیم.
نکته در صورتیکه تابع را به این صورت تعری٠کنید :
PHP Code:
</div> در این Øالت $txt به صورت default مقدار "nothing" را دارد. یعنی اگر ما موقع صدا کردن تابع مقداری برای Argument Ù†Ùرستیم تابع خودش مقدار Default را به $txt Ù…ÛŒ دهد ولی اگر ما مقدار بÙرستیم $txt برابر با مقدار Ùرستاده شده Ù…ÛŒ باشد.کد PHP:
function printBR( $txt = "nothing")
مثلا :
[php]
PrintBR();
PrintBr("Hello");
PHP Code:
</div> شما Ù…ÛŒ توانید از داخل تابع با استÙاده از دستور Return مقداری را برگردانید. دستور return عملیات تابع را متوق٠می نماید Ùˆ مقدار Ú¯Ùته شده را بر Ù…ÛŒ گرداند.کد PHP:
در خط اول کد بالا چاپ خواهد شد Nothing و در خط بعد چاپ می شود Hello . مقدار Default در برخی توابع بسیار کارا هستند.
[b] بازگرداندن مقادیر از توابع تعری٠شده توسط کاربر
PHP Code:
کد بالا عدد 8 را در خروجی چاپ می کند. عددهای 3 و 5 در $firstnum and $secondnum ذخیره شدهند و بعد با هم جمع شدند. و جواب آنها در $result ذخیره شد و سپس در خط 10 آن مقدار برگردانده شده است. با دستور Return شما می توانید هر چیزی را برگردانید مثلا : کد PHP:
1: <html>
2: <head>
3: <title>Listing 6.4</title>
4: </head>
5: <body>
6: <?php
7: function addNums( $firstnum, $secondnum;
8: {
9: $result = $firstnum + $secondnum )
10: return $result;
11: }
12: print addNums(3,5);
13: // will print "8"
14: ?>
15: </body>
16: </html>
PHP Code:
تابع بالا نیز دقیقا همان کاری را می کند که تابع قبلی می نمود. کد PHP:
function addNums( $firstnum, $secondnum )
{
return ( $firstnum + $secondnum );
}
Øتی Ù…ÛŒ توانید به این صورت نیز از return استÙاده کنید.
PHP Code:
می توانید نتیجه یک عملیات را برگردانید :کد PHP:
return 4;
PHP Code:
یا Øتی مقداری از یک تابع دیگر را برگردانید :کد PHP:
return ( $a/$b );
PHP Code:
کد PHP:
return ( another_function( $an_argument ) );
صدا کردن یک Function به صورت داینامیک
این امکان وجود داره Ú©Ù‡ شما اسم تابع یک String یا یک متغیر بگذارید. Ùˆ برای صدا کردنش از اون استÙاده کنید. مثلا :
PHP Code:
در مثال بالا در خط 7 تابع با اسم Sayhello تعری٠شده Ùˆ در خط 11 function_holder یک متغیری تعری٠شده با مقدار sayHello Øالا Ù…ÛŒ توان از function_holder با اضاÙÙ‡ پرانتزها برای صدا کردن تابع استÙاده کرد.کد PHP:
1: <html>
2: <head>
3: <title>Listing 6.5</title>
4: </head>
5: <body>
6: <?php
7: function sayHello()
8: {
9: print "hello<br>";
10: }
11: $function_holder = "sayHello";
12: $function_holder();
13: ?>
14: </body>
15: </html>
شاید این سوال پیش بیاد Ú©Ù‡ چرا ما باید همچین چیزی رو لازم داشته باشیم. در مثال Ùوق عملا ما Ùقط کار خودمون رو زیادتر کردیم. ولی در واقع در برخی مواقع لازم داریم Ú©Ù‡ جریان کد رو با توجه به مولÙÙ‡ های داخل url یا شرایط برنامه عوض کنیم.
یعنی مثلا در شرایطی یک function اجرا شود و در شرایط دیگه function دیگری.
متغیر ها در داخل تابع
مهم : متغیرهایی Ú©Ù‡ داخل یک تابع تعری٠می شوند ØŒ Ùقط در داخل همون تابع قابل دسترسی هستند. یعنی اون متغیر ها بیرون تابع یا در تابع های دیگر در دسترس نیستند. در پروژهای بزرگ این امکان خیلی به شما Ú©Ù…Ú© Ù…ÛŒ کند
چون شما Ù…ÛŒ توانید از اسم های تکراری برای متغیرهایتان در تابع های مختل٠استÙاده کنید بدون اینکه دخالتی در یکدیگر داشته باشند.
PHP Code:
کد PHP:
1: <html>
2: <head>
3: <title>Listing 6.6</title>
4: </head>
5: <body>
6: <?php
7: function test()
8: {
9: $testvariable = "this is a test variable";
10: }
11: print "test variable: $testvariable<br>";
12: ?>
13: </body>
14: </html>
در مثال بالا خروجی چیزی رو چاپ نخواهد نمود. چون $testvariable Ú©Ù‡ در خط 11 برای چاپ خوانده Ù…ÛŒ شود قبلا تعری٠نشده است Ùˆ $testvariable خط 9 Ùقط در داخل function قابل دسترسی هستند.
استÙاده از متغیر به صورت Global (یعنی داخل Ùˆ خارج تابع ها)
به صورت Default متغیرهای تعری٠شده بیرون یک تابع ،داخل تابع در دسترس نیست.
مثلا در مثال زیر
PHP Code:
خروجی خالی چاپ Ù…ÛŒ شود Ùˆ مقدار $life را چاپ نخواهد کرد. در برخی موارد ما نیاز به استÙاده از متغیرهای بیرون تابع داخل یک تابع داریم. برای این کار کاÙیه Ú©Ù‡ از دستور Global استÙاده کنیم.کد PHP:
1: <html>
2: <head>
3: <title>Listing 6.7</title>
4: </head>
5: <body>
6: <?php
7: $life = 42;
8: function meaningOfLife()
9: {
10: print "The meaning of life is $life<br>";
11: }
12: meaningOfLife();
13: ?>
14: </body>
15: </html>
به طور مثال می توانید برای این منظور کد بالا را به صورت زیر بازنویسی کنیدر :
کد PHP:
1: <html>
2: <head>
3: <title>Listing 6.8</title>
4: </head>
5: <body>
6: <?php
7: $life=42;
8: function meaningOfLife()
9: {
10: global $life;
11: print "The meaning of life is $life<br>";
12: }
13: meaningOfLife();
14: ?>
15: </body>
16: </html>
شما باید برای هر متغیری Ú©Ù‡ Ù…ÛŒ خواهید ازش در تابع استÙاده کنید از این دستور استÙاده کنید. Ùˆ همچنین در هر تابعی Ú©Ù‡ Ù…ÛŒ خواهید از متغیری خارج از آن تابع استÙاده کند باید از این دستور استÙاده شود.
مهم : دقت کنید که اگه $life داخل تابع تغییر دهید مقدار $life در کل برنامه عوض می شود.
دانلود نسخه pdf لینک زیر هست
http://www.divshare.com/download/1024377-26e
Comment