PHP سیکھیں – حصہ چہارم

ڈیٹا ٹائپ کی تبدیلی

بعض اوقات ایسا بھی ہوتا ہے کہ پروگرام کے کسی حصے میں ایک ڈیٹا ٹائپ کو دوسری ڈیٹا ٹائپ میں تبدیل کرنا پڑ جاتا ہے۔ اسے کاسٹنگ (Casting)بھی کہتے ہیں۔ اس عمل میں ایک ویری ایبل کی ڈیٹا ٹائپ کسی دوسری ڈیٹا ٹائپ میں تبدیل کرکے اس کی ویلیو کو بھی اسی ڈیٹا ٹائپ کے مطابق کردیا جاتا ہے۔ مثال کے طور پر ایک ویری ایبل جس کی ڈیٹا ٹائپ اسٹرنگ ہے میں آپ نے کوئی اعداد محفوظ کررکھے ہیں۔ آپ اسے کاسٹ کرکے انٹیجر میں تبدیل کرسکتے ہیں۔

پی ایچ پی میں ڈیٹا ٹائپ تبدیل کرنے کا کام بے حد آسان ہے۔ اس کے لئے پی ایچ پی نے ایک فنکشن settype فراہم کیا ہے۔ ملاحظہ فرمائیں مندرجہ ذیل کوڈ جس میں setypeکا استعمال دکھایا گیا ہے۔

<?php
$undecided = 3.14;
echo "is ".$undecided." a double? ". is_double($undecided)."<br/>";
settype($undecided, 'string');
echo "is ".$undecided." a string? ". is_string($undecided)."<br/>";
settype($undecided, 'integer');
echo "is ".$undecided." an integer? ". is_integer($undecided)."<br/>";
settype($undecided, 'double');
echo "is ".$undecided." a double? ". is_double($undecided)."<br/>";
settype($undecided, 'bool');
echo "is ".$undecided." a boolean? ". is_bool($undecided)."<br/>"; 
?>

اس کوڈ کو رن کرنے سے آپ کو درج ذیل نتیجہ حاصل ہوگا:

<?php
is 3.14 a double? 1
is 3.14 a string? 1
is 3 an integer? 1
is 3 a double? 1
is 1 a boolean? 1

اس مثال سے واضح ہے کہ setype کا سینٹیکس کچھ یوں ہے:

setype(variable_name, new datatype)

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

$newvar = (integer) $originalvar

آپ اس میں دیکھ سکتے ہیں کہ ہم نے ایک نیا ویری ایبل $newvar کے نام بنایا اور اس کی ویلیو کے میں پہلے ڈیٹا ٹائپ اور پھر وہ ویری ایبل جس کی ڈیٹا ٹائپ تبدیل کرنا مقصود ہے، کا نام لکھا۔ یہ ہی کاسٹنگ ہے۔
آئیے کاسٹنگ کے عمل کو ایک مثا ل کے ذریعے سمجھنے کی کوشش کرتے ہیں۔

<?php
$undecided = 3.14;
$holder = (double) $undecided;
echo "is ".$holder." a double? " . is_double($holder)."<br/>";
$holder = (string) $undecided;
echo "is ".$holder." a string? " . is_string($holder)."<br/>";
$holder = (integer) $undecided;
echo "is ".$holder." an integer? " . is_integer($holder)."<br/>";
$holder = (double) $undecided;
echo "is ".$holder." a double? " . is_double($holder)."<br/>";
$holder = (boolean) $undecided;
echo "is ".$holder." a boolean?" . is_bool($holder). "<br/>";
echo "original variable type of $undecided: ";
echo gettype($undecided);
?>

اس کوڈ کو رن کرنے پر آپ کو مندرجہ ذیل نتیجہ حاصل ہوگا۔

is 3.14 a double? 1
is 3.14 a string? 1
is 3 an integer? 1
is 3.14 a double? 1
is 1 a boolean? 1
original variable type of 3.14: double

آپ دیکھ سکتے ہیں کہ اصل ویری ایبل کی ڈیٹا ٹائپ تبدیل نہیں ہورہی۔ صرف اس ویری ایبل کی ویلیو دوسرے ویری ایبل میں کاپی ہورہی ہے اور اسی کی ڈیٹا ٹائپ تبدیل ہورہی ہے۔

اس کوڈ کے آخر میں ایک نیا فنکشن gettype($undecided); استعمال کیا گیا ہے۔ یہ فنکشن کسی ویری ایبل کی ڈیٹا ٹائپ معلوم کرنے کے لئے لئے استعمال ہوتا ہے۔ تاہم کوشش کی جانی چاہئے کہ یہ فنکشن نہ ہی استعمال کیا جائے۔ کیوں کہ اس فنکشن کے استعمال سے اسکرپٹ کے ایگزی کیوشن ٹائم میں اضافہ ہوجاتاہے۔ لہٰذا اس کے بجائے کنڈیشنز اور is_ فنکشنز کے استعمال سے ڈیٹا ٹائپ پہچاننی چاہئے۔

پی ایچ پی