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

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

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

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

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

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

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

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

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

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

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

php9-1

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

php9-2 

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

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

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

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

همانگونه که پیش تر نیز به آن اشاره شد، برای آسانتر شدن آموزش، دو نوع متغیر عددی صحیح و اعشاری در دستۀ اعداد قرار گرفته اند. در این بخش مختصر به ذکر تفاوتهای بین این دو نوع عددی می پردازیم. اعداد به صورت اعشاری(همراه با ممیز) و یا اعداد کسری جزو دسته متغیرهای اعشاری قرار می گیرند. برای مثال ۱٫۰ در PHP یک عدد اعشاری محسوب می شود. توجه کنید که در PHP اعداد، به صورت کسری ذخیره نمی شوند بلکه به معادل اعشاری خود تبدیل شده و سرانجام ذخیره میشوند. برای مثال عبارت ۱/۵ به صورت ۰٫۲۰ ذخیره و نوشته میشود.

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

[۱] [۱۴۵۲] [-۲]

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

[۱٫۰] [۱۹٫۷۲] [-۱٫۰]

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

[۱۱/۴] [۱۹۷۲a] [02.23.72]

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

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

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

“Hello, world!”

 “Hello, First Name!”

 “۱ ۱/۴”

 “Hello World! How are you today?”

 “۰۲٫۲۳٫۷۲”

 “۱۹۷۲”

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

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

“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

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

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

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

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

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

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

 + ۱۱۳ % ۷: 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’;

?>

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

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

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

<?php

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

?>

۳-     بجای دستور 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\ بازگشت خطی ۱ و t\ (برای قرار دادن یک tab) اشاره کرد.

آرایه ها در php :

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

نکته: آرایه های استاندارد در PHP، از مقادیر دادها یا اعداد تشکیل میشوند. (این آرایه های شماره گذاری شده (indexed)  و یا برداری (vector) نیز معروف هستند)، و این همان نامی است که perl، آرایه هایی که خود از ۲ آرایه تشکیل شده باشد، به نام های، آرایه های hash associative ، ۳ multi_dimensional و ۴ شناخته میشوند. در 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 است که وظیفه آن ذخیره سازی نام صفحه جاری می باشد.

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

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

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