পিএইচপি - মিথ্যা যখন মিথ্যা প্রতিধ্বনি করতে পান


172

নিম্নলিখিত কোডটি কিছু মুদ্রণ করে না:

$bool_val = (bool)false;
echo $bool_val;

তবে নিম্নলিখিত কোডগুলি মুদ্রণ করে 1:

$bool_val = (bool)true;
echo $bool_val;

সেখানে প্রিন্ট করতে একটি ভাল উপায় আছে 0বা falseযখন $bool_valহয় falseএকটি যুক্ত করার চেয়ে ifবক্তব্য?


5
এটি যদি ডিবাগিংয়ের জন্য হয় তবে প্রতিধ্বনির পরিবর্তে var_dump ব্যবহার করে দেখুন।
মার্ক ই। হাজেস

1
(bool)ঢালাই অপ্রয়োজনীয় হয়, তাহলে আপনি bool, কাস্ট bool, প্রয়োজন হবে না: (bool) true === true
জন সোর্েল

পিএইচপি কনফিগার করার কোনও উপায় আছে যাতে echo 0==1;ফলস্বরূপ 0বা false?
মারিও

উত্তর:


250
echo $bool_val ? 'true' : 'false';

অথবা যদি আপনি কেবল আউটপুট চান তবে এটি মিথ্যা:

echo !$bool_val ? 'false' : '';

85
এটি কোনও বিভ্রান্তিকর, বিস্তৃত এবং অকার্যকর কোনও আপাত সুবিধা ছাড়াই। আমি 20+ বছর ধরে প্রোগ্রামিং দেখা হয়েছে করেছি কখনো আমি .. নাল অনেকবার ফাঁকা স্বয়ংক্রিয়ভাবে রূপান্তর করতে 'মিথ্যা' চেয়েছিলেন, কিন্তু কখনো 'মিথ্যা'। আমার জাভা / স্প্রিং / হাইবারনেট বিকাশ এতটা পরিচ্ছন্ন এবং এমনকি পরিমিত পিএইচপি সিস্টেমগুলির চেয়ে শক্তিশালী। আমি প্রচুর বিভ্রান্ত লোকদের খুঁজে পেলাম .. stackoverflow.com/questions/9042002/… তবে এই নকশার "বৈশিষ্ট্য" এর আসল কারণ হিসাবে আমি কোনও রেফারেন্স পাইনি ।
টমাস ডাব্লু

3
আমি সত্যিই যুক্তি করতে চেয়েছিলাম যে (স্ট্রিং) FALSE == "" পিএইচপি-র ডকুমেন্টেশন থেকে এই বিটের উপর ভিত্তি করে একটি ভাল ধারণা: "বুলিয়ান ট্রু মানটি" ​​1 "স্ট্রিংয়ে রূপান্তরিত হয় B স্ট্রিং)। এটি বুলিয়ান এবং স্ট্রিংয়ের মানগুলির মধ্যে পিছনে রূপান্তর করতে দেয়। " তবে আমি এটি পরীক্ষা করে দেখেছি এবং (বুল) "0" মিথ্যাতেও মূল্যায়ন করে, তাই ... আমি জানি না। আমি পিএইচপি পছন্দ করি, তবে আমি অস্বীকার করতে পারি না যে এ ধরনের 'অদ্ভুত> _>
বেন

7
এটা অদ্ভুত নয় FALSE == ''। এটি পুরোপুরি বৈধ এবং জাভাস্ক্রিপ্ট সহ অন্যান্য ভাষার একটি অংশ। কী অদ্ভুত তা একটি খালি স্ট্রিংয়ের কাছে ডিফল্ট। এটি 0 এ ডিফল্ট হওয়া উচিত Always সর্বদা। বিশেষত যেহেতু সত্য সর্বদা 1 এ ডিফল্ট থাকে This এটি প্রোগ্রামিংয়ের একটি মূল নিয়ম ভঙ্গ করে। আপনার কোডটি ধারাবাহিক রাখুন। এটি স্পষ্টত একটি বাগ।
লিটারফোর

1
এটি করার সহজ উপায়টি হ'ল প্রিন্ট_আর মাধ্যমে ব্রেইন মান সহ একটি অ্যারে চালানো, সেই মানগুলি ফাঁকা দেখাবে যদি না আপনি আগে লুপের মাধ্যমে অ্যারে চালিত করেন যা এগুলি সরিয়ে আনে, সুতরাং আপনি যদি কেবল ডিবাগ বা লগ করার চেষ্টা করছেন , মানগুলি আসলে সত্য বা মিথ্যা বা ফাঁকা দেখতে অন্য কোনও কিছু আছে কিনা তা দেখার জন্য এটি ঘাড়ে একটি বিশাল ব্যথা হয়ে ওঠে।
ডেভ হেক

2
@ যদিও পিএইচপি- !! '0'তে মূল্যায়ন করা falseহয়েছে, এটি trueজেএস-এ রয়েছে। !! ""জেএস এবং পিএইচপি-তে মিথ্যা।
চার্লি

64

এটি করার সহজ উপায় এটি:

$text = var_export($bool_value,true);
echo $text;

অথবা

var_export($bool_value)

দ্বিতীয় যুক্তিটি সত্য না হলে এটি ফলাফলকে সরাসরি আউটপুট দেয় will


34

না, যেহেতু অন্য বিকল্পটি জেন্ড ইঞ্জিনটি সংশোধন করছে, এবং এটিকে একটি "আরও ভাল উপায়" হিসাবে কল্পনা করতে কঠোর চাপ দেওয়া হবে।

সম্পাদনা:

আপনি যদি সত্যিই চাইতেন তবে আপনি একটি অ্যারে ব্যবহার করতে পারেন:

$boolarray = Array(false => 'false', true => 'true');
echo $boolarray[false];

3
এটি করার একটি অদ্ভুত উপায়, কারণ অ্যারে কীগুলি বুল ধরণের হতে পারে না। পিএইচপি এইটিকে অ্যারেতে ফেলে দেবে (0 => 'মিথ্যা', 1 => 'সত্য')।
মার্ক ই। হাজেস

66
@ মেহাজে: আমি পিএইচপি-র টাইপ-হ্যান্ডলিংয়ের জন্য যেকোন ধরণের যুক্তি প্রয়োগ করার চেষ্টা বন্ধ করে দিয়েছি। আমি এটি এটি আসে হিসাবে নিতে।
Ignacio Vazquez-Abrams

32

এটি বুলিয়ান মানটি 1/0 এর পরিবর্তে প্রিন্ট করবে।

    $bool = false;

    echo json_encode($bool);   //false

1
দুর্দান্ত উত্তর, বিশেষত আপনার যদি জাসনে সেই বুলিয়ান প্রয়োজন হয়!
বার্ট

1
এটি সেরা উত্তর
শ্যাডি শেরিফ



15

var_export পছন্দসই কার্যকারিতা সরবরাহ করে।

এটি সর্বদাnull বা এর জন্য কিছুই মুদ্রণের চেয়ে মান মুদ্রণ করবে falsevar_exportএটি পাস হওয়ার সাথে একটি পিএইচপি উপস্থাপনা মুদ্রণ করে, আউটপুট পিএইচপি-তে কপি / পেস্ট করা যায়।

var_export(true);    // true
var_export(false);   // false
var_export(1);       // 1
var_export(0);       // 0
var_export(null);    // NULL
var_export('true');  // 'true'   <-- note the quotes
var_export('false'); // 'false'

আপনি যদি স্ট্রিংগুলি মুদ্রণ করতে চান "true"বা "false", আপনি নীচের মতো কোনও বুলিয়ানকে কাস্ট করতে পারেন তবে অদ্ভুততা থেকে সাবধান থাকুন:

var_export((bool) true);   // true
var_export((bool) false);  // false
var_export((bool) 1);      // true
var_export((bool) 0);      // false
var_export((bool) '');     // false
var_export((bool) 'true'); // true
var_export((bool) null);   // false

// !! CAREFUL WITH CASTING !!
var_export((bool) 'false'); // true
var_export((bool) '0');     // false


4
echo(var_export($var)); 

কখন $varবুলিয়ান পরিবর্তনশীল, trueবা falseপ্রিন্ট করা হবে।


আমার মতে, জাভাস্ক্রিপ্টে পিএইচপি ভেরিয়েবল রফতানির জন্য সেরা সমাধান!
আরপিডিজেস

3
এটি কিছুটা বিভ্রান্তিকর। var_exportএক্ষেত্রে এর ফলাফল প্রতিধ্বনিত হবে এবং নাল ফিরে আসবে, সুতরাং var_export আউটপুট দিচ্ছে true || false, এবং echoপ্রতিধ্বনিত হচ্ছে null( '')। এর থেকে আউটপুট ফিরিয়ে আনতে var_exportআপনাকে দ্বিতীয় প্যারামিটার সরবরাহ করতে হবে true
জন সোর্েল

আপনি যদি জাভাস্ক্রিপ্টে পিএইচপি ভেরিয়েবলগুলি রফতানি করতে চান তবে @ আরপিডিশাইগুলি json_encodeআরও ভাল বিকল্প।
andho


3

স্প্রিন্টফ () এর %bবিকল্পটি একটি বুলিয়ানকে পূর্ণসংখ্যায় রূপান্তর করবে:

echo sprintf("False will print as %b", false); //False will print as 0
echo sprintf("True will print as %b", true); //True will print as 1

যদি আপনি এটির সাথে পরিচিত না হন: আপনি এই ফাংশনটিকে একটি নির্বিচার পরিমাণে প্যারামিটার দিতে পারেন যখন প্রথমটি আপনার আউটপুট স্ট্রিংটি প্রতিস্থাপনের স্ট্রিংগুলির মতো %bবা %sসাধারণ স্ট্রিং প্রতিস্থাপনের জন্য মশলাদার হওয়া উচিত ।

প্রতিটি প্যাটার্নটি যুক্তি অনুসারে প্রতিস্থাপন করা হবে:

echo sprintf("<h1>%s</h1><p>%s<br/>%s</p>", "Neat Headline", "First Line in the paragraph", "My last words before this demo is over");

2

json_encode বাক্সের বাইরে এটি করবে, তবে এটি সুন্দর নয় (ইন্ডেন্টেড ইত্যাদি):

echo json_encode(array('whatever' => TRUE, 'somethingelse' => FALSE));

... দেয় ...

{"whatever":true,"somethingelse":false}

0
function dump_condition($condition){
    if($condition){
        return "true";
    } else {
        return "false";
    }
 }

স্ক্রিপ্ট ব্যবহার

echo dump_condition(1>0); // print "true"

echo dump_condition(1<0); // print "false"

0

আপনার বুলিয়ান একটি বুলিয়ান কাস্টিং এবং একটি পূর্ণসংখ্যার প্রদর্শিত হবে আশা করে। এটি কাজ করে trueতবে মিথ্যা নয়। যেহেতু আপনি কোনও পূর্ণসংখ্যা আশা করেন:

echo (int)$bool_val;
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.