تعریف توابع در PHP
قدرت واقعی PHP در توابع آن است، در PHP بیش از 1000 تابع از قبل نوشته شده وجود دارد.
در این فصل به شما نشان خواهیم داد که در PHP چگونه می توانید توابع خودتان را تعریف کنید.
یک تابع به وسیله صدا زدن آن اجرا خواهد شد، شما می توانید از هر جای صفحه آنرا صدا بزنید.
نحوه تعریف توابع:
function functionName()
{
code to be executed;
}
توجه: برای نامگذاری توابع موارد زیر را در نظر داشته باشید:
- اسامی توابع به نحوی انتخاب شوند که نام انتخاب شده معرفی کننده عملی باشد که تابع انجام می دهد
- نام تابع می تواند با حروف و یا علامت "_" شروع شود(با عدد نمی تواند شروع شود).
مثال: یک تابع ساده که با صدا زدن آن نام من چاپ می شود:
<html>
<body>
<?php
function writeName()
{
echo "pahlavan sadegh";
}
echo "My name is ";
writeName();
?>
</body>
</html>
خروجی کد بالا:
My name is pahlavan sadegh
ارسال پارامتر به توابع
یک پارامتر چیزی شبیه یک متغیر است، پارامترها بعد از نام تابع داخل پرانتز تعریف می شوند.
مثال1: در مثال زیر با ارسال نام شخص به تابع، بعد از صدا زدن تابع، نام های مختلف با فامیلی یکسان چاپ می شود.
<html>
<body>
<?php
function writeName($fname)
{
echo $fname . " Ahmadi.<br />";
}
echo "My name is ";
writeName("Ali");
echo "My sister's name is ";
writeName("Sara");
echo "My brother's name is ";
writeName("Amir");
?>
</body>
</html>
خروجی کد بالا:
My name is Ali Ahmadi.
My sister's name is Sara Ahmadi.
My brother's name is Amir Ahmadi.
مثال2: تابع زیر دو پارامتر دارد.
<html>
<body>
<?php
function addNumbers($a , $b)
{
$sum = $a + $b;
echo $sum;
}
addNumbers(100,200);
؟>
</body>
</html>
خروجی کد بالا:
300
نکته: به صورت پیش فرض پارامترهایی که به توابع ارسال می شوند، طوری هستند که در صورتی که در تابع تغییر کنند مقدار اصلی آنها تغییری نخواهد کرد و به همان صورت باقی خواهند ماند، اما اگر در تعریف تابع قبل از اسم متغیر از علامت "&" استفاده کنیم، این ویژگی تغییر می کند یعنی با تغییر یک متغیر در درون تابع، اصل متغیر هم تغییر خواهد نمود، به مثال زیر توجه کنید.
مثال:
<html>
<body>
<?php
function changeit(&$string)
{
echo "String is: " . $string . '<br />';
$string="Learning PHP";
echo "String Changed to: " . $string . '<br />';
}
$str="PLUS";
changeit($str);
echo $str;
?>
</body>
</html>
خروجی کد بالا:
String is: PLUS
String Changed to: Learning PHP
Learning PHP
بازگرداندن یک مقدار توسط توابع
شما می توانید از دستور return برای بازگرداندن یک مقدار استفاده کنید، یعنی کافی است نتیجه را جلوی دستور return قرار دهید.
مثال:
<html>
<body>
<?php
function add($x,$y)
{
$total=$x+$y;
return $total;
}
echo "1 + 16 = " . add(1,16);
?>
</body>
</html>
خروجی کد بالا:
1 + 16 = 17
توابع از پیش تعریف شده:
در php بیش از 5300 تابع از پیش تعریف شده وجود دارد که البته برای اجرای آنها ممکن است در ورژن های مختلف برخی توابع وجود نداشته باشند و یا برای اجرای بعضی توابع احتیاج باشد تا extension خاصی نصب باشد.
توابع از پیش تعریف شده همانند توابعی که کاربر تعریف می کند اجرا می شوند.
برای مشاهده فیلم ها و آموزش های پروژه محور برنامه نویسی PHP کلیک کنید.
توابع PHP در سمت سرور پردازش و نتیجه به کلاینت ارسال میشه.
دقت کنید با رویداد کلیک میشه به صورت Ajax و در پشت پرده، درخواستی به سمت سرور ارسال و نتیجه رو دریافت کرد و اون رو به کاربر نمایش داد. ولی این در نهان، پردازش این درخواست سمت سرور انجام میشه. فقط کارهای جانبی و ظاهری توسط جاوااسکریپت انجام میشه.
شما برای رویدادی مثل کلیک میتونید از Ajax استفاده کنید.
توابع را باید در کدام قسمت از html page تعریف کرد؟!
ودر کجا میشود صدایشان کرد؟
آیا نیازی به تعریف الگوی تابع نیست؟
آز توابع میشود به صورت تو در تو استفاده کرد؟
قلمرو توابع تا کجاست ؟
ببخشید سوالام زیاده ;)
در هر صفحهای که نیاز به تابع خاصی باشه، باید اون تابع تعریف بشه. اما خیلی مواقع پیش میاد که در صفحات مختلف یک تابع خاص استفاده میشه. در اینطور مواقع معمولا یک فایل حاوی توابع تعریف شده ایجاد میکنند، و در صفحات دیگه به نوعی اون فایل رو لود میکنند. با این کار توابع در فایلها قابل استفاده خواهد شد. با این کار فقط توابع از یک جا مدیریت میشن که این خیلی خوب هست.
هر جایی هم نیاز به استفاده از تابع باشه، میتونیم اون تابع رو با نامش صدا بزنیم.
منظورتون از الگوی تابع مشخص نیست!!!
منظورتون از تابع تو در تو مشخص نیست، ولی به طور کل با کمی کدنویسی میشه توابعی تو در تو تعریف کرد ولی در کل توصیه نمیشه.
پارامترها در واقع نوعی مقادیر ورودی به توابع هستن.
برخی توابع برای انجام کارشون نیاز به یک یا چند مقدار ورودی دارن. این مقادیر ورودی، در واقع همون پارامترها هستن.
مثلا تابع جمع برای کار نیاز به دو مقدار داره.
[dir=#555]function Sum($num1, $num2){
return $num1 + $num2;
}[/dir]
تابع بالا یک تابع جمع هست که برای کار نیاز به دو مقدار داره. این دو مقدار توسط «پارامترهای» تابع به تابع ارسال میشه. البته اینجا استفاده از کلمهی پارامتر خیلی صحیح نیست، ولی برای فهم از همین کلمه استفاده میکنم.
num1 پارامتر اول و num2 پارامتر دوم تابع Sum هست.
سوال: من ارسال ارگومان به روش ارجاع رو اصلا متوجه نشدم مثالشو در قسمت "ارسال پارامتر به توابع". میشه بیشتر توضیح بدید؟؟؟.ممنون
ارسال آرگومان با روش ارجاع یا اصطلاحا By Reference کمی نیاز به زمان داره. در واقع برای فهم این سؤال شما باید با نحوهی ذخیره اطلاعات در حافظه کمی آشنا باشید.
اگه بخوام خیلی روان توضیح بدم، شما در تابعی که آرگومان رو به این روش پاس میدید، با اجرای تابع، خود این آرگومان یا پارامتر دستخوش تغییرات داخل تابع میشه.
کد زیر رو در نظر بگیرید:
[dir=#555]function byRef(&$arg){
$arg = $arg * $arg;
return $arg;
}
function byVal($arg){
$arg = $arg * $arg;
return $arg;
}
$var1 = 5;
echo $var1;
echo '';
byRef($var1);
echo $var1;
echo '';
$var2 = 15;
echo $var2;
echo '';
byVal($var2);
echo $var2;[/dir]
این یه مثال ساده هست. ارسال پارامتر به روش مقدار و ارجاع رو تست کردیم. با توجه به چاپ مقدار فکر میکنم کمی مشخص بشه، نحوهی کارش. اما توصیهی بنده به شخصه این هست که یه مقدار به زبان PHP مسلط بشید و کدنویسی کنید تا منطق دستتون بیاد. این روش رو در کار یاد بگیرید بهتره.
[dir=#555] test_function [/dir]
امکانش هست سؤالتون رو کامل مطرح کنید. من از صورت سؤال چیزی متوجه نمیشم.
با تشکر
فرق return با قبلی
فرق return با چی؟؟؟
کدهاتون کامل نیومده.
[dir=#555]
[/dir]
خارج از فانکشن متغیر (پارامتر) رو چاپ میکنید با مقدار تغییر کرده؟ خارج از فانکشن که متغییر مقدارش نال هست !
من پارامتر رو وسیله ای برای انداختن مقدار به درون فانکشن میبینم، فقط !
کدها نیومده، لطفا دوباره ارسال کنید.
1- ابتدا تگ زیر را در form قرار بدهید ویژگی value آنرا با نام تابع مورد نظرتان تنظیم کنید:[dir=#555]<input name="action" value="myFunction" type="hidden">[/dir]
2- زمان ارسال مقادیر به سمت سرور مقدار action نیز ارسال خواهد شد. بنابراین سمت سرور با استفاده از دستور switch بر اساس مقادیر action تصمیم می گیریم که چه کاری باید انجام شود.
در پروژه هتل، دقیقاً از همین روش استفاده شده است، در صورت تمایل می توانید آنرا خریداری کرده و کدها را مشاهده کنید.
beyamooz.com/php/339-project-hotel/2594
مثل جیکوری و جاوااسکریپت
مثلا موقعی که رویدادی اتفاق افتاد یک تابع بینام PHP اجرا شود ؟!
امکان تعریف تابع بینام وجود نداره. در هیچ زبان برنامهنویسی!
jquery و javascript هم اینطور نیست. اگر ممکن است یه سمپل بذارید ببینم.
/*اکشن برگشت به بالا*/
jQuery("#go-up").click(function(){
jQuery("body,html").animate({scrollTop:"0px"},1000);
});
الان فانکشن به کار رفته یک تابع بی نام است که باید دستورات آن اجرا شوند
و فکر میکنم تابع بینام جایگزین دستور زیر باشد برای راحت کردن کار است
if(document).click{comments;}
ببینید اینجا فانکشن در ظاهر بدون نام هست، ولی در واقع اینجا یک تابع به رویداد کلیک کنترل موردنظر اعمال میشه. در واقع این تابع فقط برای این کنترل با این ID هست.
در PHP چیزی شبیه زیر وجود داره:
[dir=#555]$function = function(){
$array = range(1, 20);
$str implode("", $array);
return $str;
}[/dir]
در اینجا ما یک متغیر تابعی تعریف کردیم. یعنی یک متغیر تعریف کردیم و به جای مقدار بهش تابع دادیم. در ظاهر شاید تابع ما بدون نام باشه، ولی در واقع این تابع با نام متغیر صدا زده میشه. یعنی هر جا شما متغیر function$ رو صدا بزنی، تابع موردنظر اجرا میشه.
دوست عزیز از آموزش های عالی شما کمال تشکر را دارم .
من چند تا کتاب دارم که مبحث تابع ان 40 صفحه است و آرایه در تابع و ... را تعریف کرده است
اونا رو بخونم یا همین چیز هایی که شما گفتید کافی است و اونا اضافی هستند .
با تشکر
یه مطلبی خدمت شما دوست عزیز بگم و اون اینکه، یادگیری هیچوقت انتها نداره. همیشه مطلب و نکتهای برای یادگیری هست. هر کدوم که فهمش برای شما آسونتر هست رو ابتدا بخونید و سپس برای درک مطلب و یا یادگیری نکات بیشتر آموزش دوم رو مطالعه کنید.
در قسمت "ارسال پارامتر به توابع" در مثال بعد از نکته ،
چون $string.="Learning PHP"; با نقطه به هم وصل شدن ، کلمه Learning PHP به plus می چسبد و خروجی زیر چاپ می شود.
String is: PLUS
String Changed to: PLUSLearning PHP
PLUSLearning PHP