💻 آخرین فرصت یادگیری برنامه‌نویسی با آفر ویژه قبل از افزایش قیمت در ۵ آذر ماه (🎁 به همراه یک هدیه ارزشمند )
۰ ثانیه
۰ دقیقه
۰ ساعت
۸ همایون
انواع داده(Data Types), دستور شرطی if و عملگر ها(Operators)
جامعه پی اچ پی ایجاد شده در ۲۸ بهمن ۱۳۹۹

Input: if('' == ۰) echo ‘OK۱’;

Output: 

 

Input: if('' == false) echo ‘OK۲’;

Output: ‘OK۲’

 

Input: if('false' == ۰) echo ‘OK۳’;

Output;

 

Input: if('false' == false) echo ‘’OK۴;

Output: 

 

سلام. به دستورات و خروجی‌های بالا توجه کنید.

 در دستور اول و دوم, چرا وقتی در دستور شرطی(ایف) رشته خالی('') رو با صفر مقایسه می‌کنم خروجی نمیده ولی وقتی رشته خالی رو با (فالس) مقایسه می‌کنم خروجی میده؟

در دستور سوم و چهارم, در هر دو صورت خروجی نمیده.

این به نوع داده, دستور شرطی(ایف) یا عمگر بستگی داره؟

سلام و احترام

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

امیر صالحی ۳۰ بهمن ۱۳۹۹، ۰۶:۳۳

8.0.0

همایون ۳۰ بهمن ۱۳۹۹، ۰۷:۰۴
var_dump(0 == ''); // bool(true)
var_dump(0 === ''); // bool(false)
var_dump(false == ''); // bool(true)
var_dump(false === ''); // bool(false)
var_dump('false' == 0); // bool(true)
var_dump('false' === 0); // bool(false)
var_dump('false' == false); // bool(false)
var_dump('false' === false); // bool(false)

این مقایسه بستگی به عملگرها و عملور‌ها داره، این چیزیه که من ازشون خروجی گرفتم برای تست هم میتونید همین کار رو روی سیستم خودتون بررسی کنید

 

 

 

بهترین پاسخ
امیر صالحی ۳۰ بهمن ۱۳۹۹، ۱۵:۴۲

ویندوز ۱۰

Xampp v.۳.۲.۴

PHP v.۸.۰.۰

 

دقیقا مشکل همینجاس حالا خروجی‌های من رو نگاه کنید.

Input:
var_dump(0 == '');
echo '<br>';
var_dump(0 === '');
echo '<br>';
var_dump(false == '');
echo '<br>';
var_dump(false === '');
echo '<br>';
var_dump('false' == 0);
echo '<br>';
var_dump('false' === 0);
echo '<br>';
var_dump('false' == false);
echo '<br>';
var_dump('false' === false);
Output:
bool(false)
bool(false)
bool(true)
bool(false)
bool(false)
bool(false)
bool(false)
bool(false)

توی وبسایت http://phptester.net هم تست کردم همون خروجی رو داد که شما فرمودین (PHP v.7.4) ولی روی سیستم خودم نمیدونم مشکل از کجاست که خروجی‌ها اینجوری میشه؟

همایون ۳۰ بهمن ۱۳۹۹، ۱۵:۵۹

دستوری که فرمدین به صورت خام توی CMD اجرا نمیشه.

ورژن php ۸.۰.۰

همایون ۰۵ اسفند ۱۳۹۹، ۰۶:۱۲

ظاهرا XAMPP با سیستم عامل من سازگاری نداره یا یه مشکلی هست که نمیدونم چیه و به دلیل کمبود وقت XAMPP رو حذف کردم و از WAMP استفاده می‌کنم. الان خروجی‌ها درسته. ورژن PHP 7.3.21

همایون ۰۵ اسفند ۱۳۹۹، ۰۶:۲۸

الان سوال من اینجاس که چرا خروجی‌ها به این صورت میشه؟

 

به موارد زیر نگاه کنید. همون خروجی‌های درست جدید است.

* در خط‌های زیر که با * مشخص کردم چرا String خالی برابر با ۰, false هست و false به صورت String هم برابر ۰ هست ولی ** false به صورت String برابر false به صورت Boolean نیست؟

منطقی نیست اگر بنابر مقدار String باشه که String خالی با ۰ و false برابر هست و false به صورت String هم برابر ۰ هست ولی اگر false به صورت String برابر ۰ هست پس رشته ای که مقدار داره نباید برابر ۰ یا false باشه ولی الان false به صورت String برابر ۰ هست ولی برابر false نیست؟

میشه توضیح بدید به چه صورتی هست؟ چجوری عملگر اینجا مقایسه انجام میده؟

PHP: v7.3.21
Input:
var_dump(0 == '');
 *
echo '<br>';
var_dump(0 === '');
echo '<br>';
var_dump(false == '');
 *
echo '<br>';
var_dump(false === '');
echo '<br>';
var_dump('false' == 0);
 *
echo '<br>';
var_dump('false' === 0);
echo '<br>';
var_dump('false' == false);
 **
echo '<br>';
var_dump('false' === false);
Output:
C:\wamp64\www\test\index.php:3:boolean true
C:\wamp64\www\test\index.php:5:boolean false
C:\wamp64\www\test\index.php:7:boolean true
C:\wamp64\www\test\index.php:9:boolean false
C:\wamp64\www\test\index.php:11:boolean true
C:\wamp64\www\test\index.php:13:boolean false
C:\wamp64\www\test\index.php:15:boolean false
C:\wamp64\www\test\index.php:17:boolean false

 

همایون ۰۵ اسفند ۱۳۹۹، ۰۶:۴۲

سلام. من یه تاپیک توی StackOverflow پیدا کردم که در مورد همین سوال من یه نفر اونجا پرسیده بود. بحث سر تبدیل نوع داده قبل و بعد از مقایسه هست.

 

لینکش رو میتونید پایین ببینید.

 

و یه مسئله دیگه واقعا برای این آموزشگاه متاسفم من و دیگر دانشجویان دوره‌ها رو با مبلغ بالایی خریدیم که فکر نکنم دوره گرونتر از این توی ایران باشه, که اساتید سوالات رو پاسخ بدن ولی اساتید که پاسخگو نیستن هیچ, کس دیگه ای هم پاسخی نداد. فقط یک نفر که اونم بالا می‌تونید ببینید و منم پاسخم رو نگرفتم.

 

Link

همایون ۱۰ اسفند ۱۳۹۹، ۱۱:۳۱