‎‎توابع در پي اچ پيPHP-‎functions

Previous >    <Next  

‎قدرت واقعيphp ازداشتن توابع است .اين زبان داراي بيش از هزارتابع داخلي است ،كه ميتوان ‎ار آنهابراي موضوعات مختلف استفاده نمود .بجز اينها، امكان ايجاد تابع براي كاربر وجود دارد.

‎‎توابع داخليPHP-‎functions -‎

php‎بيش از هزار تابع داخلي دارد،كه ميتوان مستقيما از آنهادر اسكريپت ها براي موارد خاص ‎استفاده نمود.

‎‎براي آگاهي ازتوابع فهرست كامل آنرا مطالعه فرمائيد.

‎‎تعريف توابع كاربريPHP-‎ user functions

‎علاوه بر استفاده توابع داخلي ،اين امكان وجود دارد كه كابر براي خود تابع ايجاد كند .تابع ‎داراي مشخصات زير است.

‎‎-‎1‎تابع بلوك از دستورات است كه ميتوان بكرات از آن استفاده نمود.

‎‎ -‎2‎هنگام بارگيري صفحه تابع بصورت خودكار اجرا نميشود.

‎‎ -‎3‎تابع فقط با فراخوانيش اجرا ميگردد.

‎‎روش ايجاد تابع كاربريphp-‎user function

‎براي ايجاد تابع بايد با كلمهfunction شروع نمود .بدنبال با حداقل يك فاصله نام تابع يعني functionName()‎‎ ‎شروع ميگردد.بدنبال دستورات تابع بين{} ‎نوشته ميشود .فرمت كلي تابع مطابق زير است.


function functionname() {
   set code to be executed;
}

‎‎نكته ـ نام تابع بايد با يك حرف ويا زير خط شروع شود.

‎‎نكته ـ نامي براي تابع انتخاب كنيد، كه تقريبا گوياي كارش باشد.

‎مثال ـ در مثال زير تابعي با نام ‎"writeMsg()‎‎"‎ايجاد ميكنيم.

‎شروع دستورات بايد علامت{ ‎وپايان آن علامت} ‎باشد.

<?php 
  function writeMsg(){
     echo "Hello world!";
  }
writeMsg(); // call the function
?>

--(go to editor for change code and run)

‎‎آرگومان تابعPHP-‎function Arguments

‎تابع ميتواند داراي پارامتر دريافتي باشد .اين پارامتر هارا آرگومان تابع گويند .اين مثل ‎متغير ميباشند .از طريق اين پارامترها ميتوان اطلاعات به تابع منتقل نمود .آرگومانهاي تابع ‎قرار گرفته وبا كاما تفكيك ميشوند‎ بين ().

‎‎مثال ـ تابع در مثال زير داراي يك پارامتريعني‎$fname‎ ميباشد .

--(go to editor for change code and run)

‎‎مثال ـ درمثال زير تابع داراي دو آرگومان است‎ $fname , $year‎ .

<?php 
  function familyname($fname,$year) {
       echo "$fname Refsens. Born in $year <br>";
 }

familyname("Jani","1975");
familyname("Hege","1980");
familyname("Stale","1978");
familyname("Kai Jim","1983");
?>

--(go to editor for change code and run)

‎همانطوريكه قبلا بحث گرديدphp يك زبان آزاد در نوعdata است .بدين معني لزومي به تعريف ‎نوع متغيرنيست، نوع آن براساس اطلاعات دريافتي مشخص ميشود .در يك برنامه ممكن است تغيركند. ‎ولي درphp7 ميتوان نوع آنرا تعريف نمود،ودرآن رفتار سخت گيرانه نسبت به نوع اطلاعات دارد.

‎‎مثال ـ در مثال زير تابعي با ذكر نوع آرگومان تعريف شده است.

<?php 
  function addnumbers(int $a, int $b){
    return $a+$b;
    }
echo addnumbers(5,"5 days");
// since strict is not enabled "5 days" is changed to  to int(5), and  it
 // will be return 10
?>

--(go to editor for change code and run)

‎اگر مثال را بهمين صورت درphp7 اجرا نمائيم، براي برنامه خطائي صادرنميشود ، وبا توجه به ‎بي معني بودن اين عمل ، نتيجه تابع10 ميشود.

‎اجراي برنامه فوق درphp5 خطاي تعريف آرگومان را داده ومتوقف ميشود .اين خطا بخاطر دقت در ‎عمل نيست، بلكه نوع تعريف آرگومان را نمي پذيرد .اگر تابع بصورت زير تعريف واجرا شود همان ‎نتيجه بي معنيphp7 راميدهد.

  function addnumbers( $a,  $b) {
        return $a+$b;
  }

‎درphp7 براي تعريف نوع اطلاعات امكاني پيش بيني شده، كه ميتوان از اين نوع عمليات ‎غير قابل قبول جلوگيري نموده ، و برنامه را با اعمال محدويت سخت گيرانه تر، بهبود بخشيد.

‎برا رفع اشكال ، بايدstrict _types=1 را ابتدا برنامه اعلام نمائيم .با اين محدويت اختيار ‎كنترل عمليات محاسباتي ودادن پيغام مناسب را بهphp7 ميدهيم .

declare(strict_types =1); //strict_requirement‎

‎مثال ـ همان مثال قبلي با رعايت declare(strict_types=1)‎‎

<?php  declare(strict_types=1);
  //strict requiement
  function addnumbers(int $a, int $b){
    return $a+$b
    }
echo addnumbers(5,"5 days");
// since strict is not enabled "5 days" is changed to  to int(5), and  it
 // will be return 10
?>

--(go to editor for change code and run)

‎‎در صورت اجراي مثال، مشاهده ميكنيد كه پيغام مناسب را داده ونتيجه اشتباه را نمايش نميدهد.

‎‎مقادير پيش فرض آرگومانPHP-‎Defaut Argument Value -‎

‎در تعريف آرگون تابع ميتوان براي آن مقدار پيش فرض (Default Value)‎ ‎مشخص نمود.

‎در مثال زير در تابعsetheight()‎ براي آرگومان‎$minheight‎ مقدار پيش فرض 50منظور ‎شده است .در صورتيكه درcall تابع آرگومان ذكر نشود مقدار پيش فرض در نظر گرفته ميشود .

‎‎مثال

<?php  declare(strict_types=1); // strict requirement ?>
<!DOCTYPE html>
<html>
<body>

<?php 
function setHeight(int $minheight = 50) {
  echo "The height is : $minheight <br>";
}

setHeight(350);
setHeight(); // means setHeight(50);
setHeight(135);
setHeight(80);
?>

</body>
</html>

--(go to editor for change code and run)

‎‎مقدار برگشتي تابعPHP Function Returing -‎

‎مقدار برگشتي در تابع با دستور‎return rusultvalue;‎ انجام ميشود . ‎مقدار در سمت چپ دستور ذكر ميشود.

‎ميتوان براي مقدار برگشتي تابع نوع اطلاعات(type) ‎مشخص نمود .نوع بركشتي قبل از{ ‎با كالون شروع ونوع برگشتي ذكر ميگردد.

‎‎مثال ـ در مثال زير تابع داراي مقدار برگشتي است.

<?php  declare(strict_types=1); // strict requirement
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);
?> 

--(go to editor for change code and run)

‎ميتوان براي تابع نوع مقدار برگشتي متفا وتي با آرگومانها داشت .در چنين موارد، بايد نسبت به ‎صحت وتطابق آن دقت داشت.

‎‎مثال ـ نوع برگشي تابعint وآرگومانهاfloat است، كه متفاوت ميباشند.

<?php 
declare(strict_types=1); //strict requirement
function addnumbers(float $a,float $b) : int  {
  return int($a+$b);
  }
echo addnumbers(1.2,5.2);
?>

--(go to editor for change code and run)

‎‎پارامتر تابع باآدرس منبعPHP-‎Passing Arguments by Refernce -‎

‎درphp معمولا آرگومان تابع ،با مقدارآن منتقل ميشود .در اين روش مثل كپي وارسال اطلاعات ‎به تابع است .يا بعبارتي تابع نسبت به منبع اطلاعات بيگانه. و دسترسي بآن ندارد.يعني بدين فرم ‎نميتوان مقدار آنرا تغير داد.

‎اما ميتوان آرگومان تابع را با آدرس معرفي كرد.دراين حالت ميتوان اطلاعات منبع وردي تابع را ‎تغير داد .اگر در جلوي نام متغيركراكتر يا عملگر ‎&‎‎ ‎قرار گيرد، اين امر ميسر ميگردد.

‎‎مثال ـ نمونه ارسال آدرس متغير به تابع وتغيرمقدارآن متغير درتابع

<?php 
  function add_five(&$value) {
      $value+=5;
  }
  $num=2;
  add_five(&$num);
  echo $num;
?>

--(go to editor for change code and run)

‎‎نكته ـ اين امكان فقط براي ورودي متغير است .در مورد عبارت معني ندارد.


Previous >    <Next