افعال کے ساتھ کام کرنا Working with Functions
آپ نے سیکھا کہ پی ایچ پی میں متعدد بلٹ ان فنکشنز شامل ہیں جنہیں آپ اپنی اسکرپٹ میں استعمال کر سکتے ہیں۔فنکشنز کارآمد ہیں کیونکہ وہ پی ایچ پی اسٹیٹمنٹس کے متعلقہ گروپ کو ایک اکائی کے طور پر استعمال کرنا ممکن بناتے ہیں۔اس سیکشن میں، آپ سیکھیں گے کہ کسٹم فنکشن کیسے لکھنا ہے۔پھر، آپ سیکھیں گے کہ ان فنکشنز کو اپنی اسکرپٹ میں کیسے استعمال کیا جائے۔
افعال کی تشکیل کرنا Defining Functions
اس سے پہلے کہ آپ پی ایچ پی پروگرام میں کوئی فنکشن استعمال کر سکیں، آپ کو پہلے اس فنکشن کو بنانا چاہیے۔کوڈ کی وہ لائنیں جو ایک فنکشن بناتی ہیں انہیں فنکشن ڈیفینیشن کہا جاتا ہے۔فنکشن کی بناوٹ کا طریقہ کار درج ذیل ہے:
پیرامیٹرز ان قوسین کے اندر رکھے جاتے ہیں جو فنکشن کے نام کے بعد آتی ہیں۔ایک پیرامیٹر، ایک متغیر ہے جو کسی فنکشن کو کال کرنے پر پاس کیا جاتا ہے۔پیرامیٹربنانے کے لیے، آپ کو صرف فنکشن کی قوسین کے اندر پیرامیٹر کا نام رکھنے کی ضرورت ہے۔دوسرے الفاظ میں، آپ کو پیرامیٹر کو واضح طور پر تخلیق کرنے اور ابتدائی ویلیو دینے کی ضرورت نہیں ہے جیسا کہ آپ باقاعدہ متغیربناتے وقت کرتے ہیں۔
مثال کے طور پر، فرض کریں کہ آپ ()calculateSalesTotal نامی ایک فنکشن لکھنا چاہتے ہیں جو آن لائن لین دین کے لیے Subtotal$ نامی پیرامیٹر میں موجود نمبر کی سیلزکا ٹوٹل حساب لگاتا ہے۔فنکشن کا نام calculateSalesTotal($Subtotal) کی طرح لکھا جائے گا۔اس صورت میں، فنکشن ڈیکلریشن Subtotal$ نامی ایک نئے رسمی پیرامیٹر (جو ایک متغیر ہے) کو تخلیق کر رہا ہے۔فنکشن میں ایک سے زیادہ پیرامیٹرز کو کوما سے الگ کیا جاتا ہے.جیسے:calculateSalesTotal($Subtotal, $SalesTax, $Shipping)
نوٹ کریں کہ پیرامیٹرز جیسے کہ Subtotal، $SalesTax$، اور Shipping$ کو اس وقت ویلیوز تفویض کی جاتی ہیں، جب آپ اپنے پروگرام میں کسی اور جگہ سے فنکشن کو کال کرتے ہیں ۔آپ مندرجہ ذیل پیرامیٹر کو ڈیفالٹ ویلیوزبھی تفویض کر سکتے ہیں:جیسے
قوسین کے بعد جن میں فنکشن کے پیرامیٹرز ہوتے ہیں کرلی بریسز کا ایک سیٹ ہے جس میں فنکشن اسٹیٹمنٹس ہوتے ہیں۔فنکشن اسٹیٹمنٹ فنکشن کا اصل کام کرتے ہیں (جیسے سیلز کا ٹوٹل حساب لگانا)، اور فنکشن سٹیٹمنٹس کا منحنی خطوط وحدانی کے اندر ہونا ضروری ہے۔فنکشن کی مندرجہ ذیل مثال متعدد کمپنیوں کے نام دکھاتی ہے۔
نوٹس کریں کہ پچھلے فنکشن کو کس طرح تشکیل دیا گیا ہے۔ افتتاحی کرلی بریس اسی لائن پر ہے جس لائن پر فنکشن کا نام ہے، اور اختتامی کرلی بریس فنکشن بیانات کے بعد اپنی لائن پر ہے۔کرلی بریسز کے درمیان ہر بیان کو پانچ حروف کی جگہوں پر حاشیہ(indented) لگایا گیا ہے۔یہ ڈھانچہ ایک معیاری شکل ہے جو پی ایچ پی پروگرامرز استعمال کرتے ہیں۔
سادہ فنکشنز کے لیے، ایک ہی لائن پر فنکشن کا نام، کرلی بریسز اور بیانات شامل کرنا اکثر آسان ہوتا ہے۔
کالنگ فنکشنز Calling Functions
فنکشن کی بناوٹ خود بخود عمل میں نہیں آتی ہے۔فنکشن کی بناوٹ صرف فنکشن کا نام دیتی ہے، اس کے پیرامیٹرز کی وضاحت کرتی ہے، اور ان بیانات کو منظم کرتی ہے جن پر فنکشن عمل درآمد کرے گا۔آپ کو اپنے پروگرام میں کسی اور جگہ سے فنکشن کو چلانے کے لیے فنکشن کال کا استعمال کرنا پڑے گا۔
جب آپ کسی فنکشن میں آرگیومینٹ دیتے ہیں تو ہر آرگیومینٹ کی ویلیو فنکشن ڈیفینیشن میں متعلقہ رسمی پیرامیٹر کی ویلیو کو تفویض کی جاتی ہے۔
مندرجہ ذیل کوڈ ایک اسکرپٹ دکھاتا ہے جو کمپنی کا نام ظاہر کرتا ہے۔ نوٹ کریں کہ فنکشن کالنگ اسٹیٹمنٹ سے پہلے بنایا گیا ہے۔
مندرجہ بالا بیان فنکشن کو کال کرتا ہے اور لفظی سٹرنگ “Efa Technology” کو فنکشن میں منتقل کرتا ہے۔ جب ()displayCompanyName فنکشن لفظی سٹرنگ وصول کرتا ہے، تو یہ CompanyName$ متغیر کو سٹرنگ تفویض کرتا ہے۔
متغیرات کے برعکس، فنکشن کے نام کیس ان سنسیٹیو ہوتے ہیں، جس کا مطلب ہے کہ آپ مندرجہ ذیل بیانات میں سے کسی کے ساتھ ()displayCompanyName فنکشن کو کال کرسکتے ہیں۔
تاہم، ہمیشہ اسی کیس کا استعمال کرتے ہوئے فنکشن کو کال کرنا اچھا عمل ہے جو فنکشن کے نام کی وضاحت کے لیے استعمال کیا گیا تھا۔
واپسی اقدار Returning Values
بہت سی مثالوں میں، آپ چاہتے ہیں کہ آپ کا پروگرام کسی کالڈ فنکشن سے نتائج حاصل کرے اور پھر ان نتائج کو دوسرے کوڈ میں استعمال کرے۔مثال کے طور پر، ایک فنکشن پر غور کریں جو اعداد کی ایک سیریز کی اوسط کا حساب لگاتا ہے جو اسے بطور آرگیومنٹس دی گئی ہیں.اس طرح کا فنکشن بیکار ہے اگر آپ کا پروگرام کہیں اور نتیجہ ظاہر یا استعمال نہیں کرسکتا ہے۔ایک اور مثال کے طور پر، فرض کریں کہ آپ نے ایک فنکشن بنایا ہے جو صرف ایک کمپنی کا نام دکھاتا ہے۔یہ بھی فرض کریں کہ آپ پروگرام کو تبدیل کرنا چاہتے ہیں تاکہ یہ کوڈ کے دوسرے حصے میں کمپنی کا نام استعمال کرے۔آپ کالنگ اسٹیٹمنٹ کسی متغیر کو تفویض کرکے فنکشن سے کالنگ اسٹیٹمنٹ میں ویلیو واپس کرسکتے ہیں۔درج ذیل اسٹیٹمنٹ ()averageNumbers نامی فنکشن کو کال کرتی ہے اور ReturnValue$ نامی متغیر کو واپسی کی ویلیو تفویض کرتی ہے۔بیان فنکشن میں تین لٹریل ویلیوز کو بھی پاس کرتا ہے۔
ReturnValue = averageNumbers(1, 2, 3)$
اصل میں ReturnValue$ متغیر میں ویلیو واپس کرنے کے لیے، کوڈ میں ()averageNumbers نامی فنکشن کے اندر واپسی کا بیان شامل ہونا چاہیے۔
ریٹرن سٹیٹمنٹ اس بیان کو ویلیو تفویض کرتی ہے جو فنکشن کو کا کرتی ہیں۔مندرجہ ذیل اسکرپٹ ()averageNumbers نامی فنکشن پر مشتمل ہے، جو تین نمبروں کی اوسط کا حساب لگاتا ہے۔اسکرپٹ میں ریٹرن سٹیٹمنٹ بھی شامل ہے جو کالنگ اسٹیٹمنٹ کو ویلیو (Result$ متغیر میں موجود) واپس کرتی ہے۔
اگلے مراحل میں، آپ ایک اسکرپٹ بنائیں گے جس میں دو فنکشنز ہوں گے۔ پہلا فنکشن کال کرنے پر ایک پیغام دکھاتا ہے، اور دوسرا فنکشن ایک ویلیو واپس کرتا ہے جو کالنگ اسٹیٹمنٹ کے بعد ظاہر ہوتی ہے۔
آئیے ایک اسکرپٹ بنائیں جس میں دو افعال ہوں:
- اپنے ٹیکسٹ ایڈیٹر میں ایک ڈاکومنٹ بنائیں اور اسے TwoFunctions.php نام سے محفوظ کریں.
- اگر آپ وی.ایس کوڈ استعمال کر رہے ہیں تو html:5 ٹائپ کریں اور ایچ ٹی ایم ایل کا بنیادی ٹمپلیٹ بنائیں.
- ڈاکو منٹ باڈی کے اندر میعاری پی ایچ پی ڈیلمیٹرز شامل کریں.
- میعاری پی ایچ پی ڈیلمیٹرز کے اندر ایک displayMessage($FirstMessage) فنکشن لکھیں.یہ فنکشن ایک آرگیومنٹ جو کالنگ سٹیٹمنٹ اسے مہیا کرتی ہے، کی مدد سے سکرین پر ایک مسیج ظاہر کرے گا
- اسکرپٹ سیکشن کے آخر میں دوسرا فنکشن شامل کریں، جو دوسرا پیغام دکھاتا ہے۔اس صورت میں، پیغام (“is
message was returned from a function۔”) فنکشن میں ہی واضع کیا جاتا ہے۔اس فنکشن کا واحد مقصد لٹریل سٹرنگ کو کالنگ اسٹیٹمنٹ میں واپس کرنا ہے۔
- اسکرپٹ سیکشن کے آخر میں درج ذیل تین بیانات شامل کریں۔ پہلا بیان ویب براؤزر میں ٹیکسٹ سٹرنگ “This message was displayed from a
function.” دکھاتا ہے. ۔ یہ بیان ریٹرن ویلیو وصول نہیں کرتا ہے۔دوسرا بیان ReturnValue$ نامی ایک متغیر کو فنکشن کال تفویض کرتا ہے، لیکن فنکشن کو کوئی آرگیومنٹ نہیں بھیجتا ہے۔تیسرا بیان اسکرین پرReturnValue$ متغیر کی ویلیولکھتا ہے۔
- ڈاکومنٹ کو ویب سرور اپ لوڈ کریں اور اپنے ویب براؤزر میں کھولیں.
- ویب براؤزر ونڈو بند کر دیں.
حوالہ کے لحاظ سے پیرامیٹرز کو پاس کرنا Passing Parameters by Reference
عام طور پر، متغیر کی ویلیو کو فنکشن کے پیرامیٹر کے طور پر منتقل کیا جاتا ہے۔پی ایچ پی پیرامیٹر کو ویلیوکے لحاظ سے منتقل کرتا ہے، جس کا مطلب ہے کہ متغیر کی ایک لوکل کاپی بنائی گئی ہے جو فنکشن استعمال کرے گا۔فنکشن کے اندر پیرامیٹر کی ویلیو میں کی گئی کوئی بھی تبدیلی اس وقت ضائع ہو جاتی ہے جب کنٹرول فنکشن سے پروگرام میں واپس چلا جاتا ہے۔
کبھی کبھی آپ چاہتے ہیں کہ فنکشن پیرامیٹر کی ویلیو تبدیل کرے۔ اگر ایسا ہے تو، آپ پیرامیٹر کو مقامی کاپی کے بجائے حوالہ سے پاس کر سکتے ہیں، فنکشن میں اصل متغیر استعمال کیا جاتا ہے۔فنکشن کے ذریعہ اس متغیر میں کی گئی کوئی بھی تبدیلی فنکشن مکمل ہونے کے بعد بھی باقی رہے گی۔
بطورحوالہ منتقل کرنے کے لیے، آپ فنکشن ڈیکلریشن میں پیرامیٹر کے نام کے ڈالر کے نشان سے پہلے ایک ایمپرسینڈ (&) ڈالتے ہیں۔آپ پہلے کی طرح ہی سنٹیکس کا استعمال کرتے ہوئے فنکشن کو کال کرتے ہیں، اور بطورپیرامیٹر منتقل کیے جانے والے متغیر کے نام سے پہلے ایمپرسینڈ شامل نہیں کرتے ہیں۔
درج ذیل مثال میں دو افعال شامل ہیں۔ پہلا، ()IncrementByValue، ویلیو کے لحاظ سے پیرامیٹر کو قبول کرتا ہے۔ دوسرا، ()IncrementByReference، حوالہ کے لحاظ سے پیرامیٹر کو قبول کرتا ہے۔
جیسا کہ آپ اوپر کی شکل میں دیکھ سکتے ہیں، دونوں فنکشنز پیرامیٹر کو بڑھاتے ہیں۔ تاہم، جب کنٹرول مرکزی پروگرام میں واپس آجاتا ہے،تو Count$ کی ویلیو صرف ()IncrementByReference کو کال کرنے کے بعد تبدیل ہوتی ہے۔
مختصر سوال
- پی ایچ پی اسکرپٹ میں کسٹم فنکشنز بنانے کے دو مراحلی عمل کی وضاحت کریں۔
- ایک فنکشن میں ریٹرن سٹیٹمنٹ کا مقصد بیان کریں۔
- وضاحت کریں کہ کچھ فنکشن کو پیرامیٹرز کی ضرورت کیوں نہیں ہے۔
- وضاحت کریں کہ کچھ فنکشنز میں ریٹرن سٹیٹمنٹ کیوں نہیں ہوتی ہے۔
- پیرامیٹر کو کسی فنکشن کو ویلیوکے لحاظ سے اور حوالہ کے لحاظ سے منتقل کرنے کے درمیان فرق کی وضاحت کریں۔