تعریف و استفاده از متغیر (Variable) در PHP
در بحث قبل از بخش آموزش مقدماتی PHP با کلیاتی از این زبان برنامه نویسی وب آشنا شدیم، گفتیم که PHP زبان سمت سرور (Server-side) است و پردازش آن توسط مفسر (Processor) سرور انجام و خروجی آن در نهایت به صورت کدهای HTML از سمت سرور به مرورگر (یا هر واسط کاربری دیگر) ارسال می شود، اکنون در ادامه آموزش های مقدماتی این بخش، می خواهیم با یکی از پرکاربردترین و متداول ترین مفاهیم در بین زبان های برنامه نویسی مختلف و به طور خاص برنامه نویسی PHP یعنی مفهوم متغیر (Variable) آشنا شویم که در نوشتن برنامه های کاربردی نقش کلیدی داشته و به دفعات مختلف در سورس کدهایمان تعریف و استفاده می شود، درک مبحث متغیر به عنوان مبحث پایه و مقدمه آشنایی با مباحث پیشرفته تر و پیچیده تر برنامه نویسی با PHP از اهمیت زیادی برخوردار است و توصیه می شود حتما پس از مطالعه و تمرین کافی به مباحث بعدی رجوع کنیم.
مفهوم عبارت متغیر در برنامه نویسی
متغیر (Variable) در برنامه نویسی به معنی نماد و نشانه ای است که در حین اجرای برنامه ها همواره می تواند مقادیر غیرثابت و تغییرپذیری داشته باشد، به طور مثال اگر برنامه ای بنویسیم که نمرات دانش آموزان را به عنوان ورودی دریافت و میانگین آنها را در خروجی چاپ کند، این ورودی و خروجی معمولا به صورت متغیر تعریف می شوند چرا که مقادیر دریافتی و مقدار نهایی ثابت نیست و از دانش آموزی به دانش آموز دیگر متفاوت خواهد بود، اگرچه زبان های برنامه نویسی مختلف از شیوه نگارش (Syntax) خاص خود برای تعریف متغیر استفاده می کنند، اما مفهوم و قاعده کلی بین آنها معمولا به همین صورت است که در بالا گفته شد.
آشنایی با کاربرد متغیر در PHP
متغیرها در PHP برای نگهداری مقادیر با انواع مختلف (رشته ای (String)، عددی (Int)، آرایه (Array)، بولین (Boolean) و...) به کار می روند، در واقع می توان گفت که متغیرها ظرف (Container) نگهداری اطلاعات مختلف یک برنامه تحت وب هستند که هر کجا نیاز باشد می توانیم به آنها دسترسی داشته و حتی محتوای آنها را تغییر دهیم، برای آشنایی با کاربرد متغیر در PHP یک مثال را با هم مرور می کنیم، در نمونه کد زیر تعداد کالاهای تولید شده توسط یک کارگاه فرضی در طی سه سال در متغیرهای مختلف قرار داده شده است، می خواهیم در خروجی میانگین تولیدات این کارگاه در طی سه سال را محاسبه کنیم:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>وبگو | آشنایی با متغیر در PHP</title>
<!-- Webgoo.ir -->
<style type="text/css">
body {
font-family: Tahoma, Geneva, sans-serif;
direction: rtl;
font-size: 12px;
}
</style>
</head>
<body>
<?php
//تعداد تولیدات در طی سه سال به تفکیک سال
$factory_year_1 = 160;
$factory_year_2 = 185;
$factory_year_3 = 195;
//مجموع تولیدات
$factory_all = $factory_year_1 + $factory_year_2 + $factory_year_3;
//میانگین سه ساله
$factory_average = $factory_all / 3;
echo 'میانگین تولیدات در طی سه سال: ' . $factory_average;
?>
<hr>
متغیر در PHP با علامت $ در ابتدا شروع می شود، متغیر می تواند مقادیر عددی، رشته ای و... داشته باشد.<br>
زبان PHP را در اصطلاح HTML-embedded گویند، یعنی دستورات PHP را می توان در بین تگ های HTML نوشت و خروجی گرفت.
</body>
</html>
پیش نمایشتحلیل کد بالا چندان سخت نیست، ابتدا سه متغیر با نام های دلخواه factory_year_1، factory_year_2، factory_year_3 با مقادیر عددی تعریف کرده ایم که تعداد تولیدات یک کارگاه فرضی را در خود نگهداری می کنند:
$factory_year_1 = 160;
$factory_year_2 = 185;
$factory_year_3 = 195;
در گام بعد مجموع تولیدات کارگاه را در متغیری با نام factory_all محاسبه کرده ایم:$factory_all = $factory_year_1 + $factory_year_2 + $factory_year_3;
در نهایت در متغیر factory_average میانگین سه ساله را محاسبه و با دستور echo از آن خروجی گرفته ایم:$factory_average = $factory_all / 3;
echo 'میانگین تولیدات در طی سه سال: ' . $factory_average;
نکته 1: در خصوص علامت های محاسباتی (جمع، تفریق، ضرب، تقسیم و...) PHP در آموزش های بعدی به صورت جداگانه صحبت خواهیم کرد.نکته 2: مانند اغلب زبان های برنامه نویسی اگر مقادیر متغیر بین علامت های '' (single quotation) یا "" (double quotation) قرار گیرد، نوع متغیر رشته متنی (String) خواهد بود، به همین ترتیب اگر مقدار متغیر یک عدد باشد نوع آن عددی (Int) تفسیر می شود.
نکته 3: در PHP چند دستور مختلف برای گرفتن خروجی وجود دارد، از جمله print، print_r و echo، در حالت معمول استفاده از echo توصیه می شود (echo از print سریعتر و انعطاف پذیرتر است و چند پارامتر مختلف را می توان با آن به خروجی ارسال کرد، اما print تنها یک پارامتر می پذیرد و در صورت اجرای صحیح، مقادیر 1 را به عنوان نتیجه برمی گرداند).
شیوه های نگارش (Syntax) و استفاده از متغیر در PHP
تعریف و استفاده از متغیرها در PHP مانند هر زبان برنامه نویسی دیگر دارای اصول و شیوه نگارش (Syntax) خاص خود است که در زیر به اختصار آنها را مرور می کنیم:
- متغیر در PHP با علامت $ (dollar) در ابتدا و سپس نام متغیر تعریف و مقدار آن با علامت = اختصاص داده می شود.
- PHP به بزرگ یا کوچک بودن حروف متغیرها حساس است (case-sensitive).
- نام متغیرها در PHP می تواند شامل حروف انگلیسی (a-z A-Z)، اعداد (9-0) و علامت _ (underscore) باشد.
- شروع نام متغیر در PHP نباید با اعداد باشد، به طور مثال این شیوه نامگذاری صحیح نیست:
$1_test = 1;
چند مثال از نحوه صحیح تعریف و استفاده از متغیر در PHP:$my_var = 'learning PHP is easy!';
$count = 200;
$count_1 = 200;
$count_2 = 300;
$result = $count_1 + $count_2;
$var = 1;
$VAR = 2;
$_php_step = 'PHP Step: ' . 2;
- کدنویسی در زبان PHP معمولا سختگیری های زبان هایی مانند C، C++، Java و... را ندارد، در این زبان ها هنگام تعریف متغیر باید نوع آن را نیز مشخص کنیم (به فرض رشته، عدد، آرایه و...)، اما در PHP این کار به صورت خودکار انجام می شود، در مثال زیر کد اول مربوط به تعریف و استفاده از متغیر در زبان Java و کد دوم مربوط به تعریف و استفاده از همان متغیر در زبان PHP است:int number;
number = 5;
number = number + 10;
System.out.println(number);
$number = 5;
$number = $number + 10;
echo $number;
- در صورتی که متغیر PHP در علامت های '' (single quotation marks) قرار داده شود، اثر خود را از دست می دهد و مانند یک عبارت متنی در خروجی چاپ خواهد شد، مثال:<?php
/*
خروجی برابر با:
My Country is $country
*/
$country = 'Iran';
$str = 'My Country is $country';
echo $str;
?>
- برای چاپ مقادیر متغیر در خروجی یا باید آن را در بین علامت های "" (double quotation marks) قرار دهیم یا اینکه با علامت . (نقطه) مقادیر رشته ای داخل '' (single quotation marks) را با متغیر ترکیب نمائیم، مثال:<?php
/*
خروجی برابر با:
My Country is Iran
*/
$country = 'Iran';
$str = "My Country is $country";
echo $str;
?>
<?php
/*
خروجی برابر با:
My Country is Iran
*/
$country = 'Iran';
$str = 'My Country is ' . $country;
echo $str;
?>
متغیرهای از پیش تعریف شده (Predefined Variables) در PHP
در هنگام تعریف و استفاده از متغیرها در PHP باید دقت داشته باشیم برخی عبارات و نام ها از قبل توسط مفسر PHP رزرو شده اند (Reserved Predefined Variables) و دارای مفهوم و کارکرد خاصی هستند، به طور مثال متغیرهایی که به آنها در اصطلاح Superglobals گفته می شود و در همه قسمت های برنامه در دسترس هستند:
$GLOBALS
$_SERVER
$_GET
$_POST
$_FILES
$_COOKIE
$_SESSION
$_REQUEST
$_ENV
برای مشاهده جزئیات بیشتر در این خصوص می توانیم به راهنمای سایت php.net در آدرس زیر مراجعه کنیم:http://php.net/manual/en/reserved.variables.php
حدود دسترسی (Scope) متغیرها در PHP
در زبان های برنامه نویسی جهت کنترل دقیق بر روی عناصر مختلف یک برنامه مبحثی تحت عنوان حدود دسترسی یا Scope وجود دارد که به طور خلاصه مشخص کننده این است که یک متغیر، آبجکت و... در کدام قسمت از برنامه در دسترس و قابل استفاده باشد، به طور مثال متغیرها در PHP در حالت عادی به صورت Global تعریف می شوند و در همه قسمت ها در دسترس هستند، البته برای این گفته مثال های نقض وجود دارد، از جمله اینکه متغیر تعریف شده در خارج از یک تابع، درون تابع به صورت معمول قابل استفاده نیست:
<?php
$a = 10;
function myFunc(){
$b = $a * 2;
return $b;
}
echo myFunc();
?>
در صورت اجرای کد بالا با خطای زیر مواجه خواهیم شد:Notice: Undefined variable: a
اما اگر نیاز به دسترسی به متغیر خارج از تابع باشد، PHP برای این شیوه دسترسی به متغیرها راهکارهایی در نظر گرفته است، از جمله استفاده از عبارت global در ابتدای نام متغیر:<?php
$a = 10;
function myFunc(){
global $a;
$b = $a * 2;
return $b;
}
echo myFunc();
?>
خروجی کد بالا عدد 20 خواهد بود.مبحث Scope در PHP جزئیات بیشتری از آنچه گفته شد دارد که در حال حاضر به جهت جلوگیری از پیچیده شدن آموزش ها به همین حد اکتفا می کنیم، در خلال مباحث بعدی به صورت موردی به این موضوع خواهیم پرداخت، جهت آشنایی بیشتر مراجعه به آدرس زیر مفید خواهد بود:
http://php.net/manual/en/language.variables.scope.php
مثال و پیش نمایش آنلاین
برای جمع بندی مطالب این قسمت از آموزش ها، یک مثال کاربردی از مبحث متغیرها در PHP را به همراه پیش نمایش آنلاین آن مرور می کنیم:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>وبگو | شیوه های تعریف و استفاده از متغیر در PHP</title>
<!-- Webgoo.ir -->
<style type="text/css">
body {
font-family: Tahoma, Geneva, sans-serif;
direction: rtl;
font-size: 12px;
}
.ltr {
display: inline-block;
direction: ltr;
}
</style>
</head>
<body>
<?php
$_1 = 1;
echo 'چاپ متغیر:[<div class="ltr">$_1</div>]<br>' . $_1;
echo '<hr>';
$name = 'user';
echo 'چاپ متغیر:[<div class="ltr">$name</div>]<br>' . $name;
echo '<hr>';
$section = 'آموزش مقدماتی';
$category = 'PHP';
$lesson = 2;
echo 'چاپ متغیر:[<div class="ltr">$section . \' \' . $category . \' درس \' . $lesson</div>]<br>' . $section . ' ' . $category . ' درس ' . $lesson;
echo '<hr>';
function testScope(){
$result = null;
if(defined(@$name)){
$result = 'متغیر <div class="ltr">$name</div> در دسترس است!';
} else{
$result = 'متغیر <div class="ltr">$name</div> در دسترس نیست!';
}
$result .= '<br>';
$result .= 'نکته: زمانی که در قسمت echo از علامت single quotation marks استفاده می کنیم، برای درج single quotation های دیگر در این قسمت باید با بک اسلش اثر آنها را خنثی کنیم، در غیر اینصورت خطای Syntax خواهیم داشت، در قسمت خروجی این مثال از این شیوه استفاده شده است.';
$result .= '<hr>';
return $result;
}
echo 'حد دسترسی به متغیر یا Scope:<br>';
echo testScope();
echo 'حساس بودن PHP به بزرگ یا کوچک بودن حروف متغیر:<br>';
$case = 'case';
$Case = 'Case';
echo $case . ' != ' . $Case;
echo '<hr>';
echo 'سورس کدهای این مثال را در برنامه های ویرایشگر PHP مانند برنامه PhpStorm وارد کنید تا به صورت دقیقتری با جزئیات و Syntax ها آشنا شوید.';
?>
</body>
</html>
پیش نمایش آنلایننکته: علامت @ (at sign) برای کنترل (Suppress) عدم نمایش خطاهای Notice در خروجی استفاده می شود، به فرض اگر متغیری در کدها به نحوی تعریف یا مقداردهی شده باشد که امکان دارد در هنگام اجرای برنامه آن متغیر یا مقدار فراهم نشود می توانیم برای عدم نمایش خطای Notice توسط مفسر PHP از علامت @ در جایی که پارامتر به کار می رود استفاده کنیم، در مثال بالا برای متغیر name در تابع testScope از این کاراکتر استفاده کرده ایم.
دستور switch و case در PHP
آموزش برنامه نویسی وب با PHP
توابع (Functions) در PHP
توابع کار با آرایه در PHP - بخش سوم
عملگرها (Operators) در PHP
دیدگاه جدید بر اساس تاریخ ارسال در انتهای دیدگاه های موجود نمایش داده می شود.
چرا به جای ارزش واقعی name$ (مقدار دهی شده) همون name$ رو چاپ میکنه ممنون اگه کمکم کنین
echo ('<font font size ="14" color ="red" >$name</font>');
echo ('<font font size ="14" color ="red" >'.$name.'</font>');
از خداوند متعال آرزوی سربلندی و سرافرازی برای شما عزیزان دارم
اگر ممکنه در مورد جای گذاری یک تابع بین قطعه کد اچ تی ام ال که قراره خودشون داخل یک متغیر قرار بگیرن توضیح بدید. (راهنماییم کنید). روش های مختلفی رو به صورت تجربی امتحان کردم و جواب نداد. در مورد کد زیر راهنمایی میخوام.
$this->head_msg = '<div class="tt-notice" style="width: 800px; margin: 15px 0;"><?php __('buy this theme','them')?></div>';
کد بالا رو میخوام در یک قالب وردپرس استفاده کنم و اون تابع ترجمه باید مقدار ترجمه شده رو بین دو تا تگ div قرار میده و در نهایت با هم میشن مقدار اون متغییر که البته نمی دونم چجوری باید بنویسمش که درست کار کنه چون کار نمیکنه. ببخشید زیاد حرف زدم.$this->head_msg = '<div class="tt-notice" style="width: 800px; margin: 15px 0;">'.yourFunction().'</div>';
همچنین به روش زیر می توانید خروجی را از فیلتر یک تابع عبور دهید:$this->head_msg = yourFunction('<div class="tt-notice" style="width: 800px; margin: 15px 0;"></div>');
میشه گفت منظورم همین بود ولی من این راه رو امتحان کرده بودم ولی بازم جواب نمیداد. من تغییرات زیادی داخل کد دادم که بفهمم مشکل از کجاست ولی یا کار نمیکرد و یا ارور میداد. کاربرد اون متغییر اینه که یه مقداری رو داخل پنل ادمین سایت نمایش میده و اون تابع هم که بین دو تگ اچ تی ام ال وجود داره کار ترجمه رو انجام میده ولی نمیدونم چرا کار نمیده. روش دوم شاید بشه ولی اصلا جالب نیست چون چندیدن تگ اچ تی ام ال بوده و من برای اینکه منظورم رو سریع برسونم اونا رو حذف کردم. البته میدونم مربوط به وردپرسه و اینجا آموزش وردپرس نیست ولی اگر ممکنه راهنماییم کنید.
ممنون و موفق باشید.
میخواستم بدونم تفاوت های
include
require
include_once
require_once
چیه؟؟؟
ببخشید در همه ی مثال هاتون در قسمت استایل از یک فونت به اسم "ج ن وا" استفاده کرده اید. این فونت را من در ویندوز ندیدم!
در بعضی از کدهای پی اچ پی دیدم که ادرس دهیش مثلا اینجوریه
<script type="text/javascript" src="http://sait.ir/99999/999.php?url=88888.ir&sh2=1&sh2=1&sh3=1"></script>
به اینصورت هست که با اضافه کردن متغیرهایی که میبینید که در کد بصورت sh1 و sh2 تعیین شده میشه نتیجه خروجی فایل پی اچ پی رو تغییراتی داد بنده زیاد وارد نیستم و به اصطلاحات هم اشنایی چندانی ندارم ممنون میشم با زبانی ساده بهم اموزشش بدید اگه اموزشهاتون هم هزینه داره بفرمایید تا تقدیم کنم عزیز خواهش میکنم این موضوع خیلی برام مهمه مدتهاست دنبال این راه میگردم یدنیا ممنون میشم اگه راهنماییم کنید
ایمیل هم گذاشتم اگه خبرم کنید واقعا ممنون میشم موفق باشید
من میخوام از متغیرها در دستورهای mysql استفاده کنم مثلا :
SELECT name FROM mutable WHERE id=$x
ولی ارور میده و برنامه اجرا نمیشهSELECT name FROM mutable WHERE id = '$x'
نکته: در صورت استفاده مستقیم از متغیر در پرس و جو جهت حفظ امنیت دیتابیس حتما باید از توابع ایمن سازی مانند mysqli_real_escape_string استفاده کنید، البته شیوه توصیه شده ایمن سازی پرس و جوها استفاده از Bind و Prepared Statement است که در آموزش های مقدماتی MySQL به طور مفصل توضیح داده شده است.پاسخگویی به سوالات ممکن است تا ۲۴ ساعت زمان ببرد.
- به سوالات کلی، زمانبر، مبهم و مشکلاتی که تلاشی برای رفع آنها نکرده باشید پاسخ مختصر داده شده یا به بخش برنامه نویسی اختصاصی ارجاع داده می شوند.
- کدها و اسکریپت های طولانی را ترجیحا در یک صفحه وب آنلاین یا به صورت حساب موقت و آزمایشی قرار دهید تا امکان بررسی دقیق مشکل و خطایابی میسر باشد.
- تمام دیدگاه های ارسالی خوانده شده و برای هر کاربر مدت زمان لازم جهت پاسخگویی در نظر گرفته می شود، لطفا از طرح سوالات متعدد در بازه زمانی کوتاه خودداری کنید.