PDA

View Full Version : سوال: استفاده از عملگرهای == و ===



foreach
جمعه 18 بهمن 1392, 14:18 عصر
با سلام و عرض ادب
دوستان چند وقتیه سوالی ذهنمو درگیر کرده که چه زمانی باید از این عملگر ها استفاده کرد
همونطور که میدونید == نوع هارو تبدیل و بعد برسی میکنه در صورتی که === تبدیل رو انجام نمیده ؟


<?php
if(1 == 'hello')

الان کلمه hello به integer تبدیل میشه یا 1 به string ؟
لطفا لطف کنید و یه توضیح کوتایی در این مورد بدید
تشکر

MRmoon
جمعه 18 بهمن 1392, 15:19 عصر
هر رشته ای true هست و هد عدد بزرگتر از ۰ هم true بس الان اینا با هم برابرن:لبخندساده:

arta.nasiri
جمعه 18 بهمن 1392, 15:33 عصر
هر رشته ای true هست و هد عدد بزرگتر از ۰ هم true بس الان اینا با هم برابرن:لبخندساده:

مطمئنید دوست عزیز؟ این 2 هیچ وقت با همدیگه برابر نمیشن!!!


گفته شما زمانی درسته که از عملگر داخل if استفاده نکنیم. ( شایدم من اشتباه میکنم. )

foreach
جمعه 18 بهمن 1392, 15:38 عصر
هر رشته ای true هست و هد عدد بزرگتر از ۰ هم true بس الان اینا با هم برابرن:لبخندساده:
بله , در این شکی نیست ولی اگه توجه داشته باشید


var_dump(0 == "hello");

hello برابر با 0 نیست ولی چون از == استفاده شده نوع ها تبدیل میشن
بنده میخوام بدونم تبدیل نوع با چه معیاری انجام میشه ؟
مثلا در مثال بالا چرا hello تبدیل به integer و در نتیجه مقدار 0 شده ؟

MMSHFE
جمعه 18 بهمن 1392, 15:43 عصر
توی تبدیل نوع، اولویت با انواع عددی هست و رشته ها تبدیل به عدد میشن. بنابراین توی دستوری که نوشتین، کلمه hello تبدیل به عدد میشه (با دستور intval) و چون شروع این رشته، عدد نیست، نتیجه 0 برگردونده میشه و چون با 1 برابر نیست، شرط برقرار نمیشه ولی اگه بجای 1 عدد 0 رو بگذارین، شرط برقراره. اگه میخواین این تبدیل رو تغییر بدین، باید خودتون دست به کار بشین:

if('1' == 'hello')
یا اینکه کلاً عمل بررسی نوع و مقدار رو همزمان انجام بدین:

if(1 === 'hello')
ضمناً همیشه رشته برابر با true نیست. رشته خالی یا رشته ای که با صفر شروع شده باشه و بلافاصله بعد از صفر، حروف اومده باشه، معادل false هستن.