parsgreen.com
article

توابع (Functions) در php

php-function

بحث توابع در هر زبان برنامه نویسی، معمولا جزء موارد لاینفک آن زبان محسوب می شود، چرا که برنامه نویسان همواره در پی یافتن کوتاه ترین راه حل ها با کم ترین کدنویسی و در عین حال رسیدن به مقصود خود به بهترین شکل ممکن هستند، به همین خاطر است که به جای نوشتن چندین و چندباره کدها، یک بار آنها را در قالب توابع تعریف کرده و بعد از آن، ورودی مورد نظر خود را هنگام فراخوانی به تابع داده و خروجی دریافت می کنند، در واقع، توابع نقش دستگاه های تسهیل کننده را برای یک برنامه نویس بازی می کنند، با این مقدمه کوتاه، می پردازیم به ادامه آموزش php با مبحث توابع (Functions).

تابع (Function) چیست و چه کاربردی دارد؟


همان طور که در مباحث مربوط به جاوا اسکریپت گفتیم، توابع، الگوهای استاندارد و تعریف شده در زبان های برنامه نویسی و از جمله در php هستند که پس از دریافت مقادیری به عنوان ورودی، در خود، پردازش خاصی را انجام می دهند، حاصل این پردازش به عنوان خروجی در ادامه برنامه قابل استفاده است، به فرض تصور کنید بخواهید تعداد 100 کیک را ظرف یک روز آماده کنید، مسلما انجام این کار به صورت دستی و تک به تک، انرژی و مدت زمان زیادی می طلبد، اما اگر یک الگوی تعریف شده برای یک ماشین پخت کیک ایجاد کنید و مواد اولیه و تنظیمات مورد نیاز را به آن بدهید، در عرض چند دقیقه، به هدف خود خواهید رسید، بحث توابع نیز بی شباهت به مثال عنوان شده نیست، در واقع توابع در php (و در دیگر زبان های مشابه) به جهت اجتناب از دوباره نویسی کدهای پرکاربرد، استفاده می شوند.

شیوه نگارش (syntax) تابع در php


شیوه نگارش (syntax) توابع در php شباهت زیادی به دیگر زبان پرکاربرد وب، یعنی جاوا اسکریپت دارد، به مثال زیر توجه کنید.
<?php
//تعریف تابع
function test(){
    echo "این یک تابع در php است";
}
?>
توضیح:
- توابع در php با عبارت function تعریف می شوند.
- نام توابعی که تعریف می کنیم، معمولا می تواند عباراتی دلخواه باشد، اما انتخاب نام به صورت عددی یا دارای کارکترهای خاص، مجاز نیست.
- اگر تابع بالا را در هر جا از کد خود فراخوانی کنید، عبارت دستور echo به خروجی ارسال می شود.
فراخوانی تابع بالا می تواند به صورت زیر باشد:
<?php
//تعریف تابع
function test(){
    echo "این یک تابع در php است";
}
//فراخوانی تابع
test();
?>

آرگومان (argument) تابع


اگر در مثال بالا دقت کرده باشید، پس از تعریف نام تابع، یک () قرار گرفته است، این علامت برای دریافت یک آرگومان (argument) است، شاید این واژه به ظاهر کمی غریب بیاید، اما آرگومان در اینجا چیزی نیست جزء همان ورودی که پیش تر بحث آن را مطرح کردیم، با تعیین آرگومان، این امکان را به تابع می دهیم که پردازش مورد نظر را بر روی یک ورودی انجام دهد، البته توابع با و بدون آرگومان قابل استفاده هستند که در ادامه، بیشتر با نحوه کاربرد آنها آشنا خواهیم شد، به مثال زیر توجه کنید.
<?php
//تعریف متغیر در بیرون تابع
$name = 'احمد';
//تعریف تابع
function getuser($name){
    if ($name == 'admin'){
        echo "مدیر سایت ، خوش آمدید";
    }
    else{
        echo "$name ، خوش آمدید";
    }
}
//فراخوانی تابع
getuser($name);
?>
مثال بالا با توجه به اینکه متغیر فرضی name را به عنوان آرگومان بررسی می کند، خروجی زیر را چاپ خواهد کرد.
احمد ، خوش آمدید
در واقع شرح تابع بالا به اینصورت است که ابتدا متغیر فرضی name برابر کلمه احمد مقدار دهی شده است، سپس وقتی تابع فراخوانی می شود، با دستور if بررسی می گردد که آیا متغیر name به عنوان آرگومان برابر عبارت admin است یا خیر، جواب خیر است، پس قسمت دوم یعنی else به خروجی فرستاده می شود.

مثال دیگر از تابع در php


در تابع زیر، به جای یک آرگومان و تعریف متغیر در بیرون آن، از دو آرگومان و مقادیر متغیر در هنگام فراخوانی تابع استفاده کرده ایم.
<?php
//تعریف تابع
function checkpage($name,$page){
    if ($name == 'admin'){
        echo "مدیر سایت ، به صفحه $page خوش آمدید";
    }
    else{
        echo "$name ، به صفحه $page خوش آمدید";
    }
}
//فراخوانی تابع با چند آرگومان
checkpage("admin",33);
?>
خروجی تابع بالا به صورت زیر خواهد بود.
مدیر سایت ، به صفحه 33 خوش آمدید
با کمی دقت، حتما خواهید توانست اتفاقاتی را که در مثال بالا روی داده، حدس بزنید.

تعریف توابع پیچیده در php


اجازه بدهید آموزش را با تعریف چند تابع، این بار کمی پیچیده تر از توابع قبلی دنبال کنیم.
تابع محسابه معدل دانش آموزان:
<?php
//تعریف تابع
function avrage($marks){
    //محاسبه معدل    
    $marks = $marks / 20 . '&nbsp;';//تعداد کل دروس 20
    return $marks;
}
//مجموع نمرات 3 دانش آموز
$st1 = 344;
$st2 = 312;
$st3 = 298;
//فراخوانی تابع به صورت جداگانه برای هر دانش آموز
echo avrage($st1);
echo avrage($st2);
echo avrage($st3);
?>
توضیح:
- عبارت return، خروجی تابع را برای استفاده در ادامه کد به اصطلاح برمی گرداند، به عبارتی دیگر هنگامی که از return در یک تابع استفاده می کنیم، یعنی پردازش های مورد نظر ما به پایان رسیده و نتیجه به محلی که تابع از آنجا فراخوانی شده، فرستاده می شود، توجه داشته باشید که در تابع، با اجرای یک دستور return، سایر پردازش ها (یا سایر دستورات return) نادیده گرفته می شوند.
- خروجی مثال بالا اعداد 17.2 15.6 14.9 خواهند بود.
تابع محاسبه حاصل جمع و حاصل ضرب چند عدد:
<?php
//تعریف تابع
function calculator($numx,$numy,$numz){
    //حاصل جمع
    $total = $numx + $numy + $numz;
    //حاصل ضرب
    $multiple = $numx * $numy * $numz;
    //برگرداندن نتیجه تابع
    return ("حاصل جمع اعداد برابر $total و حاصل ضرب آنها برابر $multiple است");
}
//فراخوانی تابع به همراه آرگومان ها
echo calculator(20,31,68);
?>
خروجی تابع بالا به صورت [حاصل جمع اعداد برابر 119 و حاصل ضرب آنها برابر 42160 است] خواهد بود.
تابع نمایش حاصل یک عدد به توان 10:
<?php
//تعریف تابع
function exponent($num){
    //استفاده از حلقه for
    for ($i=0;$i<10;$i++){
        $exponent = $num;
        $num = $exponent * 2;
        echo $exponent . '&nbsp;';
    }
}
//فراخوانی تابع به همراه آرگومان
echo exponent(2);
?>
خروجی تابع بالا به صورت اعداد 2 4 8 16 32 64 128 256 512 1024 خواهد بود.

توابع درونی php


تا این مرحله از آموزش php و بحث توابع، دیدیم که چگونه می توان یک تابع را تعریف و از آن استفاده نمود، اما نکته جالب اینجاست که قدرت php از این هم فراتر است، چرا که توابعی به صورت از پیش تعریف شده (built in functions) در این زبان وجود دارند  که بدون حتی یک خط کدنویسی، مقصود مورد نظر ما را انجام می دهند، شمار این توابع چیزی بالغ بر 700 است، البته همه ی آنها ممکن است مورد استفاده قرار نگیرند اما تعداد به خصوصی، بسیار پر کاربرد هستند، برای دیدن لیست کاملی از توابع درونی، می توانید به سایت رسمی php در آدرس زیر مراجعه کنید.
http://www.php.net/manual/en/funcref.php
به مثال زیر توجه کنید.
<?php
//تعریف تابع
function replace($str){
    //تابع درونی str_replace
    $str = str_replace('کاربر','مدیر',$str);
    return $str;    
}
//فراخوانی تابع به همراه آرگومان
echo replace("سلام کاربر سایت، خوش آمدید");
?>
تابع درونی str_replace یکی از پرکاربردترین ها در php است، این تابع وجود یک عبارت را در رشته ارسالی بررسی کرده و اگر حاصل بررسی درست (true) بود، آن عبارت را با جایگزین آن، تعویض می کند، بر این اساس خروجی مثال بالا به صورت [سلام مدیر سایت، خوش آمدید] خواهد بود.
مثالی دیگر از به کار بردن توابع درونی در php:
<?php
//تعریف تابع
function lower($str){
    //تابع درونی strtolower
    $str = strtolower($str);
    return $str;    
}
//فراخوانی تابع به همراه آرگومان
echo lower("WELCOME TO PHP LEARNING");
?>
در مثال بالا از یکی دیگر از توابع درونی php به نام strtolower استفاده کرده ایم، این تابع حروف (انگلیسی) بزرگ را تبدیل به حروف کوچک می کند، بر این اساس خروجی مثال بالا به صورت [welcome to php learning] خواهد بود.
در موقع به کارگیری توابع درونی php، نیازی نیست حتما آنها را در یک تابع دیگر استفاده کنیم، به فرض مثال بالا را به صورت زیر هم می توان نوشت که همان خروجی را خواهد داشت.
<?php
//فراخوانی تابع به همراه آرگومان
echo strtolower("WELCOME TO PHP LEARNING");
?>
در مباحث بعدی در این باره بیشتر خواهیم گفت و با توابع پیچیده تری آشنا خواهیم شد.
sectionدسته بندی: آموزش مقدماتی » PHP
related مطالب بیشتر:
» عملگرهای (Operators) محاسبه و مقایسه در php
» توابع کار با آرایه در php - بخش اول
» دستورات شرطی if و else در php
» توابع کار با آرایه در PHP - بخش سوم
» آشنایی با برنامه نویسی به زبان PHP
commentنظرات (۴۷ یادداشت برای این مطلب ارسال شده است)
نویسنده: MEHRAN
زمان: ۱۲:۴۶:۵۱ - تاریخ: ۱۳۹۱/۱۲/۰۵
سلام خیلی ممنون از مطلبتون . من این PHP رو از یه آموزش دیگه برداشتم و اینجا میزارم چون اونجا نتونستم به خاطر مشکلاتی ازش حالی بشم . ممنون میشم اگه بصورت کلی واسمون توضیح بدید
لینک کد بر روی وبسایت خودم :
http://www.photolady.ir/content/uploads/2013/02/function.txt
این هم لینک آموزش مربوط به این فانکشن که بعضی جاهاش قطع و وصل میشه و من نتونستم بفهمم منظورش چیه :
http://www.photolady.ir/content/uploads/2013/02/16.swf
ممنون از سایت خوبتون
پاسخ: 
سلام
این تابع که در لینک بالا بود:
function MyPower($InputNum,$PowerNum)
{
$RESULT=1;
for($i=1;1<=PowerNum;$i+-)
{
$Result*-$i;
}
return $Result;
}
print MyPower(10,20);
از نظر ساختاری و syntax مشکل دارد و عمل نخواهد کرد.
فایل فلش هم ظاهرا خالی است و چیزی نمایش نمی دهد!
نویسنده: MEHRAN
زمان: ۰۱:۴۶:۱۰ - تاریخ: ۱۳۹۱/۱۲/۰۶
راستش من این return و اینا رو خوب نفهمیدم . و اینم لینک دانلود آموزش . ببخشید :
http://www.photolady.ir/content/uploads/2013/02/16.zip
پاسخ: 
به طور ساده وقتی یک تابع را فراخوانی می کنیم و مقادیری به عنوان آرگومان (در اینجا 10 و 20) به آن نسبت می دهیم، پس از طی فرآیندهایی درون تابع، مقادیری به عنوان نتیجه از طرف آن بازگشت (return) داده می شود، اما تابع مورد نظر شما اشکال دارد یا دستکاری شده است و به همین خاطر کد اجرا نخواهد شد تا چیزی خروجی دهد.
نویسنده: MEHRAN
زمان: ۲۲:۲۷:۳۹ - تاریخ: ۱۳۹۱/۱۲/۰۸
خیلی ممنون از آموزشهاتون لذت میبرم من . اگه میشه آموزش های دیگه ای هم بزارید . منتظرم
نویسنده: MEHRAN
زمان: ۲۱:۴۷:۱۵ - تاریخ: ۱۳۹۱/۱۲/۱۲
باز سلام و خسته نباشید
جناب یه سوال داشتم. (مربوط به این بخش نیست) اینکه :
میخواستم بدونم که چرا "echo" نمیتونه پارامتر هایی مثل ("r/"و "n/"و "a/") رو که استاندارد php هم هستن بشناسه ؟؟ مثلا "n/" برای مراجعه به خط بعدی هستش و مثل enter عمل میکنه . میشه در این موضوع یه راهنمایی بکنید ؟؟؟ ممنون میشم
نویسنده: MEHRAN
زمان: ۲۱:۵۲:۱۲ - تاریخ: ۱۳۹۱/۱۲/۱۲
ببخشید این هم یه نمونه کد php برای نظر قبلی من هستش:
<?php
$mehran = 'aps.net movjud mibashad va php movjud nist';
$pos = strpos ($mehran,'php');
if ($pos===false)
echo "kalameye /n pyda nashod";
else
echo "kalameye pedya shod $pos/n";
?>
این رو نشون میده :
kalameye pedya shod 27/r
آیا "n/" کاربردی نداره ؟ یا من درست ننوشتم ؟
پاسخ: 
سلام
باید از بک اسلش استفاده کنید، شما به اشتباه از اسلش استفاده کرده اید! به طور مثال:
<?php
echo "PHP:\n Easy And Powerful!";
?>
نویسنده: mohmaad
زمان: ۲۱:۴۳:۰۸ - تاریخ: ۱۳۹۲/۰۲/۲۰
من یک تابع به اسم connect در یک صفحه به اسم list.php تعریف کردم حالا اگه بخوام در یک صفحه دیگه به اسم boop.php آنرا فراخوانی کنم پیغام میده که میخواهید از تابع تعریف نشده استفاده کنید مشکل از کجاست
پاسخ: 
برای اینکه فایل اصلی (boop.php) به اطلاعات فایلی که تابع در آن تعریف شده (list.php) دسترسی داشته باشد، باید ابتدا از include استفاده کرده و فایل تابع را داخل فایل اصلی وارد کنید، سپس می توانید از توابع موجود در آن استفاده نمائید، به طور مثال در ابتدای فایل boop.php دستورات زیر را بنویسید:
include_once('function/list.php');
در این دستور فرض ما بر این است که فایل تابع در داخل فولدر function و این فولدر در کنار فایل اصلی است.
نویسنده: mohammad
زمان: ۱۶:۵۳:۰۰ - تاریخ: ۱۳۹۲/۰۴/۱۳
سلام اگر میشه آموزش oop هم در سایت خوبتون قرار
دهید ممنون
پاسخ: 
سلام
به جهت پیشرفته بودن مبحث، در ادامه آموزش های مقدماتی مطرح خواهد شد.
نویسنده: امیرحسین
زمان: ۲۰:۴۳:۱۷ - تاریخ: ۱۳۹۲/۰۵/۱۵
سلام و عرض ادب خسته نباشید
<?php
//تعریف تابع
function calculator($numx,$numy,$numz){
//حاصل جمع
$total = $numx + $numy + $numz;
//حاصل ضرب
$multiple = $numx * $numy * $numz;
//برگرداندن نتیجه تابع
return ("حاصل جمع اعداد برابر $total و حاصل ضرب آنها برابر $multiple است");
}
//فراخوانی تابع به همراه آرگومان ها
echo calculator(20,31,68);
?>
اینجا بجای عبارت return از echo هم میشه استفاده کرد چرا؟!
پاسخ: 
سلام
استفاده از echo در توابع چندان معمول نیست، در اینجا صرفا جهت آموزش آورده شده، در واقع echo یک دستور برای گرفتن خروجی است که می تواند هر چیزی و هر جایی (در چارچوب syntax PHP) باشد، وقتی در تابع از echo استفاده می کنیم، خروجی در محل قرار گیری تابع چاپ می شود، اما return روش استاندارد است و نتیجه تابع را به خارج از آن (محل فراخوانی تابع) منتقل می کند (که در آنجا می توان از echo یا سایر دستورات مورد نیاز استفاده کرد).
نویسنده: KARIM
زمان: ۲۳:۰۴:۳۲ - تاریخ: ۱۳۹۲/۰۶/۰۸
ببخشید در PHP تابعی وجود دارد که عکس یک عدد یا رشته را برگرداند مثلا: 1234 را به 4321 مقلوب کند یا تابعی هست که حروف بزرگ را به کوچک تبدیل کند؟
پاسخ: 
برای مورد اول تابع از پیش تعریف شده ای وجود ندارد، اما می توانید از نمونه زیر استفاده کنید:
<?php
function ReverseNum($num){
$num_array = str_split($num);
$reverse_array = array_reverse($num_array);
$output = implode('', $reverse_array);
return $output;
}
echo ReverseNum(1234);
?>
برای تبدیل حروف بزرگ به کوچک در PHP از تابع زیر استفاده کنید:
strtolower();
نویسنده: مصطفی
زمان: ۰۱:۰۵:۱۳ - تاریخ: ۱۳۹۲/۰۸/۰۳
سلام
ایا تابعی در php وجود داره که بشه باهاش کاری که تابع setInterval در جاوا اسکریپت انجام میده پیاده کرد؟
پاسخ: 
سلام
در عمل خیر، PHP در سرور اجرا شده و به محض فراخوانی فایل، مفسر آن را پردازش و خروجی را ارسال می کند، عملا نقطه وقفه یا بازگشتی وجود ندارد، هر چند می توان از sleep در حلقه استفاده کرد، اما این روش توصیه نمی شود و چندان متداول نیست، اگر نیاز است که یک فایل PHP در فواصل زمانی خاصی فراخوانی شود، باید از Ajax یا امکاناتی نظیر Corn Jobs در cPanel استفاده کرد.
نویسنده: مصطفی
زمان: ۱۴:۱۷:۳۳ - تاریخ: ۱۳۹۲/۰۸/۰۳
من یه تایمر دارم که ثانیه به ثانیه جلو میره می تونم با جاوا اسکریپت طراحیش کنم ولی می خوام مقدارش به php ارسال بشه ایا راهی هست
پاسخ: 
باید از Ajax استفاده کنید.
نویسنده: ایمان
زمان: ۱۷:۲۹:۵۰ - تاریخ: ۱۳۹۲/۰۸/۰۷
سلام و خسته نباشید
ببخشید اینجا به توان 2 رسیده نه توان 10
"تابع نمایش حاصل یک عدد به توان 10"
پاسخ: 
سلام
اگر به خروجی تابع دقت کنید، عدد 2 به توان 10 رسیده و نهایتا به 1024 ختم شده! در واقع در هر دور حلقه، عدد در 2 ضرب شده، در دور بعدی مقادیر num افزایش یافته و مجددا در 2 ضرب می شود و... تا به دور 10 برسد.
نویسنده: مومني موگويي
زمان: ۰۵:۵۲:۰۴ - تاریخ: ۱۳۹۲/۰۸/۱۶
سلام و خسته نباشید
ببخشید فرق فراخوانی با مقدار و فراخوانی با ارجاع در توابع چیه میشه با مثال توضیح بدین با تشکر از لطف بی حد شما
پاسخ: 
سلام
توابع هم می توانند آرگومان داشته باشند و هم بدون آرگومان باشند که این موضوع به نیاز برنامه نویس و عملیاتی که تابع باید انجام دهد بستگی دارد، فرق دیگری بین این دو حالت نیست.
نویسنده: مومني موگويي
زمان: ۱۷:۴۷:۲۲ - تاریخ: ۱۳۹۲/۰۸/۱۹
سلام خسته نباشید میشه توابع تو در تو رو همراه با مثال توضیح بدین یک دنیا ممنون
پاسخ: 
سلام
تابع تو در تو به معنی استفاده از یک یا چند تابع درون تابع دیگری است که عملی مرسوم و متداول محسوب می شود، مثال:
<?php
function Func_1($num){
$num += 10;
return $num;
}
function Func_2($num){
$num += Func_1($num);
return $num;
}
echo Func_2(2);
?>
نویسنده: مومني موگويي
زمان: ۱۰:۳۴:۲۳ - تاریخ: ۱۳۹۲/۰۸/۲۱
سلام و خسته نباشید می خواستم بدونم چطور نتیجه این تابع بازگشتی 10000 میشه، می خوام مفهومش رو بدونم ممنون از لطف بی نهایتتون
function power($base, $exp)
{
if($exp){
return $base*power($base,$exp-1);
}
return 1;
}
echo power(10,4);
پاسخ: 
سلام
این تابع در یک دور تکرار تا زمانی که متغیر exp برابر TRUE باشد (بزرگتر از صفر باشد) خودش را به صورت داینامیک فراخوانی می کند و در 4 دور نهایتا خروجی ارسال می کند (خروجی آن صفر است)، return دوم در آخرین دور تابع اجرا می شود و 1 به ابتدای چهار صفر اضافه و در نهایت عدد حاصل 10 به توان 4 را نشان می دهد!
paged صفحه 1 از 4




more لطفا دقت کنید که یادداشت های زیر منتشر نشده و حذف خواهند شد:
- یادداشت های خارج از موضوع این مطلب.
- سوالات کلی، غیر ضروری و مشکلاتی که هیچ تلاشی برای رفع آن نکرده باشید.
- نظرات حاوی کدها و اسکریپت های خیلی طولانی (به طور مثال کد کامل قالب وبلاگ).

8 × 3
 refresh
آگهی
seonab.com
طراحی نرم افزار اندروید
رنگین کمان عکس
Ranginkamaan.com

آرشیو عکس های باکیفیت با موضوعات متنوع...