آموزش php بخش نهم : متغییرها در php

چگونه در php از متغیرها استفاده کنیم؟

در بخش قبلی با چگونگی و نحوه ارسال متن هاي ساده و کدهای HTML به مرورگر، با دستورات PHP، آشنا شدید. اما شما براي این کار لزوماً احتیاج به استفاده از PHP، نداشتید. پس بنابراین براي استفادة صحیح از دستورات PHP، می بایست چگونگی و نحوه استفاده از تابع ()print به همراه ویژگیهاي دیگر این زبان ، آشنا شوید.

براي تبدیل صفحات ساده و ثابت به برنامه هاي دینامیک و سایت هاي جذاب، در ابتدا، شما احتیاج به این خواهید داشت که بتوانید اطلاعات را در اختیار بگیرید. متغیرها، همان ابزاري هستند که شما با استفاده از آنها می-

توانید، اطلاعات را در اختیار بگیرید و آنها را در دسترس خود قرار دهید. متغیرها یکی از مهمترین ابزارها و مفاهیم هر زبان برنامه نویسی، محسوب می شوند.

متغیرها به ما اجازه میدهند که داده ها را به طور موقت ذخیره کنیم و یا آنها را تغییر دهید. از مسائلی که در مورد متغیرها باید مورد توجه قرار گیرند میتوان به درك مفهوم متغیرها، انواع مختلف آنها که توسط زبان برنامه نویسی پشتیبانی میشوند، و چگونگی استفاده از آنها، اشاره کرد. در این فصل مفاهیم پایه متغیرها در PHP بررسی میشوند و در آینده به طور مشخص، کاربردهاي مختلف انواع متغیر توضیح داده میشوند.

در زبان PHP باید قبل از هر متغیر یک علامت $ قرار دهید. در واقع PHP از روي علامت $ تشخیص میدهد که متغیرهاي برنامه شما کدامند.

اگر تاکنون با زبانهاي برنامه نویسی مانند Pascal ،C++ ،C و مانند اینها کار می کرده اید، احتمالا انتظار دارید انواع مختلف متغیرها اعم از Float ،Real ،Integer و غیره را برایتان معرفی کنم. اما احتمالا خوشحال خواهید شد که بدانید نوع متغیرها براي PHP اهمیت ندارد. کافیست متغیري را نامگذاري کنید و سپس هر مقدار، از هر نوع و به هر اندازه که می خواهید در آن قرار دهید. سوالی که اینجا مطرح است، احتمالا “نحوه عمل PHP با این متغیرهاي همه منظوره” است.

قبل از اینکه سراغ مثال برنامه برویم لازم است به دو نکته توجه داشته باشیم:

1- متغیرها در PHP نسبت به بزرگ و کوچک بودن کارکترها حساسیت دارند (Case Sensitive ). یعنی به عنوان مثال متغیرهاي my_var و My_Var و MY_VAR از نظر زبان PHP با هم تفاوت دارند.

2- متغیرها می توانند نامهایی با حروف بزرگ  و کوچک انگلیسی و همینطور” Underscoreخط فاصله پایین” را اخذ نمایند. همچنین استفاده از اعداد به شرطی که اولین حرف نام متغیر نباشند نیز مجاز می باشد. (به طور مثال s12$ و S_1$ به عنوان نام متغیر مجاز است اما 1s2$ مجاز نمی باشد.) به شما به عنوان یک برنامه نویس که ابتدای راه می باشید، پیشنهاد می کنم که استفاده از Underscore ها نیز در ابتداي نام متغیرهاي خود اجتناب ورزید. بعدها خواهیم دید که بسیاري از متغیرهایی که PHP خود از آنها استفاده می کند داراي Underscore در ابتدایشان می باشد. حال به مثال زیر توجه کنید:

php9-1

 خروجی برنامه بصورت زیر خواهد بود:

php9-2 

همانطور که در مثال فوق مشاهده می کنید، در صورتیکه عددي را بصورت معمول و بدون علامت نقل قول (” “) به یک متغیر نسبت می دهیم،PHP  می تواند با آن هم بصورت یک عدد  ریاضی و هم بصورت رشته برخورد نماید. در صورتیکه یک مقدار را در داخل ” ” قرار دهیم، اگر در ابتداي آن یک عدد وجود داشته باشد،PHP می تواند در مقابل عملگرهاي ریاضی با آن عددها همچون اعداد عادي برخورد کند و در مقابل عملگرهاي رشته اي به عنوان رشته.

انواع متغیرها در php

در این بخش از آموزش 3 دستۀ مختلف از متغیرها را بررسی خواهیم کرد: اعداد (numbers)، رشته ها (strings) و آرایه ها (Arrays). دسته اول که اعداد می باشند، شامل دو نوع متغیر: اعداد صحیح (integers) و اعداد اعشاري (Floating-point) (همچنین اعداد اعشاري با دقت مضاعف (double precision floating point) و یا (doubles)) می شوند. ولی از آنجا که تفاوت چندانی در چگونگی به کار گرفتن این دو نوع متغیر، وجود ندارند، ما این دو را در یک دسته قرار داده ایم. PHP داراي یک نوع متغیر به نام شیء (object) می باشد که در بخش های بعدی به بررسی آن نیز می پردازیم.

اعداد و کاربرد آن در php

همانگونه که پیش تر نیز به آن اشاره شد، براي آسانتر شدن آموزش، دو نوع متغیر عددی صحیح و اعشاري در دستۀ اعداد قرار گرفته اند. در این بخش مختصر به ذکر تفاوتهاي بین این دو نوع عددی می پردازیم. اعداد به صورت اعشاري(همراه با ممیز) و یا اعداد کسري جزو دسته متغیرهاي اعشاري قرار می گیرند. براي مثال 1.0 در PHP یک عدد اعشاري محسوب می شود. توجه کنید که در PHP اعداد، به صورت کسري ذخیره نمی شوند بلکه به معادل اعشاري خود تبدیل شده و سرانجام ذخیره میشوند. براي مثال عبارت 1/5 به صورت 0.20 ذخیره و نوشته میشود.

نمونه اعداد صحیح معتبر عبارتند از:

[1] [1452] [-2]

 و مثالهایی از اعداد اعشاري معتبر به شکل زیر می باشد:

[1.0] [19.72] [-1.0]

همچنین مثالهایی که در دسته اعداد قرار نمیگیرند عبارتند از:

[11/4] [1972a] [02.23.72]

در مورد مثال آخر که همگی غیر معتبر هستند باید گفت که نمایش اعداد به این صورت در PHP اشتباه میباشد و می بایست به جاي آن از 1.25 استفاده شود. در مثال دوم، عدد به همراه یک کاراکتر غیر عددي نشان داده شده است. در مثال سوم نیز، دو علامت ممیز در یک عبارت آورده شده است.

رشته ها در یک متغیر از نوع رشته اي (string) می تواند شامل هر نوع کاراکتري به صورت ترکیبی(حروف، اعداد، علائم و جاي خالی) شود. اما این کاراکترها باید در داخل یکی از علامتهاي (‘ ‘) quotation و یا (“”) Double Qutation قرار داده شوند.

مثالهایی از داده هاي رشته اي مجاز عبارتند از:

“Hello, world!”

 “Hello, First Name!”

 “1 1/4”

 “Hello World! How are you today?”

 “02.23.72”

 “1972”

اگر به مثال آخر توجه کنید، متوجه خواهید شد که یک عدد نیز می تواند داخل علامتهاي نقل قول قرار گیرد و به عنوان یک متغیر رشته اي در نظر گرفته شود. به عبارت دیگر این داده ی رشته اي متشکل از ترکیب کاراکترهاي عددي می باشد.

مثالهایی از دادههاي رشتهاي غیرمجاز عبارتند از :

“Hello ,World !”

 “I said, “

“how are you?”

 در مثال اول، از آنجایی که عبارت، داخل یکی از علامتهاي مخصوص داده هاي رشته اي قرار نگرفته است. به عنوان یک داده ی رشته اي در نظر گرفته نمیشود. در مثال دوم،PHP بعد از رسیدن به علامت نقل قول دوم، دادة رشته اي را تمام شده فرض میکند. بنابراین ادامۀ عبارت باعث ایجاد اشکال میشود. اما براي رفع این مشکل چه باید کرد؟ همانند بخش اول  که در تابع ()print قبل از علامتهاي quotation از (\)backslash استفاده می کردیم. در این مورد نیز براي اینکه، PHP علامتهاي quotation داخل عبارت را به صورت کاراکتر آن در نظر بگیرد ( و نه علامتی براي آغاز یا ختم یک داده رشتهاي)، مثال دوم را به این صورت تصحیح می کنیم.

“I said,\”How are you?\””

پس بنابراین هر چند که گفتیم در داده ی رشته اي از هر ترکیب کاراکتری می توان استفاده کرد، اما باید توجه داشته باشید که در مورد کاراکترهاي ویژه استثناهایی وجود دارد. کاراکترهاي ویژة دیگري نیز وجود دارند که در هنگام استفاده از آنها در یک داده ی رشته اي باید یک علامت (\) Backslash قبل از آنها قرار دهیم.

این کاراکترها عبارتند از:

.dollar ($) علامت و Backslash (\) ، single quotation mark (‘) ،Apostrophe

دقت داشته باشید که، مزیت استفاده از double quotes به جاي Single quotes در این است که در حالت دوم، اگر متغیري داخل داده ی رشته اي تعریف شده به کار ببرید، نام متغیر به عنوان جزئی از داده در نظر گرفته خواهد شد، و در خروجی نام متغییر است که چاپ می شود. براي مثال نتیجۀ عبارت زیر در متن ارسالی:

print ‘Hello,$FirstName!’;

خروجی مثال بالا Hello,$FirstName می باشد. اما اگر فرض کنیم که از قبل به FirstName$ مقدار soli نسبت داده شده باشد). نتیجۀ عبارت زیر:

Print “Hello,$FirstName!”;

به صورت !Hello,soli میباشد.

کی ، کجا و چگونه از کوتیشن و دابل کوتیشن استفاده کنیم:

آیا شما هم جز اون دسته از افرادي هستید که هنگام کدنویسی PHP، براي مشخص کردن یک رشته کاراکتر از دابل کوتیشن استفاده می کنید؟! به نظر می رسه اکثر مثالها و نمونه هایی که حتی در راهنماي PHP وجود داره تمایل زیادي به استفاده از دابل کوت رو نشون میده. اگرچه راه دومی هم وجود دارد که به مراتب بهتر از قبلی هم هست و اون استفاده از کوتیشن یا (Single Quote) به جاي دابل کوتیشن ها است. براي مثال به جاي:

 

<?php

 echo “Visit http://www.phpmystery.com”;

?>

میتوان از:

<?php

 echo ‘Visit http://www.phpmystery.com’;

?>

استفاده نمود.

خوب شاید برای شما سوال پیش اومده باشد که «چه فرقی داره؟» پاسخ این است که در مثال بالا هیچ تفاوتی وجود نداره اما به مثال زیر توجه کنید:

قصد داریم یک تکه کد HTML رو داخل یک متغیر ذخیره کنیم؛ اگر از دابل کوتیشن استفاده کنیم:

<?php

 echo “<table border=\”1\” cellspacing=\”0\” cellpadding=\”0\”>”;

?>

و اگر از کوتیشن استفاده کنیم.

<?php

 echo ‘<table border=”1″ cellspacing=”0″ cellpadding=”0″>’;

?>

همونطور که مشاهده می کنید، اگر رشته کاراکتر، حاوي کاراکتر (“) باشد می بایست آن را با کاراکتر بک اسلش (\) اسکیپ کنیم تا Parse Error پیش نیاد ولی در مثال دوم می بیینم که هر چه داخل (‘) باشه، عیناً و کارکتر به کارکتر نوشته خواهد شد. دلیل بعدي اینکه راه دوم پرفورمنس نسبتاً بالاتري داره! استفاده از کوتیشن همواره سریعتر از دابل کوتیشن هست و در برخی موارد این تفاوت چند صد درصد میشه! با نگاهی به Benchmark زیر فکر کنم همه چیز روشن بشه.

double (“) vs. single (‘) quotes

 Is a there a difference in using double (“) and single (‘) quotes for strings. Call 1’000x

 + 101 % 1: single (‘) quotes. Just an empty string: $tmp[] = ”; Total time: 3[ms]

 + 100 % 2: double (“) quotes. Just an empty string: $tmp[] = “”; Total time: 3[ms]

 + 111 % 3: single (‘) quotes. 20 bytes Text : $tmp[] = ‘aaaaaaaaaaaaaaaaaaaa’; Total time: 3[ms]

 + 118 % 4: double (“) quotes. 20 bytes Text : $tmp[] = “aaaaaaaaaaaaaaaaaaaa”; Total time: 3[ms]

 + 115 % 5: single (‘) quotes. 20 bytes Text and 3x a $ : $tmp[] = ‘aa $ aaaa $ aaaa $ a’; Total time: 3[ms]

 + 461 % 6: double (“) quotes. 20 bytes Text and 3x a $ : $tmp[] = “aa $ aaaa $ aaaa $ a”; Total time: 13[ms]

 + 113 % 7: double (“) quotes. 20 bytes Text and 3x a \$ : $tmp[] = “aa \$ aaaa \$ aaaa \$ a”; Total time: 3[ms]

نتیجه : در رشته کاراکترهایی که در دابل کوتیشن قرار میگیرند، از کاراکتر $ به تنهایی استفاده نکنید، مگر اینکه بخواهید مقدار یک متغیر را جایگزین کنید و اگر هم خواستید این کار را انجام دهید بهتره اون رو با یک بک اسلش اسکیپ کنید. زمانی که از کاراکترهاي خاص نظیر  n\ یا r\ و t\ که براي فرمت بندي رشته کاراکترها بکار میرود، استفاده می کنید، اگر آنها را داخل کوتیشن ‘ قرار بدید اثر خودشون رو از دست میدن و باید حتما داخل دابکل کوتیشن ” قرار بگیرند.

<?php

 echo ‘check out http://www.phpmystery.com’ . “\n\r” . ‘to discover unknowns about PHP’;

?>

با این شرایط می توان گفت:

1-    اگر متغیري داخل رشته کاراکتر نیست که بخواهید مقدارش جانشین بشه از کوتیشن استفاده کنید.

2-    اگر متغیري داخل رشته کاراکتر باشه افزودن {} باعث سرعت عملکرد میشود.(*)

<?php

$sql = “select * from `mytable` where `status` = ‘{$status}’ order by name”

?>

3-     بجاي دستور Print از Echo استفاده کنید.

(*) دو زمان هست که آکولادها به ما کمک می کنند؛ اول هنگامی که بخواهیم یک سري کاراکتر درست چسبیده به نام متغیر رو به خروجی بفرستیم و دوم هنگامی که عبارتی که میخواهیم درون رشته کاراکتر جاي بدیم یک متغیر ساده نباشه(مثلاً یک آرایه دوبعدي یا خروجی متد یک آبجکت یا Property اون آبجکت باشه.

مثال:

<?php

$sport1 = ‘volley’;

$plan1 = “I will play $sport1ball in the summertime”;

$plan2 = “I will play {$sport1}ball in the summertime”;

?>

مشکل زمانی شروع میشه که مفسر هنگامی داخل یه رشته کاراکتر به $ برخورد کنه، تا رسیدن به فاصله خالی شروع به جمع آوري کاراکترها میکنه و نام متغیر رو تشخیص میده و اگر پیش تر مقدار گرفته بود، آن مقدار را جایگزین میکنه وگرنه مقدار NULL یا هیچ رو به جاي نام متغیر قرار میده. همونطور که متوجه شدید، خروجی مثال فوق به شکل زیر می باشد:

<?php

// $plan1 = ‘I will play in the summertime’;

// $plan2 = ‘I will play volleyball in the summertime’

?>

نکته: ترکیب n\، بطور مثال در تابع print، باعث ایجاد خط جدید میشود. بنابراین مشاهده میکنید که در این حالت خاص، علامتbackslash، باعث در نظر گرفتن n به صورت یک کاراکتر معمولی نشد. از موارد خاص دیگر می توان به ترکیب r\ بازگشت خطی 1 و t\ (براي قرار دادن یک tab) اشاره کرد.

آرایه ها در php :

از آنجایی که آرایه ها کمی پیچیده تر از داده هاي عددي و رشته ها به حساب می آیند، در این قسمت به صورت مختصر به آنها می پردازیم و در بخش های بعدی توضیحات تکمیلی ارائه خواهد شد. برخلاف داده هاي عددي و رشته هایي که تنها میتوانند داراي یک ارزش و یا مقدار باشند، آرایه ها میتوانند حاوي لیستی از مقادیر باشند. بنابراین شما میتوانید مقادیر مختلف عددي و یا رشته ها را داخل یک آرایه وارد کنید. همچنین آرایه ها، خود میتوانند شامل لیستی از آرایه ها باشند. یعنی یک آرایه از نوع آرایه تعریف کنیم.

نکته: آرایه هاي استاندارد در PHP، از مقادیر دادها یا اعداد تشکیل میشوند. (این آرایه هاي شماره گذاري شده (indexed)  و یا برداري (vector) نیز معروف هستند)، و این همان نامی است که perl، آرایه هایی که خود از 2 آرایه تشکیل شده باشد، به نام هاي، آرایه هاي hash associative ، 3 multi_dimensional و 4 شناخته میشوند. در PHP به هر دو دسته (یک یا چند بعدي) لفظ “آرایه” اطلاق میشود. همانطور که در بالا گفته شد مبحث آرایه ها در بخش های بعدی به طور کامل آموزش داده خواهد شد.

نسبت دادن مقادیر به متغیرها:

در PHP شما، به اعلان (declare) متغیرها احتیاج ندارید. همچنین نوع یک متغیر در هنگام عمل انتساب مشخص میشود. در PHP براي نسبت دادن یک مقدار به یک متغیر و ذخیرة آن از علامت مساوي (=) استفاده می- کنید. در این هنگام این علامت با نام عملگر انتساب (assignment operator) خوانده میشود. براي مثال به نمونه هاي زیر توجه کنید:

$number=1;

 $floating-number=1.2;

 $string=”Hello,World!”;

در PHP نیز همانند  Java Script، نوع متغیر در طول برنامه، قابلیت تغییر را دارد. براي مثال بعد از اجراء دستورات زیر، اگر بخواهیم مقدار variable$ را چاپ کنیم، نتیجه به صورت Greeting خواهد بود.

 

$Variable=1;

$Variable=”Greeting”;

متغیرهاي از پیش تعریف شده در php :

متغیرهاي از پیش تعریف شده (Predefined Variables) انواع خاصی از متغیرها می باشند که در یکی از این برنامه هاي کاربردي سرویس دهندة وب (Web server Application) مانند آپاچی، سیستم عامل هاي سرویس دهندة وب (Web Server Operating System) (مانند Windows NT و یا Solaris) و یا خود مدل PHP در دو دستۀ اول، این متغیرها به متغیرهاي محیطی (Variables environment) معروفند. متغیرهاي از پیش تعریف شده در سرویس دهندگان مختلف، ممکن است داراي تفاوتهایی باشند. دو دلیل براي آشنایی شما با مفهوم متغیرهاي از پیش تعریف شده، وجود دارد: دلیل اول اینکه، این متغیرها در برنامه نویسی شما کاربرد خواهند داشت و دلیل دیگر آنکه با شناخت این متغیرها، شما دیگر، به صورت تصادفی نام یک متغیر را هم نام با این متغیرها، انتخاب نمی کنید.

HOSTNAME نمونه ای از متغیرهاي محیطی سرویس دهنده می باشد، نامی که سرویس دهنده به خود نسبت داده است و  OSTYPE سیستم عاملی که بر روي سرویس دهندة در حال اجرا می باشد.

DOCUMENT_ROOT نوعی از متغیر محیطی Apacheاست که مکانی برای ذخیرة فایلها بر روي سرویس دهنده و HTTP_USER_AGENTجزئیاتی در مورد مرورگر و platform کاربر را در سرویس دهنده Apache ارائه میدهد.

همچنین، متغیر PHP-SELF پرکاربردترین متغیر PHP است که وظیفه آن ذخیره سازی نام صفحه جاری می باشد.

با تشکر از صبر و حوصله شما

شرکت طراحی وب سایت همیاران