پنجشنبه ۰۴ اردیبهشت ۱۴۰۴

Thursday, April 24, 2025 GMT +3:30

عملگرها (Operators) در PHP

php-operators

مانند بسیاری از زبان های برنامه نویسی، PHP نیز از قوانین و عملگرهای خاصی جهت محاسبه، مقایسه مقادیر و استدلال منطقی استفاده می کند، در بحث پیشین از بخش آموزش های مقدماتی دیدیم که چگونه می توان متغیرها را تعریف و مقادیر آنها را تغییر داد، همچنین گفتیم که مقادیر متغیر می تواند هر نوع داده ای باشد که در کدنویسی برنامه مورد نیاز است (Int، String، Array، Boolean و...) که در PHP مقدار متغیر نوع آن را مشخص می کند، به طور مثال اگر متغیری مقدار عددی داشته باشد نوع آن متغیر نیز به صورت خودکار عدد (Int) در نظر گرفته می شود، به هر صورت در این مطلب می خواهیم ببینیم مفسر PHP چگونه با مقادیر متغیرها محاسبه و آنها را با هم مقایسه می کند، همچنین نگاهی خواهیم داشت به عملگرهای منطقی که جز عملگرهای پرکاربرد در زبان های برنامه نویسی و از جمله PHP هستند.

عملگرهای محاسبه (Arithmetic Operators) در PHP


در PHP با استفاده از علائمی که در ادامه خواهیم دید محاسبات ریاضی را انجام می دهیم، منظور از محاسبات ریاضی عمل جمع، تفریق، ضرب، تقسیم، باقیمانده بخش پذیری و به توان رساندن است که هر کدام از این موارد با یک علامت بخصوص به شرح زیر مشخص می شوند.
برای عمل جمع در PHP از علامت + استفاده می کنیم، به طور مثال:
$a = 5;
$b = 8;
$addition = $a + $b;
در مثال بالا دو متغیر فرضی a و b را با هم جمع کرده ایم که حاصل مقدار 13 خواهد شد (در صورت نیاز برای چاپ خروجی از دستور echo استفاده می کنیم)، همان طور که مشخص است نوع متغیرها به صورت عدد یا Int هستند، اگر یکی از متغیرها از نوع دیگری باشد عمل جمع ممکن است با خطا مواجه شود (اگر مقدار متغیر صرفا یک عدد بوده حتی اگر بین علامت های ' ' و " "  باشد، مفسر PHP به صورت خودکار نوع آن را به Int تبدیل کرده و اشکالی در محاسبه بروز نمی کند، اما اگر مقدار متغیر علاوه بر عدد به همراه رشته متنی باشد، محاسبه دچار اشکال خواهد شد)، همین رویه در مورد علامت های دیگر مربوط به محاسبه در PHP صدق می کند.
برای عمل تفریق در PHP از علامت - استفاده می کنیم:
$a = 5;
$b = 8;
$subtraction = $b - $a;
حاصل مثال بالا مقدار 3 خواهد بود.
برای عمل ضرب در PHP از علامت * استفاده می کنیم:
$a = 5;
$b = 8;
$multiplication = $a * $b;
حاصل مثال بالا مقدار 45 خواهد بود.
برای عمل تقسیم در PHP از علامت / استفاده می کنیم:
$a = 5;
$b = 8;
$division = $b / $a;
حاصل مثال بالا به صورت اعشاری و مقدار 1.6 خواهد بود.
برای بدست آوردن باقیمانده بخش پذیری در PHP از علامت % استفاده می کنیم:
$a = 5;
$b = 8;
$modulus = $b % $a;
حاصل مثال بالا مقدار 3 خواهد بود، چرا که 8 تنها یک بار بر 5 بخش پذیر است (یعنی یک 5 تایی در 8 قابل گنجاندن است) و باقیمانده عدد 3 خواهد بود.
و در نهایت برای به توان رساندن در PHP نیز از علامت ** استفاده می کنیم (این قابلیت در نسخه 5.6 و به بعد در دسترس است):
$a = 5;
$b = 8;
$exponentiation = $a ** $b;
که حاصل برابر با مقدار 390625 خواهد بود.
نکته: فراموش نکنیم که برای گرفتن خروجی در PHP باید از دستور print یا echo استفاده کنیم، در غیر این صورت هیچ مقداری در خروجی چاپ نخواهد شد.
<?php
$a = 5;
$b = 8;
$addition = $a + $b;
echo $addition;
print $addition;
?>

عملگر افزایش و کاهش (Increment/Decrement Operators) در PHP


معمولا در هنگام کدنویسی برنامه ها مواردی پیش می آید که نیاز به افزایش یا کاهش مقدار یک متغیر به میزان یک واحد است، اگرچه در حالت عادی می توانیم این کار را با عملگر جمع یا تفریق انجام دهیم اما برنامه نویسان همیشه به دنبال ساده ترین و در عین حال سریعترین روش ها هستند! از این رو به جهت پرکاربرد بودن این دو عملیات در اغلب زبان های برنامه نویسی عملگرهای جداگانه بدین منظور در نظر گرفته شده است که PHP نیز از این قاعده مستثنا نیست، بر این اساس دو علمگر ++ برای افزایش به میزان یک واحد و عملگر -- جهت کاهش به میزان یک واحد برای این هدف استفاده می شوند، مثال:
$a = 5;
$a++;
$b = 5;
$b--;
دقت کنیم محل قرارگیری علامت ++ و -- در قبل یا بعد از متغیر دارای اهمیت است، اگر علامت قبل از متغیر قرار گیرد، ابتدا مقدار یک واحد افزایش یا کاهش می یابد و سپس مقادیر جدید به اصطلاح برگردانده می شود که به آن Pre Increment/Decrement گفته می شود (Pre به معنی پیش، Increment افزایش و Decrement کاهش)، اما اگر علامت بعد از متغیر قرار گیرد، ابتدا مقادیر برگردانده شده و سپس مقدار یک واحد افزایش یا کاهش می یابد که به آن Post Increment/Decrement گفته می شود (Post به معنی ارسال یا در اصطلاح برنامه نویسی برگرداندن)، مثال:
<?php
$a = 5;
echo $a++;
echo '<br>';
$b = 5;
echo $b--;
echo '<br>';
$a = 5;
echo ++$a;
echo '<br>';
$b = 5;
echo --$b;
?>
که نتیجه به صورت زیر خواهد بود.
5
5
6
4
در دو حالت اول ابتدا مقدار متغیر چاپ شده و سپس عملگر افزایش یا کاهش اعمال می شود، اما در دو حالت دوم ابتدا عملگر افزایش یا کاهش اعمال شده و سپس متغیر در خروجی چاپ می شود.

عملگرهای اختصاص دهنده (Assignment Operators) در PHP


در مباحث پیشین گفتیم که برای اختصاص یک مقدار به متغیر از علامت = در PHP استفاده می شود، علامت مساوی را در اصطلاح Assignment Operator یا علامت اختصاص دهنده می گویند، در ادامه خواهیم دید که می توانیم عملگرهای محاسبه و مساوی را با هم ترکیب نموده و عمل محاسبه و اختصاص را به صورت مختصر نویسی انجام دهیم، شیوه مختصرنویسی جهت خواناتر شدن سورس ها و پرهیز از نوشتن کدهای اضافه در برنامه نویسی مورد نیاز است.
علامت =+ معادل عملگر + (جمع) و عملگر = (اختصاص) است، با ترکیب این دو علامت می توانیم ابتدا متغیر را با مقادیر مورد نظر جمع کرده و سپس مقدار جدید را به آن اختصاص دهیم، مثال:
//شیوه عادی
$a = $a + 5;
//شیوه مختصرنویسی
$a += 5;
در صورتی که با دستور echo از متغیر a خروجی بگیریم، با فرض اینکه مقدار اولیه آن برابر با 1 باشد، پس از اعمال عملگر ترکیبی =+ مقدار نهایی برابر با 6 خواهد شد، یادآور می شویم که در نتیجه هیچ تفاوتی بین دو شیوه وجود ندارد، صرفا به جهت خوانا و مختصرنویسی کدها است که استفاده از شیوه ترکیبی در موارد نیاز توصیه می شود.
نکته: علامت + و سایر عملگرهای محاسباتی در شیوه مختصرنویسی باید الزاما قبل از علامت = قرار گیرند، در غیر این صورت عملگر ترکیبی به صورت مورد نظر نتیجه نخواهد داد.
علامت =- معادل عملگر - (تفریق) و عملگر = (اختصاص) است، مثال:
//شیوه عادی
$a = $a - 5;
//شیوه مختصرنویسی
$a -= 5;
علامت =* معادل عملگر * (ضرب) و عملگر = (اختصاص) است، مثال:
//شیوه عادی
$a = $a * 5;
//شیوه مختصرنویسی
$a *= 5;
علامت =/ معادل عملگر / (تقسیم) و عملگر = (اختصاص) است، مثال:
//شیوه عادی
$a = $a / 5;
//شیوه مختصرنویسی
$a /= 5;
علامت =% معادل عملگر % (باقیمانده بخش پذیری) و عملگر = (اختصاص) است، مثال:
//شیوه عادی
$a = $a % 5;
//شیوه مختصرنویسی
$a %= 5;
نکته: برای مقداردهی به متغیرهای رشته ای از علامت ترکیبی =. (Concatenation Assignment) استفاده می شود، PHP بر خلاف JavaScript برای رشته متنی و عدد دو علامت ترکیبی مجزا دارد (در جاوا اسکریپت از علامت =+ هم برای رشته و هم عدد می توانیم استفاده کنیم اما در PHP علامت =+ برای متغیرهای عددی و علامت =. برای متغیرهای رشته ای به کار می رود)، مثال:
//شیوه عادی
$a = $a . 'String';
//شیوه مختصرنویسی
$a .= 'String';

عملگرهای مقایسه (Comparison Operators) در PHP


حال که با علائم محاسباتی و اختصاص دهنده در PHP آشنا شدیم نوبت به فراگیری اصول مقایسه ای است، اما اساسا مقایسه در برنامه نویسی چه فایده ای دارد؟! برای اینکه درک کلی و روشنی از مقایسه و فایده آن در PHP داشته باشیم آموزش را با مثالی ادامه می دهیم، فرض کنیم تعدادی از کاربران وبسایتمان عضو کشوری خاص هستند (اطلاعات آنها در پایگاه داده سایت موجود است)، حال می خواهیم به مفسر PHP بگوییم که اگر کشور کاربر برابر آن عبارت بود امکانات خاصی را برای او نمایش دهد یا زبان سایت را متناسب با زبان کشور او تنظیم نماید، امکان این کار تنها در صورت مقایسه کشور کاربر با عبارتی که مد نظر داریم فراهم می شود و به طور ساده خواهیم نوشت: اگر کشور کاربر برابر عبارت x بود زبان سایت را y قرار بده و...، در برنامه نویسی بررسی این برابر بودن یا نبودن با دستورات شرطی (Conditional Statement) و عملگرهای مقایسه ای (Comparison Operators) انجام می شود، با دستورات شرطی در مباحث آینده آشنا خواهیم شد اما عملگرهای مقایسه ای را در ادامه به صورت موردی بررسی می کنیم.
برای مقایسه برابری مقدار دو طرف رابطه از علامت == در PHP استفاده می کنیم، مثال:
$a = 5;
$b = 5;
($a == $b)
در مثال بالا برابر بودن مقدار متغیر a را با b مقایسه کرده ایم که این مقایسه درست (true) خواهد بود، چون مقدار هر دو متغیر 5 است، با علامت == مقایسه را می توان برای مقادیر رشته ای / عددی نیز انجام داد، به طور مثال مقایسه زیر نیز درست (true) خواهد بود، هرچند نوع متغیر a به صورت عددی (Int) و نوع متغیر b به صورت رشته ای (String) است، به عبارت ساده تر در عملگر == نوع متغیرها لحاظ نمی شود و صرفا مقدار آنها با هم مقایسه می شود.
<?php
$a = 5;
$b = '5';
if($a == $b){
    echo 1;
}else{
    echo 0;
}
?>
که مقدار 1 در خروجی چاپ خواهد شد.
برای مقایسه برابر بودن دو طرف رابطه از هر جهت (نوع و مقدار) از علامت === استفاده می کنیم، مثال:
$a = 5;
$b = '5';
($a === $b)
در مثال بالا عدد 5 را به صورت عددی (Int) با عدد '5' به صورت رشته ای (String) با عملگر === مقایسه کرده ایم، نتیجه بر خلاف آنچه در مورد عملگر == دیدیم نادرست (false) خواهد بود، به این دلیل که عملگر === برابری دو طرف رابطه را از هر لحاظ (نوع و مقدار) بررسی می کند و اگر نوع یا مقدار دو متغیر یکسان نباشد، نتیجه نادرست (false) خواهد بود.
برای مقایسه برابر نبودن دو طرف رابطه از علامت =! در PHP استفاده می کنیم:
$a = 5;
$b = 5;
($a != $b)
مقایسه بالا یعنی اگر متغیر a برابر b نباشد رابطه برقرار (true) است، اما رابطه بالا برقرار نیست و نتیجه نادرست (false) است، چرا که مقدار هر دو متغیر 5 و برابر هستند، در صورتی که ما نابرابری آنها را مقایسه کرده ایم.
نکته: علامت <> نیز در PHP برای مقایسه برابر نبودن دو طرف رابطه استفاده می شود، این حالت چندان متداول نیست اما کارکردی مشابه با علامت =! دارد.
برای مقایسه برابر نبودن دو طرف رابطه از هر جهت (نوع و مقدار) از علامت ==! استفاده می کنیم، مثال:
$a = 5;
$b = '5';
($a !== $b)
در مثال بالا عدد 5 را به صورت عددی (Int) با عدد '5' به صورت رشته ای (String) با عملگر ==! مقایسه کرده ایم، نتیجه بر خلاف آنچه در مورد عملگر =! دیدیم درست (true) خواهد بود، به این دلیل که عملگر ==! نابرابری دو طرف رابطه را از هر لحاظ (نوع و مقدار) بررسی می کند و اگر نوع یا مقدار دو متغیر یکسان نباشد، رابطه نابرابر و نتیجه درست (true) خواهد بود.
برای مقایسه کوچکتر بودن از علامت > در PHP استفاده می کنیم، مثال:
$a = 5;
$b = 8;
($a < $b)
با توجه به مثال بالا، متغیر a از متغیر b کوچکتر است و مقایسه درست (true) خواهد بود.
برای مقایسه بزرگتر بودن از علامت < در PHP استفاده می کنیم، مثال:
$a = 5;
$b = 8;
($a > $b)
بر این اساس رابطه بالا نادرست (false) است، چرا که مقدار متغیر a برابر با 5 و از متغیر b که مقدار آن 8 است بزرگتر نیست، بنابر این رابطه برقرار نمی باشد.
برای مقایسه کوچکتر مساوی از علامت => در PHP استفاده می کنیم، مثال:
$a = 5;
$b = 8;
($a <= $b)
بر اساس مثال بالا، متغیر a از b کوچکتر است اما مساوی نیست، با این حال این رابطه درست (true) خواهد بود چرا که کافی است یکی از شرایط مقایسه صحیح باشد تا کل آن صحیح (true) فرض شود، به عبارتی عملگر => یعنی کوچکتر یا مساوی.
برای مقایسه بزرگتر مساوی بودن نیز از علامت =< در PHP استفاده می کنیم، مثال:
$a = 5;
$b = 8;
($a >= $b)
با توجه به مثال بالا، متغیر a بزرگتر یا مساوی با b نیست، پس هیچ کدام از پارامترهای این مقایسه برقرار نیست و نتیجه نادرست یا false خواهد بود.

عملگرهای منطقی (Logical Operators) در PHP


عملگرهای منطقی (Logical Operators) در PHP مانند اغلب زبان های برنامه نویسی نقش مکمل را برای عملگرهای مقایسه ای دارند و نتیجه یک یا چند مقایسه را به صورت true یا false برمی گردانند، بر همین اساس در حالت true نیازی به استفاده از علامت خاصی در Syntax نیست اما برای حالت false از علامت ! (نباشد) در ابتدای مقایسه استفاده می کنیم، برای مقایسه چندگانه نیز علامت && (و) و علامت || (یا) کاربرد دارند، همچنین PHP از عبارات دستوری متنی (and، or و xor) نیز پشتیبانی می کند، مثال های زیر به درک موضوع کمک خواهند کرد.
($a > 12)
عبارت بالا یعنی اگر متغیر a بزرگتر از 12 باشد رابطه برقرار و مقدار true برگردانده می شود، در این حالت نیازی به استفاده از علامت خاصی نیست، در واقع عملگر منطقی در این مقایسه استفاده نشده است!
!($a > 12)
عبارت بالا یعنی اگر متغیر a بزرگتر از 12 نباشد رابطه برقرار و مقدار true برگردانده می شود، همان طور که مشخص است در این مقایسه از علامت منطقی ! استفاده شده است.
($a > 12 && $a < 20)

($a > 12 and $a < 20)
عبارت بالا یعنی اگر متغیر a بزرگتر از 12 و در عین حال کوچکتر از 20 باشد رابطه برقرار و مقدار true برگردانده می شود، در این رابطه برای بررسی چندگانه از علامت && و عبارت دستوری and استفاده کرده ایم و در صورتی کل این رابطه برقرار و true است که نتیجه هر دو مقایسه true باشد، تنها تفاوت علامت && و عبارت دستوری and حالت تقدم (Precedence) آنها در مفسر PHP است که علامت && نسبت به and مقدم است، این تفاوت زمانی مشخص می شود که عملگرهای منطقی را با عملگر اختصاص دهنده = در یک قسمت استفاده کنیم، به طور مثال خروجی متغیر a در مثال زیر در حالت اول برابر با false و در حالت دوم برابر با true خواهد بود و دلیل این تفاوت تقدم و تاخر پردازش عملگرها نسبت به هم در مفسر PHP است (علامت && نسبت به = مقدم و علامت = نسبت به and مقدم است):
<?php
$a = null;
$b = true;
$c = false;

$a = $b && $c;
var_dump($a);
$a = $b and $c;
var_dump($a);
?>
نتیجه نمونه کد بالا به صورت زیر خواهد بود.
boolean false
boolean true
در حالت اول ابتدا مقایسه با عملگر && صورت گرفته و سپس مقدار برگردانده شده با عملگر = به متغیر a نسبت داده می شود اما در حالت دوم ابتدا مقدار a به عنوان خروجی برگردانده شده و سپس مقایسه با عملگر and صورت می گیرد که در خروجی تاثیری ندارد (توجه کنیم در حالت دوم نیز در نهایت مقدار متغیر a برابر با false خواهد بود و اگر در قسمت های دیگر برنامه از آن استفاده کنیم به صورت flase اثرگذار است، در اینجا صرفا بحث تقدم و تاخر عملگرها است و اینکه کدام یک ابتدا پردازش و اعمال می شوند)، در ادامه به بررسی سایر عملگرهای منطقی می پردازیم.
($a > 12 || $a < 20)

($a > 12 or $a < 20)
عبارت بالا یعنی اگر متغیر a بزرگتر از 12 یا کوچکتر از 20 باشد رابطه برقرار و مقدار true برگردانده می شود، در این رابطه برای بررسی چندگانه از علامت || و عبارت دستوری or استفاده کرده ایم و در صورتی کل این رابطه برقرار و true است که نتیجه یکی از دو مقایسه true باشد، مانند علامت && و and تنها تفاوت علامت || و عبارت دستوری or حالت تقدم پردازش آنها در مفسر PHP است که علامت || نسبت به or مقدم است، در مجموع استفاده از علامت && و || شیوه معمول و توصیه شده است و برای پرهیز از بروز مشکلات پیش بینی نشده بهتر است از این عملگرها استفاده کنیم.
آخرین عملگر منطقی PHP که با آن آشنا خواهیم شد عبارت دستوری xor است، این عملگر زمانی مقدار true برمی گرداند که فقط یکی از طرفین مقایسه true باشد، به عبارت دیگر در صورتی که هر دو طرف مقایسه true یا false باشند عملگر xor مقدار false را به عنوان نتیجه برمی گرداند.
<?php
$b = true;
$c = false;
$a = $b xor $c;
var_dump($a);
?>
از آنجایی که مقدار متغیر فرضی b به صورت true و مقدار متغیر c به صورت false است، رابطه برقرار بوده و نتیجه مقایسه بالا به صورت زیر خواهد بود.
boolean true
نکته: برای نمایش ساختار پارامترها از تابع var_dump در PHP استفاده می کنیم، این تابع خصوصیات پارامترها را از نظر نوع (Type) و مقدار (Value) در خروجی چاپ می کند و شیوه مرسوم در خطایابی برنامه ها حین کدنویسی است.
دسته بندی: آموزش مقدماتی » PHP
related مطالب بیشتر:
تعریف و استفاده از متغیر (Variable) در PHP
توابع کار با آرایه در PHP - بخش دوم
توابع کار با آرایه در PHP - بخش سوم
توابع (Functions) در PHP
توابع کار با آرایه در PHP - بخش اول
دیدگاه
more ۳۶ دیدگاه برای این مطلب ارسال شده است.
more چینش دیدگاه ها به ترتیب از جدیدترین به قدیمی ترین است.
ارغوان
۱۴:۱۶ ۱۴۰۰/۱۱/۲۳
تابعی بنویسید که دو عدد را دریافت کند و عدد اول را به توان عدد دوم برساند.
میشه کمک کنید ممنونم
برای به توان رساندن می توانید از نمونه کد زیر در PHP استفاده کنید:
<?php
$number_1 = 3;
$number_2 = 2;
function numToPower($num_1, $num_2){
return pow($num_1, $num_2);
}
echo numToPower($number_1, $number_2);
?>
مریم
۱۶:۴۵ ۱۴۰۰/۰۲/۱۴
چطوری میشه صفحه ای ایجاد کرد که به کمک یک فرم عددی رو از کاربر بگیره و در یک صفحه php اعداد کوچکتر از عدد دریافت شده از کاربر را نشون بده و هر عدد رو در یک خط نشون بده
در نمونه کد زیر تا 10 عدد کوچکتر از عدد ارسال شده در خروجی چاپ می شود:
<form action"index.php" method="post">
<input name="number" type="text" dir="ltr">
<input type="submit" value="Submit">
</form>
<?php
@$number = $_POST['number'];
if(!empty($number)){
for($i = ($number - 1); $i > ($number - 11); $i--){
echo $i . '<hr>';
}
}
?>
با تغییر مقادیر 11 می توانید تعداد خروجی را کم و زیاد کنید.
ahmad
۰۷:۴۲ ۱۳۹۹/۱۲/۱۴
با سلام
الان من توی وردپرس یه مبلغ رو با مبلغ اصلی محصول جمع میکنم. مثلا 1000 تومن برای نصب. یعنی چک باکس 1000 رو تیک میزنم و توی سبد خرید جمع میشه. میخوام در همون صفحه محصول که تیک رو میزنم با مبلغ اصلی جمع بشه. بصورت اجاکس, ممنون میشم یه مثال بزنید.
سایت عالی دارید. موفق باشید
اگر همه مبالغ (مبلغ محصول، هزینه نصب) در سمت کاربر خروجی داده شده است نیازی به ارسال درخواست Ajax نیست با JavaScript می توانید هزینه نمایشی را کنترل کنید، مثال:
<div id="basket-wrap">
جمع سبد خرید: <span id="basket-show"></span>
</div>
<form name="buy" action="#" method="post">
<input name="product" type="hidden" value="20000">
<input name="install" type="checkbox" value="1000" onclick="resetBasket('basket-show', 'buy', 'product', 'install');">
</form>
<script>
function resetBasket(basket_id, form_name, product_name, install_name){
const basket = document.getElementById(basket_id);
const form = document.forms[form_name];
const product = form[product_name];
const install = form[install_name];

if(install.checked === true){
basket.innerHTML = parseInt(product.value) + parseInt(install.value);
} else {
basket.innerHTML = product.value;
}
}

window.onload = function(){
resetBasket('basket-show', 'buy', 'product', 'install');
}
</script>
اما اگر به هر دلیل نمی توانید یا نمی خواهید در سمت کاربر این کار را انجام دهید می توانید با Ajax به فایل PHP درخواست ارسال کرده و نهایتا نتیجه را در سبد خرید نمایش دهید، مثال:
<div id="basket-wrap">
جمع سبد خرید: <span id="basket-show"></span>
</div>
<form name="buy" action="#" method="post">
<input name="product" type="hidden" value="20000">
<input name="install" type="checkbox" value="1000" onclick="resetBasket('basket-show', 'buy', 'product', 'install', true);">
</form>
<div id="wait"></div>
<script>
function ajaxResponse(basket_id, product_value, install_value){
var xmlHttp;

try {
//Opera, Firefox, Safari
xmlHttp = new XMLHttpRequest();
} catch (e) {
//Internet Explorer
try {
xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e) {
alert("متاسفانه مرورگر شما از ای جکس پشتیبانی نمی کند");
return false;
}
}
}
xmlHttp.onreadystatechange = function () {
if (xmlHttp.readyState == 4 && xmlHttp.status == 200) {
document.getElementById(basket_id, ).innerHTML = xmlHttp.responseText;
document.getElementById('wait').innerHTML = '';
} else {
document.getElementById('wait').innerHTML = 'لطفا چند لحظه صبر کنید...';
}
}

xmlHttp.open("POST", "ajax_request_handle.php", true);
xmlHttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xmlHttp.send('product=' + product_value + '&install=' + install_value);
}

function resetBasket(basket_id, form_name, product_name, install_name, is_ajax){
const basket = document.getElementById(basket_id);
const form = document.forms[form_name];
const product = form[product_name];
const install = form[install_name];
const ajax_response = 0;

if(!is_ajax){
if(install.checked === true){
basket.innerHTML = parseInt(product.value) + parseInt(install.value);
} else {
basket.innerHTML = product.value;
}
} else {

if(install.checked === true){
ajax_response = ajaxResponse(basket_id, product.value, install.value);
} else {
ajax_response = ajaxResponse(basket_id, product.value, 0);
}

basket.innerHTML = ajax_response;
}
}

window.onload = function(){
resetBasket('basket-show', 'buy', 'product', 'install', false);
}
</script>
امیرحسین
۰۱:۵۴ ۱۳۹۹/۱۱/۱۴
سلام استاد عزیز وقت بخیر
من یه درخواستی داشتم که تو هیچ جا همچین اموزشی رو ندادن اگه ممکنه شما این اموزش رو تو سایت قرار بدید : فرض کنید من یه همچین شرطی مینویسم
$x = '';
if($x == ''){
}
من چک کردم اگه متغیر ایکس خالی بود یه عملی رو انجام بده ولی کاربر ممکنه صفر بزاره و شرط من درست اون چیزی که میخوام کار نکنه (نمیخوام از روش سه تا مساوی استفاده کنم) در واقع میخوام فقط بدونم در چه جاهایی از دوتا مساوی استفاده کنم در چه جاهایی از سه تا مساوی بزارید من سوالمو اینجوری مطرح کنم
if($x == ''){}
در چنین شرطی من از کجا بدونم رشته به عدد تبدیل میشه بعد مقایسه میشه یا عدد به رشته تبدیل میشه بعد مقایسه میشه، در بقیه موارد چطور مثلا مقایسه بولی یا چیزای دیگه اگه منبعی در این مورد هست بهم بگید ممنون میشم
برای مقایسه متغیرهای مختلف در PHP باید به دو مسئله "نوع - Type" و "مقدار - Value" توجه داشته باشیم، در حالت عادی عملگرهای PHP صرفا مقدار را بررسی می کنند و به نوع متغیر توجه ای ندارند، به فرض:
<?php
$var = true;
if($var == 'true'){
echo 1;
} else {
echo 0;
}
?>
خروجی مثال بالا عدد 1 خواهد بود و true به صورت Boolean با true به صورت String برابر است چون مقدار تبدیل منطقی آنها مساوی است (true بولین را به رشته تبدیل کنیم یا وقتی متغیری مقدار رشته ای داشته باشد و false نباشد بررسی آن true برمی گرداند)، اما اگر از عملگر === استفاده کنیم علاوه بر مقدار، نوع دو متغیر نیز بررسی می شود و در اینجا بحث تبدیل مجاز نیست.
https://www.php.net/manual/en/language.types
بر همین اساس در خصوص مقادیر خالی (Empty) چند حالت مختلف وجود دارد که مقدار همگی آنها از نظر منطق مفسر PHP خالی فرض می شود و به هم قابل تبدیل هستند:
- رشته خالی به صورت '' یا ""
- 0 به هر صورتی (0 عددی، 0.0 اعشاری، "0" رشته ای)
- null و false
- آرایه ای که عنصری نداشته یا متغیری که مقداری نداشته باشد.
https://www.php.net/manual/en/language.types.boolean.php#language.types.boolean.casting
دقت کنیم برابر بودن مقادیر در صورتی است که تبدیل دو طرفه ممکن و توجیه منطقی داشته باشد (در بحث 0 و خالی چون 0 یعنی هیچ و خالی هم یعنی هیچ PHP از این منطق استفاده می کند) به فرض کد زیر را در نظر بگیریم:
<?php
$var = 'null';
if($var == null){
echo 1;
} else {
echo 0;
}
?>
در اینجا خروجی 0 است چون منطقی نمی توانیم برای تبدیل داشته باشیم (null رشته ای پوچ نیست!).
با این توضیح در هنگام نوشتن کدها باید ببینیم هدف ما از مقایسه فقط مقدار است یا شامل نوع هم می شود یا اینکه نوع و مقدار با هم است؟
بر همین اساس چند دستور و تابع پرکاربرد در PHP وجود دارد:
- isset برای بررسی تعریف شدن یا نشدن متغیر
- gettype برای بدست آوردن نوع متغیر
- empty برای بررسی خالی بودن یا نبودن مقدار متغیر
- is_numeric برای بررسی عدد بودن یا نبودن مقدار متغیر
خلاصه اینکه هرکجا نیاز به بررسی دقیق بود باید نوع و مقدار هر دو بررسی شوند، برای جلوگیری از دریافت خطاهای ناخواسته می توانیم پارامترها را قبل از مقایسه در بالاترین سطح از کدها به نوع مدنظرمان تبدیل و سپس در ادامه کدها هرجا نیاز بود مقایسه کنیم یا اینکه از عملگر === برای بررسی های حساس استفاده کنیم.
ali
۱۹:۲۳ ۱۳۹۹/۱۰/۰۶
سلام چجوری میشه با php بازی هوب رو طراحی کرد
PHP زبان مناسبی برای طراحی بازی های سه بعدی نیست، برای طراحی این بازی ها معمولا از موتورهای بازی مانند Unity و زبان هایی مانند #C استفاده می شود، البته اگر بخواهید فرآیندهای آنلاین بازی را در سرور مدیریت کنید در اینصورت PHP در این بخش کاربرد خواهد داشت.
۲۰:۱۰ ۱۳۹۹/۱۰/۰۵
سلام. عملگر @ چه زمانی قبل از یک متغییر میاد؟
علامت @ (at sign) برای کنترل (Suppress) عدم نمایش خطاهای Notice در خروجی استفاده می شود، به فرض اگر متغیری در کدها به نحوی تعریف یا مقداردهی شده باشد که امکان دارد در هنگام اجرای برنامه آن متغیر یا مقدار فراهم نشود می توانیم برای عدم نمایش خطای Notice توسط مفسر PHP از علامت @ در جایی که پارامتر به کار می رود استفاده کنیم، مثال های زیر را با و بدون علامت @ اجرا کنید:
<?php
echo @$hello;
$param = @$_GET['q'];
if(1 != 1){
$var = 1;
}
echo @$var;
$array = array(1, 2, 3);
echo @$array[5];
?>
به این صورت خطاهایی که کنترل شده هستند می توانند نادیده گرفته شوند.
الناز
۱۱:۳۱ ۱۳۹۹/۰۷/۰۹
سلام وقتتون بخیر. چطور میشه برنامه ای رو در php نوشت که کدملی رو تبدیل به شماره دانشجویی کنه اگه برام بنویسید ممنون میشم.
سوالتان مبهم و کلی است!، لطفا یک نمونه کد ملی و شماره دانشجویی مد نظر مبتنی بر آن را درج کنید تا امکان راهنمایی وجود داشته باشد.
Hasti
۲۰:۲۵ ۱۳۹۹/۰۱/۲۹
سلام وقتتون بخير
من يك آرايه 1 تا 10 ايجاد كردم حالا ميخوام تك تك عناصر آرايه به توان 2 برسونم بايد چه كار كنم؟
برای به توان رساندن عناصر آرایه می توانید از تابع pow در PHP بر اساس نمونه الگوی زیر استفاده کنید:
<?php
$array = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
for($i = 0; $i < count($array); $i++){
$array[$i] = pow($array[$i], 2);
}
print_r($array);
?>
mohammad
۱۴:۵۲ ۱۳۹۷/۱۲/۱۶
سلام و با تشکر
من میخوام از یک ارایه یک مقدار رو خارج کنم و شماره ارایه رو برای من چاپ کنه
به طور مثال من میخواهم از یک ارایه 3 عضوی که اعضای ان
css,  phpcake, 12_php
هستند بیاید و انهایی که درونشان کلمه php به کار رفته را جدا کند و اعدادشان را به من نشاند دهد و مثلا بگوید که شماره 2 و 3 دورنشان کلمه php به کار رفته است.
اگر میتوانید مرا راهنمایی کنید
نمونه
نمایش شماره حروف apple
ورودی
11_apple
apple34
orange
خروجی
1, 2
اینگونه باشد
نمونه تابع زیر برای بررسی و شمارش الگوی مد نظر در یک آرایه کاربرد دارد:
<?php
$array = array('11_apple', 'apple34', 'orange');
$pattern = '/apple/iu';

function checkMyArray($array, $pattern){
$loop = 1;
$found = null;

foreach($array as $key => $value){
if(preg_match($pattern, $value)){
$found .= $loop . ', ';
$loop++;
}
}

$found = substr(trim($found), 0, -1);

return $found;
}

echo checkMyArray($array, $pattern);
?>
negin
۲۳:۲۲ ۱۳۹۷/۰۸/۲۰
سلام میخوام برنامه ای بنوسیم در php که مثلا بین اعداد 17 و 8- و 0 و 7- و 10 کوچک ترین عدد چاپ بشه با استفاده از آرایه نوشته میشه؟
تفاوتی نمی کند، برای پیدا کردن کوچکترین مقدار عددی می توانید از تابع min در PHP استفاده کنید، مثال:
<?php
$numbers = array(17, -8, 0, -7, 10);
$min = min($numbers);
echo $min;
$min = min(17, -8, 0, -7, 10);
echo $min;
?>
میثم
۲۳:۳۷ ۱۳۹۷/۰۵/۰۲
سلام
دوستان من میخوام یدونه اعداد 10 رقمی رو میخوام چک بکنم که این 10 رقم تکراری نباشه
با توجه به توضیحات می توانید از نمونه کد و تابع زیر استفاده کنید:
<?php
$num = '1234567890';

function checkRepeat($num){
$array_num = str_split($num, 1);
$array_check = array();

foreach($array_num as $key => $value){
if(in_array($value, $array_check)){
return false;
}

$array_check[] = $value;
}

return true;
}

if(checkRepeat($num)){
echo 'OK!';
} else{
echo 'Error!';
}
?>
نکته: اگر اعداد مد نظرتان با 0 شروع می شوند یا چنین احتمالی در برنامه وجود دارد، مقدار باید به صورت رشته ای (String) ذخیره و در کد استفاده شود (0 در چنین مواردی در PHP نادیده گرفته شده و حذف می شود).
صادق
۱۱:۳۷ ۱۳۹۶/۰۷/۲۶
سلام
ممنونم از جوابتون. در ادامه سوالم، یک فیلد داریم که میاد یک مقدار از کاربر میگیره و اونا با یک مقدار تو دیتابیس مقایسه میکنه. حالا چه جوری به برنامه بگیم مقداری که کاربر وارد کرده رشته هستش تا نتیجه مقایسه درست از آب در بیاد
به یکی از روش های زیر می توانید متغیر را در PHP با مقادیر رشته ای تعریف کنید:
<?php
$var = (string) @$_POST['input'];
$var = strval(@$_POST['input']);
?>
صادق
۱۹:۱۰ ۱۳۹۶/۰۷/۲۵
سلام
برای بررسی برابر بودن دو مقدار، که هر دو با یک یا چند تا صفر آغاز میشن چه کار باید کنیم مثلا 001 مساوی 01 نیست.
در صورتی که مقدار به صورت عددی (Int) باشد، صفرها در ابتدا به حساب نمی آیند، اگر هم مقدارها به صورت رشته باشد برابر نخواهد بود (از علامت === برای مقایسه استفاده کنید) و این طبیعی است:
<?php
$num_1 = 001;
$num_2 = 01;
if($num_1 === $num_2){
echo 1;
} else{
echo 0;
}
$str_1 = '001';
$str_2 = '01';
if($str_1 === $str_2){
echo 1;
} else{
echo 0;
}
?>
۱۹:۲۹ ۱۳۹۵/۰۶/۱۹
آقا دمتون گرم
خیلی از مشکلات برنامه نویسی پی اچ پی من با توضیحات شما رفع شده
از تلاشتون متشکرم
Matori73
۱۹:۴۳ ۱۳۹۵/۰۳/۰۷
درود !
در سایت برای هر پست میتونم کامنت بذارم و کاربر میتونه کامنت رو هم لایک کنه..
حالا چطور میتونم کامنتی که بیشترین تعداد لایک رو داره، نشون بدم !؟
به ازای هر بار لایک شدن کامنت، یک سطر به دیتابیس اظافه میشه، ما باید کل این سطرها رو بشماریم و بعد مقایسه کنیم و ببینیم بیشترین لایک ها برای کدوم پست بوده ..
ممنون میشم یک صورت کلی از دستوراتی که لازمه استفاده بشن رو بگید !؟
تشکر ..
ایجاد سیستم لایک به این صورت فشار زیادی به دیتابیس و برنامه شما تحمیل خواهد کرد که بهینه نیست، راه حل بهتر این است که برای لایک ها یک جدول جداگنه داشته باشید که شماره id هر پست به همراه تعداد لایک آن در یک ردیف باشند، با هر لایک مقدار موجود برای آن پست را افزایش دهید، همچنین برای ارائه گزارش های آماری این حالت مناسبتر است، قاعدتا برای انجام این موارد باید با MySQL و دستورات آن مانند تابع COUNT همچنین ایجاد پرس و جو با SELECT و... آشنایی داشته باشید.
more لطفا پیش از ارسال دیدگاه نکات زیر را مد نظر داشته باشید:
- به سوالات کلی، زمانبر، مبهم و مشکلاتی که تلاشی برای رفع آنها نکرده باشید پاسخ مختصر داده شده یا به بخش برنامه نویسی اختصاصی ارجاع داده می شوند.
- کدها و اسکریپت های طولانی را ترجیحا در یک صفحه وب آنلاین یا به صورت حساب موقت و آزمایشی قرار دهید تا امکان بررسی دقیق مشکل و خطایابی میسر باشد.
- تمام دیدگاه های ارسالی خوانده شده و برای هر کاربر مدت زمان لازم جهت پاسخگویی در نظر گرفته می شود، لطفا از طرح سوالات متعدد در بازه زمانی کوتاه خودداری کنید.



 refresh
10 × 10
2 × 6
20 × 20
=