পৃষ্ঠাসমূহ

Thursday, May 30, 2013

ভ্যারিয়েবলের ব্যবহার পিএউচপি টিউটোরিয়াল ( :: পর্ব-৩ :: )





কিছু প্রাথমিক কথা

যেকোন ল্যাংগুয়েজ কোডিং করতে গেলেই ভ্যারিয়েবল এবং ফাংশন সম্বন্ধে আপনার ধারণা থাকা দরকার। আমি এই টিউটোরিয়াল এ ভ্যারিয়েবল নিয়ে বিস্তারিত আলোচনা করব। আপনার যদি ভ্যারিয়েবল সম্বন্ধে আগে থেকেই ভাল ধারণা থাকে তবুও এই টিউটোরিয়ালটি একবার চোখ বুলিয়ে নিন। হয়তো নতুন কিছু পেতেও পারেন।

৩.১ ভ্যারিয়েবল কি?

ভ্যারিয়েবল হল একটি কনটেইনারের মত যেখানে কোন ডাটা ষ্টোর করা যায়। ভ্যারিয়েবল বেশ কয়েক ধরণের হতে পারে। একেক ধরণের ভ্যারিয়েবলে একেক ধরণের ডাটা রাখা যায়। আপনার মনে প্রশ্ন জাগতে পারে যে ডাটার এই প্রকারগুলো কি কি। পিএইচপি তে ডাটা মূলত দুই প্রকার, নিউমেরিক্যাল এবং আলফা নিউমেরিক্যাল। যেই ডাটাতে ক্যারেকটার টাইপের ডাটা থাকে যেসন a,b,c,d বা অন্যান্য প্রিন্টেবল ক্যারেক্টার যেমন @,#,$,% তাকে আলফা নিউমেরিক্যাল ডাটা বলে। এদের মাঝে 1,2,3,4,5, এরাও পড়ে। আলফা নিউমেরিক্যাল ডাটা পিএইচপিতে স্ট্রিং ডাটা নামে পরিচিত। আর যে ডাটাতে শুধু 1,2,3,4,5,6,7,8,9,0 এই কয়েকটি সংখ্যা থাকে তাকে বলে নিউমেরিক্যাল ডাটা। নিউমেরিক্যাল ডাটার আবার বেশ কিছু প্রকারভেদ আছে, যেমন- পূর্ণ সংখ্যা, ভগ্ন সংখ্যা। পিএইচপির বিভিন্ন ডাটা টাইপ এবং তাদের ধরণ নিয়ে আমি নিচে আলোচনা করলাম।


ভ্যারিয়েবলের নাম রাখার ক্ষেত্রে খেয়াল রাখতে হবে যে এদের নামের শুরু যেন ‘$’ চিহ্ন দিয়ে শুরু হয়। এছাড়া ভ্যারিয়েবলের নাম ‘$’ সাইনের পরে অবশ্যই কোন এলফাবেটিক ক্যারেক্টার বা আন্ডারস্কোর দিয়ে শুরু হতে হবে। এক্ষেত্রে কোন সংখ্যা ব্যবহার করা যাবে না। $avc, $_abc ভ্যারিয়েবলের নাম হিসেবে সঠিক, কিন্তু $1abc নয়।


৩.২ পিএইচপিতে বিভিন্ন ডাটা টাইপ


ইন্টেজার (Integer) : ইন্টেজার হল পূর্ণ সংখ্যা। অর্থাৎ এতে কোন দশমিক সংখ্যা থাকতে পারবে না। উদাহরণ হিসেবে বলা যায় ১২, ৩৫ ইত্যাদি। ইন্টেজার টাইপের ভ্যারিয়েবলে -2,147,483,648 থেকে +2,147,483,647 পর্যন্ত যেকোন সংখ্যা রাখা যায়।তুলনামূলকভাবে বলা যায় C ল্যাংগুয়েজের long টাইপের ডাটা এবং পিএইচপির ইন্টেজার টাইপের ডাটা সমপর্যায়ের। ইন্টেজার ভ্যারিয়েবলে আপনি যদি এর লিমিটের বাইরে কোন সংখ্যা অর্থাৎ অনেক বড় কোন সংখ্যা রাখেন তাহলে পিএইচপি ওভারফ্লো এরর এড়ানোর জন্য অটোমেটিক্যালি সেই ডাটাকে “Floating point” টাইপের ভ্যারিয়েবলে পরিবর্তন করে ফেলে। পিএইচপিতে আরেকটি মজার কাজ করা যায় এই ইন্টেজার ভ্যারিয়েবল নিয়ে। সেটা হল আপনি এতে ডেসিম্যাল (বেস ১০), অকটাল (বেস ৮) বা হেক্সাডেসিম্যাল (বেস ১৬) সংখ্যা রাখতে পারেন। নিচে এর একটা উদাহরণ দেখানো হল।


$decimal=16;// ডেসিম্যাল সংখ্যা 

$hex=0x10;//  হেক্সাডেসিম্যাল সংখ্যা

$cotal=020;//  অকটাল সংখ্যা

ফ্লোটিং পয়েন্ট (Floating Point) : ফ্লোটিং পয়েন্ট হল দশমিক যুক্ত সংখ্যা বা ভগ্ন সংখ্যা। তুলনামূলক ভাবে বলা যায় C ল্যাংগুয়েজের double টাইপের ডাটা এবং পিএইচপির ফ্লোটিং পয়েন্ট টাইপের ডাটা সমপর্যায়ের। বেশিরভাগ অপারেটিং সিস্টেমেই ফ্লোটিং পয়েন্ট ভ্যারিয়েবলের রেঞ্জ হল 1.7E-308 থেকে 1.7E+308 পর্যন্ত। ফ্লোটিং পয়েন্ট টাইপের ভ্যারিয়েবল সাধারণভাবে অথবা সায়েন্টিফিক নোটেশন সহ দুইভাবে ডাটা রাখা যায়। নিচে উদাহরণ দেখানো হল।

$var=0.017;// সাধারণভাবে

$var=17.0E-3;// সায়েন্টিফিক নোটেশন সহ।

উল্লেখ্য যে অনেক বড় বড় সংখ্যা নিয়ে অত্যাধিক নির্ভুলতার সাথে কাজ করার জন্য পিএইচপিতে দুই ধরণের ফাংশন সেট আছে, যথা BC Math (www.php.net/bc) এবং GMP (www.php.net/gmp)। আমি পরে এদেরকে নিয়ে আলোচনা করব।

স্ট্রিং (String): স্ট্রিং হল সারিবদ্ধভাবে রাখা কতগুলো ক্যারেক্টার। ক্যারেক্টার কিন্তু নিউমেরিক এবং আলফা নিউমেরিক দুরকমই হতে পারে। পিএইচপিতে স্ট্রিং ভ্যারিয়েবলে ডাটা রাখতে হলে তাকে সিংগেল কোটেশন বা ডাবল কোটেশন মার্ক দ্বারা আবদ্ধ করতে হয়। নিচের উদাহরণটি দেখুন

$str1 =“Hello World”;

$str2 =“Hello World”;

আপনি যদিও যেকোনভাবেই স্ট্রিং লিখতে পারেন, কিন্তু এদের মাঝে একটা বিশাল পার্থক্য আছে। সেটা হল ডাবল কোটেড স্ট্রিংয়ে ভ্যারিয়েবল সাবস্টিটিউশন এবং এসকেপিং সম্ভব যা সিঙ্গেল কোটেড স্ট্রিংয়ে সম্ভব নয়।

ভ্যারিয়েবল সাবস্টিটিউশন: স্ট্রিং এর মাঝে যদি কোন ভ্যারিয়েবল থাকে তাহলে পিএইচপি সেই স্ট্রিংকে পার্স করার সময় ভ্যারিয়েবলে মান বসিয়ে তাকে পার্স করে যেমন,


$str1 =“Hello”;

$str2 =“$str1 World”;


উপরের উদাহরণে $str2 র মান হবে “Hello World” কারণ এই স্ট্রিংয়ের মাঝে $str1 নামে একটি ভ্যারিয়েবল ছিল, সেজন্য পিএইচপি $str2 পার্স করার সময় $str1 এর মান বসিয়ে দিয়েছে। এই ব্যাপারটিকেই বলে ভ্যারিয়েবল সাবস্টিটিউশন।





এসকেপিং: এসকেপ ক্যারেক্টার হল এমন একটি ক্যারেক্টার যার সমন্বয়ে অন্য কিছু ক্যারেক্টার লিখলে তাদের মান আলাদা অর্থ বহন করে। পিএইচপিতে “\” হল এসকেপ ক্যারেক্টার। এর সাথে মিলিতভাবে কিছু নির্দিষ্ট ক্যারেক্টার এর বিশেষ মান রয়েছে। নিচে এদের উদাহরণ দেয়া হল।



এসকেপ সিকোয়েন্স অর্থ

\n নতুন লাইন (LF or 0x0A (10) in ASCII)

\r ক্যারেজ রিটার্ন (CR or 0x0D (13) in ASCII)

\t হরাইজন্টাল ট্যাব (HT or 0x09 (9) in ASCII)

\\ ব্যাকস্ল্যাশ

\$ ডলার সাইন

\” ডাবল কোট

\123 অকটাল মান দিয়ে যেকোন ক্যারেক্টার চিহ্নিত করা যায়

\x12 হেক্সাডেসিম্যাল মান দিয়ে যেকোন ক্যারেক্টার চিহ্নিত করা যায়।

উদাহরণ:
echo “Hello /tWorld” লিখলে Hello World ডিসপ্লেস্থ হবে।

echo “\“Hello World\”” লিখলে Hello World ডিসপ্লেস্থ হবে।

সিঙ্গেল কোটেড স্ট্রিংয়ে এধরণের এসকেপিং এবং ভ্যারিয়েবল সাবস্টিটিউশন হয় না। যেমন নিচের উদাহরণটি দেখুন।

$str1 = “Hello”;

$str2 = ‘str1 World’;

echo $str2;

এখন কিন্তু “Hello World” প্রিন্ট হবার বদলে “$str1 World” ই প্রিন্ট হবে।

্‌আমরা উপরে দেখেছি স্ট্রিং ভ্যারিয়েবলের মান বসাতে গেলে $variable = “value” এভাবে লিখলে চলে। কিন্তু কখনো যদি অনেক বড় একটি প্যারা ভ্যাল হিসেবে সেট করা দরকার হয় তখন কি করবেন? ধরুন আপনার দরকার নিচের প্যারাটি কোন ভ্যারিয়েবল ভ্যালু হিসেবে সেট করা দরকার।

Hello World

How is everyone?

How are you?

একে আপনি নিচের মত করে বসাতে পারেন।

$str = “Hello World \nHow is everyone? \nHow are you?”;

echo $str;

কিন্তু একে আরো অনেক সহজে নিচের মত করে করা যায়।

$str = <<< END

Hello World

How is everyone?

How are you?

END;

echo $str;

উপরের উদাহরণ কিন্তু আগের মতই কাজ করবে, কিন্তু এভাবে লেখার ফলে আপনাকে একটা স্ট্রিং ভ্যারিয়েবলে বার বার এসকেপ ক্যারেক্টার লিখতে হচ্ছে না। এছাড়া এইভাবে লেখার ফেল কোড বেশ বোধগম্য থেকে যাচ্ছে। এই লেখার স্টাইলটিকে বলে “heredoc”। উপরের কোডে আপনি স্ট্রিংয়ের মাঝে ভ্যারিয়েবলও লিখতে পারবেন। নিচের উদারহণটি দেখুন।

$var = “World”;

$str = <<<END

Hello $var

How is everyone?

How are you?END;



echo $str;

এখানে কিন্তু ভ্যারিয়েবল সাবস্টিটিউশনের কারণে আউটপুট আগের মতই থাকবে। উল্লেখ্য যে আমি যেখানে END লিখেছি তা আসলে একধরণের মার্কার। আপনি যা ইচ্ছা ব্যবহার করতে পারেন।

বুলিয়ান (Boolean): বুলিয়ান হল এমন এক ধরণের ভ্যারিয়েবল যা শুধুমাত্র দুই ধরণের মান ষ্টোর করতে পারে, true এবং false। কোন বুলিয়ান ভ্যারিয়েবল 0 এবং null বাদে যেকোন মান ষ্টোর করলেই তা true হিসেবে গণ্য হবে।
নিচের উদাহরণটি দেখুন।

$bool = true;

echo $bool;

আউটপুট আসবে 1, এছাড়া 0 এবং null বাদে যেকোন মানই যে true তা বোঝার জন্য নিচের উদাহরণটি দেখুন।

$bool =7;

echo $bool ==true;



$bool = “hello”;

echo $bool ==true;

উভয়ক্ষেত্রেই আউটপুট আসবে ১।

৩.৩ পিএইচপিতে টাইপ কাস্টিং

এক ধরণের ভ্যারিয়েবলের মান অস্য ধরণের ভ্যারিয়েবলে পরিবর্তন করার পদ্ধতিই হল টাইপ কাস্টিং। ধরুন আপনি একটি স্ট্রিংয়ে “123abc” ষ্টোর করেছেন। এখন চাচ্ছেন একে ইন্টেজারে পরিবর্তন করতে। সেক্ষেত্রে নিচের মত কোড লিখতে পারেন।

$int=(int)“123abc”;

echo $int

আউটপুট আসবে ১২৩। উপরের উদারহণে (int) হল একটি অপারেটর যা কোন ভ্যারিয়েবলকে ইন্টেজারে রূপান্তর করে। ভ্যারিয়েবলের আগে কোন রূপে পরিবর্তন করতে চাচ্ছেন সেই অপারেটর লিখে দিলেই কাস্টিং হয়। নিচে টাইপ কাস্টিং এর জন্য টাইপ অপারেটরগুলো উল্লখ্ করা হল।

অপারেটর                                         কাজ
(int), (integer)           ইন্টেজারে কাস্ট করে

(real), (double), (float)   ফ্লোটিং পয়েন্ট কাস্ট করে

(string)                 ট্রিংয়ে কাস্ট করে

(array)                 অ্যারেতে কাস্ট করে

(object)                অবজেক্ট হিসেবে কাস্ট করে

(bool) (boolean)         বুলিয়ানে কাস্ট করে

(unset)                 null হিসাবে কাস্ট করে। এটির ব্যবহার unset() ফাংশনের মতই।

এখানে উল্লেখ্য যে আমি এখনো অ্যারে এবং অবজেক্ট টাইপের ভ্যারিয়েবল নিয়ে আলোচনা করিনি। পরবর্তী টিউটোরিয়ালে স্ট্রিং এবং অ্যারে নিয়ে বিস্তারিত আলোচনা করা হবে। অবজেক্ট নিয়ে যথাসময়ে বিস্তারিত আলোচনা হবে।

৩.৪ পিএইচপিতে ডায়নামিক ভ্যারিয়েবল

ডায়নামিক ভ্যারিয়েবল পিএইচপির একটি নতুন সংযোজন। এতে ডায়নামিক ভাবে ভ্যারিয়েবল তৈরী করা যায়। নিচের উদাহরণটি দেখুন।

$var = “Hello”;

$$var= “World”;

echo $Hello;

আউটপুট আসবে “Wroldকিন্তু আমরা কোথাও $Hello ভ্যারিয়েবলের মান ষ্টোর করিনি। তাহলে $Hello ভ্যারিয়েবলটি কোথা থেকে এল? আসুন উপরের উদাহরণটি ভালোভাবে দেখা যাক সেখানে আসলে কি হয়েছ। আমরা $var নামের একটি ভ্যারিয়েবল “Hello” সেট করেছি। এরপর যখনি $$var লেখা হল, পিএইচপি তা পার্স করলো এভাবে

$$var = $“Hello”=$Hello

ফেল আমরা $Hello ভ্যারিয়েবল পেলাম যার মান হিসেবে সেট করা হল “World”, ফলে পরবর্তীতে $Hello ভ্যারিয়েবলটিকে ব্যবহার করা গেল। এভাবে ডায়নামিকভাবে অর্থাৎ ভ্যারিয়েবলের নাম সরাসরি না লিখে একটু স্ট্রিং করে ভ্যারিয়েবণ তৈরী করা যায়। অ্যারোতে এডভান্স অপারেশন করতে অনেক সময় ডায়নামিক ভ্যারিয়েবল তৈরী করা দরকার হয় যা কোডের পরিমাণ অনেক কমিয়ে দেয়

No comments: