PHP سیکھیں – حصہ سوم

گلوبل ویری ایبلز اور ویری ایبل اسکوپ

ویری ایبل بناتے ہوئے جہاں نام کا خیال رکھنا ضروری ہے وہیں ان کی دستیابی کا بھی دھیان رکھنا ہوتا ہے۔ اگر پہلے ہی ایک ویری ایبل اس نام سے بنایا جاچکا ہے اور آپ دوبارہ اسی نام سے ویری ایبل بنانے کی کوشش کرتے ہیں تو پرانے ویری ایبل ہی کو نئی قدر مہیا ہوجاتی ہے۔

جب آپ کوئی ویری ایبل بناتے ہیں تو جس اسکرپٹ یا فنکشن میں آپ نے اسے بنایا ہے ، یہ ویری ایبل صرف اسی اسکرپٹ یا فنکشن میں دستیاب ہوگا۔ فرض کریں آپ نے ScriptA میں ایک ویری ایبل $num1 کے نام سے بنایا ہے اور اس کی ویلیو 123 رکھی ہے۔ اسی نام سے ایک اور ویری ایبل ScriptB میں بھی بنایا جاسکتا ہے جو کی ویلیو کچھ بھی ہوسکتی ہے۔ دوسرے الفاظ میں ایک اسکرپٹ یا فنکشن کے ویری ایبل کسی دوسرے اسکرپٹ یا فنکشن کے ویری ایبلز کو متاثر نہیں کرتے۔ یہ کسی ویری ایبل کا اسکوپ کہلاتا ہے۔ابھی مثال میں جن ویری ایبلز کا ہم ذکر کررہے تھے، یہ لوکل ویری ایبلز کہلاتے ہیں کیونکہ ان کا اسکوپ صرف اسکرپٹ یا فنکشن کی حد تک محدود رہتا ہے۔

آپ ایسے ویری ایبل بھی بنا سکتے ہیں جو کسی فنکشن میں بنائے گئے ہوں لیکن وہ پورے اسکرپٹ میں ہر جگہ قابل استعمال ہوں۔ ایسے ویری ایبل گلوبل کہلاتے ہیں کیونکہ ان کا اسکوپ گلوبل ہوتاہے۔

فرض کریں آپ ایک گلوبل ویری ایبل $name کے نام سے ScriptB اور ScriptA میں بناتے ہیں۔ ScriptA میں اس ویری ایبل کی ویلیو PHP رکھی گئی ہے۔ دونوں اسکرپٹ آپس میں لنک ہیں۔ یعنی ایک اسکرپٹ میں دوسرا اسکرپٹ include کیا گیا ہے(یہ عمل بھی آپ آئندہ پڑھیں گے)۔ تو دونوں اسکرپٹس میں $name کی ویلیو ایک ہی رہے گی۔ اگر کسی ایک اسکرپٹ میں اس کی ویلیو تبدیل کی جاتی ہے تو دوسرے اسکرپٹ میں بھی یہ تبدیلی خود بخود واقع ہوجائے گی۔

جہاں آپ اپنے گلوبل ویری ایبلز بنا سکتے ہیں وہیں پی ایچ پی میں ایک خاص طرح کے ویری ایبلز پہلے سے موجود ہوتے ہیں جنھیں سپر گلوبل ویری ایبلز کہا جاتا ہے۔ یہ ویری ایبل ہر وقت ہر جگہ دستیاب ہوتے ہیں۔ درحقیقت یہ کوئی ایک ویری ایبل نہیں ہوتے بلکہ بہت سے دیگر ویری ایبلز کے ایرے (Array) ہوتے ہیں۔ یوں سمجھیں کہ ان ویری ایبلز کے اندر بہت سے دوسرے ویری ایبلز پوشیدہ ہوتے ہیں جن کی اپنی اپنی قدریں ہوتی ہیں۔

مندرجہ ذیل کچھ سپر گلوبل ویری ایبلز ہیں۔

$_GET :

یہ سپر گلوبل ویری ایبل Getمیتھڈ کے ذریعے اسکرپٹ کو دی گئی ویلیوز رکھتا ہے۔ مثال کے طور پر اگر آپ نے ایک ایچ ٹی ایم ایل فارم بنایا ہے جس کی method ایٹری بیوٹ کی ویلیو GET رکھی گئی ہے۔ جب اس فارم کو سبمٹ کیا جاتا ہے تو فارم میں بھری گئی تمام ویلیوز $_GET ویری ایبلز میں محفوظ ہوجاتی ہیں۔

$_POST:

GET ویری ایبلز کی طرح یہ بھی ایچ ٹی ایم ایل فارم میں بھری گئی قدریں محفوظ رکھتے ہیں۔ لیکن ایسا تبھی ممکن ہے جب فارم میں method کا ایٹری بیوٹ POST سیٹ کیا گیا ہو۔ مذکورہ بالا دونوں ویری ایبلز کثرت سے استعمال کئے جاتے ہیں۔ اگلے ماہ کی قسط میں ہم انہیں ویری ایبلز کے ذریعے فارم میں بھری گئی قدریں اسکرین پر ظاہر کروائیں گے۔

$_COOKIE:

یہ ویری ایبل کوکیز سے حاصل ہونے والی معلومات محفوظ رکھتے ہیں۔

$_FILES:

اس ویری ایبل میں اپ لوڈ کی گئی فائل کے بارے میں معلومات محفوظ ہوتی ہیں۔

$_SERVER:

اس ویری ایبل میں ویب پیج یا اسکرپٹ کے ہیڈر، فائل اور اسکرپٹ کے پاتھ وغیرہ کے بارے میں معلومات محفوظ ہوتی ہیں۔

$_ENV :

یہ ویری ایبل اسکرپٹ کو فراہم کئے گئے انوائرئنمنٹ ویری ایبلز محفوظ رکھتا ہے۔ انوائرنمنٹ ویری ایبلز میں آپریٹنگ سسٹم، پی ایچ پی کے ورژن وغیرہ کی معلومات شامل ہوتی ہیں۔

$_REQUEST:

صارف کی فراہم کردہ قدر چاہے وہ کسی بھی ذریعے سے بھیجی گئی ہو یعنی فارم، کیوری اسٹرنگ وغیرہ، سب اس میں محفوظ ہوتی ہیں۔

$_SESSION:

صارف کے سیشن یعنی جب سے وہ سرور کے ساتھ کنکٹ ہے، کی معلومات اس ویری ایبل میں محفوظ رکھی جاتی ہیں۔
ان تمام سپر گلوبل ویری ایبلز کو ہم اپنی آئندہ آنے والی اقساط میں وقتاً فوقتاً تفصیل سے بیان کرتے رہیں گے۔

ڈیٹا ٹائپس

مختلف طرح کا ڈیٹا میموری میں مختلف جگہ گھیرتا ہے۔ ساتھ ہی جب ان کو اسکرپٹ میں کہیں استعمال کیا جاتا ہے تو یہ ایک دوسرے سے مختلف برتاؤ کا مظاہرہ کرتے ہیں۔کچھ پروگرامنگ لینگویجز میں ضروری ہوتا ہے کہ آپ کسی بھی ویری ایبل کو بناتے ہوئے اسکی ڈیٹا ٹائپ بھی لازماً فراہم کریں۔ لیکن پی ایچ پی میں ایسی کوئی پابندی نہیں۔ اس لئے اسے loosely typed لینگویج کہا جاتا ہے کیوں کہ یہ کسی بھی ڈیٹا کی ڈیٹا ٹائپ کو اسی وقت پہنچا لیتی ہے جب اسے کسی ویری ایبل کو اسائن کیا جارہا ہوتا ہے۔

یہ لچک جہاں بہت سے فوائد کا باعث ہے وہیں اس کے کئی نقصانات بھی ہیں۔ اس کے فوائد میں سب سے اہم تو یہی ہے کہ ایک اسکرپٹ جس میں پہلے ایک ویری ایبل میں کوئی ٹیکسٹ محفوظ کیا گیا ہو، اسی ویری ایبل میں کوئی عدد بھی محفوظ کیا جاسکتا ہے۔ لیکن بڑے اسکرپٹس میں یہی خوبی اس وقت خامی میں بدل جاتی ہے جب آپ کسی ویری ایبل کی ڈیٹا ٹائپ انٹیجر توقع کررہے ہوتے ہیں لیکن جواب میں آپ کو اس کی ڈیٹا ٹائپ اسٹرنگ مل رہی ہوتی ہے۔ ایسی صورت میں اسکرپٹ کریش بھی ہوسکتا ہے۔

اس سے پہلے کہ ہم ڈیٹا ٹائپس کے بارے میں مزید بات کریں، ہم ایک مثال کے ذریعے ڈیٹا ٹائپس کے تصور کو واضح کرنے کی کوشش کرتے ہیں۔

<?php
$testing;
echo "is null? ".is_null($testing); 
echo "<br/>";
$testing = 5;
echo "is an integer? ".is_int($testing);
echo "<br/>";
$testing = "five";
echo "is a string? ".is_string($testing);
echo "<br/>";
$testing = 5.024;
echo "is a double? ".is_double($testing); 
echo "<br/>";
$testing = true;
echo "is boolean? ".is_bool($testing);
echo "<br/>";
$testing = array('apple', 'orange', 'pear');
echo "is an array? ".is_array($testing);
echo "<br/>";
echo "is numeric? ".is_numeric($testing);
echo "<br/>";
echo "is a resource? ".is_resource($testing);
echo "<br/>";
echo "is an array? ".is_array($testing);
echo "<br/>";
?>

اس مثال میں ہم نے کچھ نئے فنکشنز کا بھی ذکر کیا ہے جنھیں سمجھنا کچھ مشکل نہیں اور ان کا کام اسی مثال میں واضح ہورہا ہے۔

(جاری ہے)

پی ایچ پیمائی ایس کیو ایل