در مقالهی آماده سازی محیط کار با PHP دربارهی مقدمات PHP صحبت کردیم. حال در این مقاله قصد داریم دربارهی انواع دادهها در PHP صحبت کنیم. مقداری که به یک متغیر PHP انتساب داده میشود، میتواند انواع دادههای متفاوت، مثلا یک رشتهی ساده یا نوع عددی و یا انواع دادهای پیچیدهتر همانند آرایهها و یا اشیاء باشد. انواع دادهها در PHP به 8 نوع دادهی اصلی تقسیم میشود: اعداد صحیح، اعداد اعشاری، رشتهها، آرایهها، اشیاء، boolean ،resource و NULL. در ادامه به تشریح کاملتر هر کدام از موارد ذکر شده میپردازیم.
متغیرهای عددی Integer شامل اعداد مثبت، منفی هستند و در هنگام کار با زبانهای برنامهنویسی برای ما بسیار کاربردی هستند. برای تعریف یک متغیر در زبان PHP از علامت $ در ابتدای نام متغیرها استفاده میشود، سعی کنید در انتخاب اسامی متغیرها از کلمات با معنی استفاده نمایید تا بعدا کاربرد هر کدام را به یاد داشته باشید.
در کد زیر 4 متغیر تعریف شده است که به هر کدام مقادیر متفاوتی انتساب داده شده است.
<?php
$a = 123; // decimal number
var_dump($a);
echo "<br>";
$b = -123; // a negative number
var_dump($b);
echo "<br>";
$c = 0x1A; // hexadecimal number
var_dump($c);
echo "<br>";
$d = 0123; // octal number
var_dump($d); ?>
خروجی عدد مثبت int(123) خروجی عدد منفی int(-123) خروجی hexadecimal int(26) خروجی octal int(83)
نکتهای که باید توجه کنید این است که در تعریف متغیرهای عددی، مقدار را بین ' (تک کوتیشن) یا " (دابل کوتیشن) قرار نمیدهیم زیرا اگر چنین کاری را انجام دهیم آن متغیر به نوع رشته تبدیل میشود و دیگر نمیتوان بر روی آن عملیات ریاضی را انجام داد.
مثالی از متغیرهای عددی: تا الان با متغیرهای عددی آشنا شدیم در ادامه یک مثال از محاسبات و اولویت علمگرهای محاسبهای میزنیم.
<?php
$math = 18.5;
$chemistry = 17;
$physics = 15;
در بالا چند متغیر عددی تعریف کردیم که برای مثال هر کدام نمرهی یک درس یک دانش آموز است و میخواهیم میانگین این نمرات را به دست بیاوریم.
<?php
$math = 18.5;
$chemistry = 17;
$physics = 15;
$avg = ($math + $chemistry + $physics) / 3;
echo $avg;
16.833333333333
در بالا یک متغیر دیگر به اسم avg تعریف کردهایم که قرار است میانگین نمرات را محاسبه کند، اگر دقت کرده باشید ما متغیرهایی که دارای نمرات بودند را داخل پرانتز گذاشتهایم، هر چیزی که بین پرانتز قرار میگیرد دارای اولویت بالاتری نسبت به عملگرهای دیگر است و در اینجا اول نمرات را با هم جمع کردهایم و بعد آنها را بر تعدادشان که 3 است تقسیم کردهایم.
اما شاید اینجا یک مشکل دیده شود که میانگین نمرات ما، اعشار زیادی دارد، برای کوتاه کردن آن به دو رقم اعشار یا هر تعداد رقم اعشار که شما مدنظرتان است میتوانید از تابع زیر استفاده کنید.
<?php
$math = 18.5;
$chemistry = 17;
$physics = 15;
$avg = ($math + $chemistry + $physics) / 3;
echo round($avg, 2);
16.83
تابع round میتواند عددی که اعشار دارد را با توجه به رقم اعشار آن را به سمت عدد بالاتر یا پایینتر گرد کند. برای مثال:
<?php
$math = 18.5;
$chemistry = 17;
$physics = 15;
$avg = ($math + $chemistry + $physics) / 3;
echo round($avg);
17
در اینجا خروجی عدد 17 شده است چون رقم اعشار عددی بزرگی است و به سمت بالاتر نزدیک است. نکتهای که باید اینجا توجه کنید این است که اگر عدد اعشار شما بالاتر از نیم یا 5 باشد به سمت بالا و اگر کمتر از نیم یا 5 باشد به سمت پایین گرد میشود.
رشتهها، دنبالهای از کاراکترها هستند، که هر کاراکتر معادل یک بایت است. یک رشته میتواند شامل حروف، اعداد و کاراکترهای ویژه باشد که میتواند حداکثر تا مقدار 2 گیگابایت (2147483647 بایت) بزرگ شود. سادهترین راه برای تعریف یک رشته، قرار دادن آن داخل تک کوتیشن میباشد.
<?php
$a = 'Hello world!';
echo $a;
echo "<br>";
$b = "Hello world!";
echo $b;
echo "<br>";
// در مثال زیر زمانی که بخواهیم از تک کوتیشن داخل رشته استفاده کنیم
// از علامت \ استفاده میکنیم و سپس تک کوتیشن
$c = 'Stay here, I\'ll be back.';
echo $c;
?>
در قطعه کد بالا سه متغیر متفاوت با حالتهای متفاوت تعریف شده است. خروجی کدهای بالا به شرح ذیل میباشد:
Hello world! Hello world! Stay here, I'll be back.
در PHP برای تعریف اعداد اعشاری یا float کافی است فقط عدد اعشار مورد نظر را در متغیر مقداردهی کنید و لازم به کار اضافه نیست چون همانطور که گفته شد، PHP با تشخیص نوع دادهی ورودی، نوع متغیر را تعیین میکند، به مثالهای پایین توجه کنید.
<?php
$a = 1.234;
var_dump($a);
echo "<br>";
$b = 10.2e3;
var_dump($b);
echo "<br>";
$c = 4E-10;
var_dump($c); ?>
مثال بالا کاملا گویاست که چگونه یک متغیر از نوع اعشار را ایجاد کنیم.
float(1.234) float(10200) float(4.0E-10)
بولینها شبیه یک سوییچ هستند که امکان قبول دو مقدار True و False یا 0 و 1 را دارند.
<?php
// Assign the value TRUE to a variable
$show_error = true;
var_dump($show_error);
?>
خروجی به شرح ذیل میباشد:
bool(true)
متغیرهای آرایهای از مهمترین متغیرهای هر زبان برنامهنویسی به حساب میآیند و باید آنها را به خوبی درک کنیم تا بتوانیم از آنها به درستی استفاده کنیم. تعریف کلی آرایهها به صورت زیر است:
آرایهها در کل میتوانند مجموعهای از دادهها را در خود ذخیرهسازی کنند، این که میگوییم مجموعهای از دادهها منظورمان این است که تعداد زیادی مقدار از هر نوع در آن میتوان ذخیرهسازی کرد. برای مثال ما در متغیرهای عددی یا رشته یاد گرفتهایم که فقط در آنها میتوانیم اعداد یا رشته ذخیرهسازی کنیم اما در آرایهها اینگونه نیست و شما میتوانید از هر نوع دادهای درون یک یا چند آرایه داشته باشید.
در PHP ما دو نوع آرایه داریم که نوع اول آن ایندکسهای پیشفرض دارند که به آنها Indexed array گفته میشود و به نوع دوم آن، که به صورت دستی ایندکسهای آن را مشخص میکنیم، Associative array گفته میشود که به معنی آرایههای انجمنی است.
تعریف کردن آرایهها در PHP به دو روش امکانپذیر است، از روش اول شروع میکنیم:
روش اول قرار دادن آکولاد [ ] باز و بسته و قرار دادن مقادیر بین آنها است. همانطور که میبینید، مقادیر از نوع عدد و رشته را وارد کردهایم. برای مقداردهی هنگام تعریف متغیر حتما باید مقادیر با کاما "," از یکدیگر جدا شوند وگرنه دچار خطا میشویم.
<?php
$arr = ['7learn','google',24,76,'amazon'];
روش دوم برای تعریف آرایه استفاده از تابع array است، به مثال پایین توجه کنید.
<?php
$arr = array('7learn','google',24,76,'amazon');
تفاوتی بین این دو روش احساس نمیشود و بستگی به راحتی شما دارد که از کدام روش برای تعریف آرایهها استفاده کنید.
آرایهها از 0 ایندکسگذاری میشوند. مقادیری که شما تعریف کردهاید به صورت خودکار ایندکسگذاری میشوند و ما میتوانیم با استفاده از ایندکس به مقادیر آرایه دسترسی داشته باشیم. اگر میخواهید که مقادیر آرایه را همراه با ایندکسشان مشاهده کنید میتوانید از توابع زیر استفاده کنید.
<?php
$arr = array('7learn','google',24,76,'amazon');
print_r($arr);
Array ( [0] => 7learn [1] => google [2] => 24 [3] => 76 [4] => amazon )
در اینجا از تابع print_r برای چاپ تمامی مقادیر آرایه استفاده کردهایم. به این نکته توجه داشته باشید که آرایهها را نمیتوان با echo چاپ کرد چون echo برای آرایهها ساخته نشده است.
همچنین ما میتوانیم از تابعی دیگری به نام ()vardump برای چاپ آرایهها و دریافت جزییات بیشتر استفاده کنیم، به مثال پایین توجه کنید.
<?php
$arr = array('7learn','google',24,76,'amazon');
var_dump($arr);
array(5) { [0]=> string(6) "7learn" [1]=> string(6) "google" [2]=> int(24) [3]=> int(76) [4]=> string(6) "amazon" }
در خروجی بالا علاوه بر نمایش ایندکس و مقدار آن، نوع و اندازهی مقدار آرایه نیز مشخص شده است.
تا الان که با ایندکسهای آرایه آشنا شدیم، حال نوبت به آن رسیده است که آنها را فراخوانی کنیم.
<?php
$arr = array('7learn','google',24,76,'amazon');
echo $arr[0];
7learn
شاید اولین چیزی که توجه شما را جلب کند این است که ما قرار نبود از echo برای چاپ آرایهها استفاده کنیم اما باید به شما بگوییم که وقتی شما یک ایندکس از آرایه را فراخوانی میکنید اگر یک عدد یا رشته باشد، میتوان آن را با echo چاپ کرد.
در آرایهها برای فراخوانی کردن یک ایندکس از آن کافی است نام متغیر آرایه را بیاوریم و با آکولاد باز و بسته [ ] شمارهی ایندکس را بین آن قرار دهیم.
$arr[1];
در مثال بالا ما ایندکس 1 را از آرایهی arr فراخوانی کردهایم. توجه داشته باشید که اگر ایندکس وارد شده، خارج از بازهی آرایه باشد، دچار خطا میشویم. برای مثال آرایهی پایین 5 عضو دارد و 4 ایندکس (ایندکسها از 0 شروع میشوند) که اگر ما ایندکس 10 را فراخوانی کنیم با خطای زیر مواجه میشویم:
<?php
$arr = array('7learn','google',24,76,'amazon');
echo $arr[10];
Notice: Undefined offset: 10 in C:\xampp\htdocs\7learn\index.php on line 5
خطای بالا بیانگر این است که چنین ایندکسی وجود ندارد و این خطا در این مسیر و در خط 5 رخ داده است.
ساخت آرایههای انجمنی بسیار آسان است. فقط کافی است تا ایندکس آن را به صورت دلخواه ایجاد کنیم، به مثال پایین توجه کنید.
<?php
$arr = array('first_name' => 'Amir', 'last_name' => 'Salehi', 'age' => 18);
در آرایهی بالا ما اطلاعات یک فرد را در آرایه ذخیره کردهایم، برای این که بتوانیم خودمان ایندکس یک آرایه را تعریف کنیم، اگر ایندکس مدنظر ما یک رشته باشد، باید آن را در میان یک ' (تک کوتیشن) یا " (دابل کوتیشن) قرار دهیم و درصورتی که مقدار روبروی ایندکس عددی باشد مقدار را مینویسیم و با استفاده از علامت <= (مساوی و بزرگتری) به آن اشاره میکنیم. در نهایت برای تعریف ایندکس بعدی از کاما "," استفاده میکنیم.
اگر با تابع print_r آرایه را چاپ کنیم تمامی ایندکسها با مقادیرشان قابل مشاهده هستند.
<?php
$arr = array('first_name' => 'Amir', 'last_name' => 'Salehi', 'age' => 18);
print_r($arr);
Array ( [first_name] => Amir [last_name] => Salehi [age] => 18 )
روش فراخوانی آرایههای انجمنی دقیقا مثل آرایههای ایندکسی میباشد، در اینجا نیز شما باید نام ایندکسی که به صورت دستی تعریف کردهاید را بیاورید، به مثال پایین توجه کنید.
<?php
$arr = array('first_name' => 'Amir', 'last_name' => 'Salehi', 'age' => 18);
echo $arr['first_name'];
Amir
شاید برایتان سوال باشد که آیا میتوان این دو آرایه را با یکدیگر داشت؟ باید به شما بگوییم بله، ولی شاید از خود بپرسید که ایندکس گذاریها چگونه انجام میشود؟
وقتی که ما دو نوع آرایه را در یک آرایه داریم ایندکسهایی که ما خودمان تعریف کردهایم که کاملا مشخص هستند اما مقادیری که به آنها ایندکس ندادهایم، به صورت خودکار از شماره صفر ایندکسگذاری میشوند، به مثال زیر توجه کنید.
<?php
$arr = array('first_name' => 'Amir', 'last_name' => 'Salehi', 'age' => 18, 'amazon', 43, 'google');
print_r($arr);
Array ( [first_name] => Amir [last_name] => Salehi [age] => 18 [0] => amazon [1] => 43 [2] => google )
در مثال بالا ما در آخر آرایه سه مقدار amazon ،43، google را بدون ایندکس وارد کردهایم و همانطور که قابل مشاهده است از صفر ایندکسگذاری شدهاند.
Object یک نوع داده است که دادهها و اطلاعات مربوط به نحوهی پردازش آنها را در خود ذخیره میکند. آبجکت یک نمونه از کلاس است. هر آبجکت به متدها و ویژگیهای کلاس پدرش دسترسی دارد. در زیر مثالی از نحوهی تعریف کلاس و آبجکت برای آن را مشاهده میکنید:
<?php
// تعریف کلاس
class greeting{
// properties
public $str = "Hello World!";
// methods
function show_greeting(){
return $this->str;
}
}
// ساخت شی از کلاس بالا
$message = new greeting;
var_dump($message);
?>
مقدار NULL برای نمایش متغیرهای خالی استفاده میشود. متغیر از نوع NULL متغیری است که هیچ دادهای در آن وجود ندارد.
<?php
$a = NULL;
var_dump($a);
echo "<br>";
?>
خروجی کد بالا به صورت زیر خواهد بود.
NULL
زمانی که یک متغیر بدون مقدار تعریف میشود به صورت خودکار مقدار null به آن انتساب داده میشود. بسیاری از توسعه دهندگان تازه کار تصور میکنند دو قطعه کد زیر شبیه هم هستند در حالی که اینگونه نیست.
<?php
// متغیر زیر دارای مقدار NULL است
$var1=NULL;
// ولی متغیر زیر نشانگر این است که این متغیر هیچ مقداری نگرفته است
$var2 = "";
Resource یک متغیر خاص است که منبعی برای یک منبع خارجی است. Resourceها معمولا برای باز کردن فایلها و ارتباط با پایگاه داده استفاده میشوند.
<?php
// بازکردن یک فایل برای خواندن
$handle = fopen("note.txt", "r");
var_dump($handle);
?>
<?php
// اتصال به بانک اطلاعاتی با تنظیمات پیش فرض
$link = mysqli_connect("localhost", "root", "");
var_dump($link);
?>
جمعبندی
در این مقاله توضیح دادیم که برای تعریف متغیرها در PHP باید در ابتدای متغیر از علامت $ استفاده کنیم و سپس به بررسی نوع دادههای عددی پرداختیم و آموختیم که متغیرهای عددی (Integer) میتوانند دارای مقادیر مثبت، منفی باشند و سپس در ادامه دربارهی اعداد اعشاری در زبان PHP توضیح دادیم که در PHP برای تعریف اعداد اعشاری یا float کافی است فقط عدد اعشار مورد نظر را در متغیر مقداردهی کنید. در ادامه به معرفی نوع دادهای رشتهای پرداختیم و توضیح دادیم که رشتهها، دنبالهای از کاراکترها هستند. در خصوص بولینها نیز شرح دادیم که بولینها شبیه یک سوییچ هستند که امکان قبول دو مقدار True و False یا 0 و 1 را دارند. سپس به نحوهی تعریف و فراخوانی آرایهها در PHP پرداختیم. آرایهها در PHP دو نوع هستند آرایههای اندیسی و آرایههای انجمنی، که به تشریح و ارائهی مثال برای هر دو نوع آرایهها پرداختیم. در نهایت به توضیح انواع دادهای اشیاء و NULL و Resource پرداختیم.
امیدواریم که مقاله انواع دادهها در PHP برای شما مفید باشد. شما میتوانید سوالات خود را در رابطه با انواع متغیرها در بخش نظرات با ما در میان بگذارید.