পিএইচপি নাল বা খালি?


208

NULLপিএইচপি-তে আমার একটি প্রশ্ন রয়েছে :

  $a = '';
  if($a == NULL) {
      echo 'is null';
  }

খালি স্ট্রিং থাকাকালীন আমি কেন নাল দেখতে পাচ্ছি $a? এটা কি বাগ?

উত্তর:


348

আপনি যা সন্ধান করছেন তা হ'ল:

if($variable === NULL) {...}

নোট করুন ===
যখন ==আপনি করেছেন, পিএইচপি যখন নুল , মিথ্যা , 0 , খালি স্ট্রিং এবং খালি অ্যারে সমান হিসাবে ব্যবহার করে তখন ব্যবহার করুন ।


13
ভুয়া, আপনার অবস্থা কেবল অচিরাচরিত এবং নাল সাথে মেলে $variable। আপনি যা চান তা হ'ল: $variable == null(দ্রষ্টব্য ==)
টমাস লরনেট

6
@ থমাসলুরনেট, ওপি এটিই সন্ধান করছিল, তারা ভাবছিল যে কেন == nullখালি স্ট্রিংয়ের সাথে মিলছে এবং কেবল নাল বা অপরিজ্ঞাত নয়।
গডউইন

3
আমার ভুলটি হ'ল, তবে আপনার শেষ বাক্যটি আমাকে ভাবতে বাধ্য করেছিল যে নুল, মিথ্যা, 0 এবং "" কঠোরভাবে সমান ছিল যা ভুল, ভুল বোঝার জন্য দুঃখিত।
টমাস লরনেট

3
@ জেমস এটি পিএইচপি-তে একটি উদ্দেশ্যমূলক আচরণ, এটি 2017 সালে এখনও সত্য এবং আমি মনে করি দীর্ঘ সময়ের জন্য সত্য হবে
Defrag

1
$a = ''একটি খালি string, falseএকটি বুলিয়ান, $a = 0;একটি পূর্ণসংখ্যা এবং nullটাইপ থেকে হয় null। ওপি যা বলছে তা হ'ল পিএইচপি তাদের মান হিসাবে "একই" হিসাবে থ্রেড করবে, তবে "একই" টাইপের মতো নয়। সুতরাং একটি কঠোর === চেক টাইপ পরীক্ষা করেও পরীক্ষা করে ব্যর্থ হবে এবং যদি আপনি বিভিন্ন ব্যবহার করেন তবে ব্যর্থ। আপনার রিটার্নের মানগুলিতে দৃ cons় হওয়া উচিত। আপনি normaly মত একটি পদ্ধতিতে একটি স্ট্রিং ফিরে আসেন তবে getName(), তাই না পাওয়া উচিত nullযখন এটা খালি একটি emtpy কিন্তু সম্ভাবনা বেশি স্ট্রিং $user->getName() === '' বা $user->getId() === 0বা $user->isActive === false। উদ্দেশ্যমূলক আচরণ!
ক্যাগাটেয়ে উলুবে

225

যেমনটি নিম্নলিখিত টেবিলটিতে প্রদর্শিত হবে, empty($foo)এর সমান $foo==nullএবং is_null($foo)এর একই ফাংশন রয়েছে $foo===null। টেবিলটি nullতুলনা সম্পর্কিত কিছু কৌশলগত মানও দেখায় । (unin একটি অবিচ্ছিন্ন ভেরিয়েবলগুলি বোঝায়))

         empty    is_null 
         ==null  ===null  isset   array_key_exists
      ϕ |   T   |   T   |   F   |   F   
   null |   T   |   T   |   F   |   T   
     "" |   T   |   F   |   T   |   T   
     [] |   T   |   F   |   T   |   T
      0 |   T   |   F   |   T   |   T      
  false |   T   |   F   |   T   |   T   
   true |   F   |   F   |   T   |   T   
      1 |   F   |   F   |   T   |   T   
     \0 |   F   |   F   |   T   |   T   

আমি কখনও ব্যবহার empty()এবং is_null()ফাংশন। সাধারণ তুলনাটি ব্যবহার করা কম অস্পষ্ট, দ্রুত এবং ক্লিনার। বিশেষত মিলের জন্য কম কোঁকড়া বন্ধনী থাকবে।

যেমন if($x==null || $y==null)বনামif(is_null($x) || is_null($y))


2
সারণীতে "0" এবং "0.0" অনুপস্থিত। এগুলি জিনিসগুলিকে সত্যই জটিল করে তোলে বিশেষত খালি ()। এজন্য আমি খালি () ব্যবহার করা এড়াতে চাই।
datasn.io

1
আপনি যে টেবিলটি দেখিয়েছেন তাতে পিএইচপিএস বেসটি, সুতরাং আপনি যেটিকে 'সাধারণ তুলনা' বলেছেন তার পিএইচপি কোড আসলে কী?
চিতাবাহন

@ হিপ ==nullএবং ===null
PHPst

এটি শীর্ষ উত্তর হতে হবে, আরও অনেক সম্পূর্ণ। ধন্যবাদ।
পিজিআর

@ পিএইচপিস্ট আপনি বলেছেন যে সহজ তুলনা কম অস্পষ্ট। আপনি দয়া করে এই নাল খালি () ইত্যাদির পরিবর্তে সাধারণ তুলনা ব্যবহারের উদাহরণ সরবরাহ করতে পারেন
উল ওয়াহাব

28

==বনাম চেক করুন===

'' == NULLসত্য
0 == NULLফিরে আসবে সত্য
false == nullফিরে আসবে সত্য ফিরে আসবে

যেখানে হিসাবে

'' === NULLমিথ্যা
0 === NULLপ্রত্যাবর্তিত হবে মিথ্যা
false === NULLপ্রত্যাবর্তিত হবে মিথ্যা


পরীক্ষিত এবং সঠিক। '' == নাল (সত্য) যখন '' === নাল (মিথ্যা)
দ্য লিজেন্ডারিকপি কোডার

18

না এটি কোনও বাগ নয়। == টেবিল (দ্বিতীয় সারণী) এর সাথে লুজ তুলনাগুলি দেখুন , যা প্রথম স্তম্ভের প্রতিটি মানকে অন্যান্য কলামের মানগুলির সাথে তুলনার ফলাফল দেখায়:

    TRUE    FALSE   1       0       -1      "1"     "0"     "-1"    NULL    array() "php"   ""

    [...]    

""  FALSE   TRUE    FALSE   TRUE    FALSE   FALSE   FALSE   FALSE   TRUE    FALSE   FALSE   TRUE

সেখানে আপনি দেখতে পারেন যে একটি খালি স্ট্রিং ""সঙ্গে তুলনা false, 0, NULLবা ""সত্য উত্পাদ হবে।

পরিবর্তে আপনি is_null [ডক্স] , বা কঠোর তুলনা (তৃতীয় টেবিল) ব্যবহার করতে চাইতে পারেন ।


আলগা তুলনা টেবিলটি মনে হয় যে 0 == "পিএইচপি" বা "পিএইচপি" == 0 তুলনা করলে উভয়ই ফলন করে। সেখানে কি চলছে?
রবার্ট

1
@ রবার্ট: অঙ্কগুলি দিয়ে শুরু না 0করা একটি স্ট্রিং যখন স্ট্রিংয়ে কাস্ট করা হয় তখন রূপান্তরিত হয় : কোডেপ্যাড.আর.জি . / কিউইলএসজি 3 ই । তাই (int)"php" == 0
ফেলিক্স ক্লিং

@ রবার্ট: আমার অর্থ "যখন একটি সংখ্যায় কাস্ট করা হয় "
ফেলিক্স ক্লিং

12

এই নয় একটি বাগ কিন্তু পিএইচপি স্বাভাবিক আচরণ। এটি ঘটে কারণ ==পিএইচপি-তে অপারেটর প্রকারের জন্য পরীক্ষা করে না।

'' == null == 0 == false

আপনি যদি মানগুলি একই ধরণের আছে কিনা তা পরীক্ষা করতে চান তবে ===পরিবর্তে ব্যবহার করুন। এই পার্থক্যটি গভীরভাবে অধ্যয়নের জন্য, দয়া করে সরকারী ডকুমেন্টেশন পড়ুন


8

আপনি যদি ব্যবহার ==করেন তবে পিএইচপি একটি খালি স্ট্রিং বা অ্যারের হিসাবে ব্যবহার করে null। মধ্যে পার্থক্য করতে nullএবং empty, হয় ব্যবহার ===বা is_null। তাই:

if($a === NULL) অথবা if(is_null($a))


যদি ($ একটি === শূন্য)
নিক্ষেপকারী


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