"! ==" এবং "==!" এর মধ্যে পার্থক্য [বন্ধ]


162

গতকাল আমি এই নিয়ে হোঁচট খেয়েছি যখন আমি অন্য কারও দ্বারা লিখিত পিএইচপি কোডটি সংশোধন করেছি। আমি বিস্মিত হয়েছি যে একটি সাধারণ তুলনা ( if ($var ==! " ")) প্রত্যাশার মতো কার্যকর হয়নি। কিছু পরীক্ষার পরে আমি বুঝতে পারি যে যে কেউ এই কোডটি লিখেছেন সে তুলনা অপারেটরের ==!পরিবর্তে ব্যবহার করেছেন used !==আমি ==!কোনও ভাষায় কখনও দেখিনি তাই আমি ভাবছিলাম যে এই কোডটি কীভাবে কাজ করতে পারে এবং কিছু পরীক্ষাও করতে পারে:

<?php
echo "int\n";
echo "1 !== 0: "; var_dump(1 !== 0);
echo "1 !== 1: "; var_dump(1 !== 1);
echo "1 ==! 0: "; var_dump(1 ==! 0);
echo "1 ==! 1: "; var_dump(1 ==! 1);
echo "bool\n";
echo "true !== false: "; var_dump(true !== false);
echo "true !== true: "; var_dump(true !== true);
echo "true ==! false: "; var_dump(true ==! false);
echo "true ==! true: "; var_dump(true ==! true);
echo "string\n";
echo '"a" !== " ": '; var_dump("a" !== " ");
echo '"a" !== "a": '; var_dump("a" !== "a");
echo '"a" ==! " ": '; var_dump("a" ==! " ");
echo '"a" ==! "a": '; var_dump("a" ==! "a");
?>

এটি এই আউটপুট উত্পাদন করে:

int
1 !== 0: bool(true)
1 !== 1: bool(false)
1 ==! 0: bool(true)
1 ==! 1: bool(false)
bool
true !== false: bool(true)
true !== true: bool(false)
true ==! false: bool(true)
true ==! true: bool(false)
string
"a" !== " ": bool(true)
"a" !== "a": bool(false)
"a" ==! " ": bool(false)
"a" ==! "a": bool(false)

অপারেটর মনে হয় বুলিয়ান এবং পূর্ণসংখ্যার ভেরিয়েবলের জন্য কাজ করে তবে স্ট্রিংয়ের জন্য নয়। আমি ==!কোনও সার্চ ইঞ্জিনে পিএইচপি ডকুমেন্টেশন বা এটি সম্পর্কে কিছুই খুঁজে পাচ্ছি না (চেষ্টা করেছেন গুগল, বিং, ডাকডাকগো, তবে আমি সন্দেহ করি যে তারা আক্ষরিক স্ট্রিং অনুসন্ধানের পরিবর্তে এটি ব্যাখ্যা করার চেষ্টা করেছেন)। কেউ কি এর আগে দেখেছেন এবং এই আচরণ সম্পর্কে কোনও আলোকপাত করতে পারেন?


57
আসো ... উপোক্তাদের কী আছে? আমি এর মতো আরও কয়েক ডজন প্রশ্ন করতে পারি। এবং তাদের সাথে অর্ধেক গুরুতর বিশ্লেষণের দ্বারা সঙ্গ দিন। এটি স্ট্যান্ডার্ড পাঠ্যপুস্তক অনুশীলন অনুশীলন, না। এসও তে, আমরা মান এবং বিনোদনের জন্য নয়, মান এবং তথ্যের পক্ষে ভোট দিয়েছি।
sehe

51
@ সে তিনি উজ্জীবিত হচ্ছেন কারণ এটি একটি ভাল গবেষণামূলক প্রশ্নের সংজ্ঞা - তিনি "উত্তরের জন্য গভীরভাবে অনুসন্ধান করেছেন", "সুনির্দিষ্ট", প্রশ্নটি "অন্যদের সাথে প্রাসঙ্গিক", এবং "বিষয়টিতে"। ওপি জিনিসগুলি চেষ্টা করেছে এবং সে কী চেষ্টা করেছে তা আমাদের দেখিয়েছে; এই ধরণের প্রশ্নটির জন্য এই সাইটটি
পালনের

11
@ জে রেইমন্ড: তিনি উত্সাহ পাচ্ছেন কারণ সমস্যা এবং উত্তর সহজেই বোঝার পক্ষে এটি একটি ট্রিভিয়া প্রশ্ন। ট্রিভিয়ার দিকটি কৌতূহল বাড়ায় যা আরও বেশি লোককে চালিত করে এবং সহজ দিকটি সেই ব্যক্তিদের শতাংশের পরিমাণ বৃদ্ধি করে যারা প্রশ্ন এবং উত্তরটি বোঝে এটির পক্ষে ভোট দেওয়ার পক্ষে যথেষ্ট। এটি একটি ভাল প্রশ্ন বা না থাকার সাথে সম্পর্কিত নয়।
টমাস বনিনি

4
@ জে রেমন্ড, স্বীকার করুন, উচ্চ-ভোটের বেশিরভাগ প্রশ্নই ট্রিভিয়া। আরও অনেকের মধ্যে আমার এই তিনটি প্রশ্ন একবার দেখুন: 1 , 2 , 3 । এগুলির মধ্যে কোনওটিই আপনি গুগলে সন্ধান করতে পারেন এমন কিছু নয় (বেশিরভাগ উচ্চ-আপ ভোটের প্রশ্নগুলির বিপরীতে) এবং তারা লেখার আগেই ভাল চিন্তা-চেতনা এবং চেষ্টা করা হয়েছে (আমি জানি, কারণ আমি সেগুলি লিখেছি)। তবে, যেহেতু এগুলি এমন প্রশ্নগুলির জন্য যাদের দক্ষতার প্রয়োজন, তারা কখনই উচ্চ ভোট পায় না। এখানকার সিস্টেমটি ঠিক এইভাবে কাজ করে।
শাহবাজ

3
@ জে রেমন্ড সেহে ঠিক আছে। লেখকদের এসও তে একটি ফিল্ড-ডে হবে। আমি এই তালিকাটি ( php.net/quickref.php ) নীচে যেতে এবং আকর্ষণীয় সমস্যাগুলি নিয়ে আসার পরামর্শ দিচ্ছি যেখানে ফাংশনটি সমাধান the পরিস্থিতি যতই অস্পষ্ট এবং আকর্ষণীয় হবে বা তত বেশি ভোট কার্যকর করবে।
মাইক বি

উত্তর:


243

পার্থক্যটি হ'ল কোনও অপারেটর নেই ==!

এই অভিব্যক্তি:

$a ==! $b

মূলত এটির মতো:

$a == (!$b)

10
বাহ, এত অল্প সময়ে অনেক ভাল উত্তর আমি প্রথম উত্তরটি বেছে নিয়েছি যা স্পষ্ট করে জানিয়েছে যে! ডান হাতের ভেরিয়েবলের জন্য প্রযোজ্য এবং তাই সর্বাধিক মান রয়েছে। অন্যান্য ছেলেদের জন্য দুঃখিত;)
জেরাল্ড স্নাইডার

4
@ জেরাল্ড স্নাইডার: এই উত্তরটির উন্নতি করার জন্য আপনি যতটা করতে পেরেছিলেন তা হ'ল ব্যাকরণ ও বিন্যাসের ক্ষেত্রে এটি অন্যান্য উত্তরগুলির সাথে কমপক্ষে ছিল (যার মধ্যে একটির বিশেষত আপনি এর খুব বিশদ ব্যাখ্যার জন্য আহ্বান জানিয়েছেন) !)। তবে কোনও ব্যাপার না, আমি এখন এটি সম্পাদনা করেছি।
BoltClock

আমি পিএইচপি তে এমনকি প্রোগ্রামও করি না এবং এমনকি আমি বুঝতে পারি যে "==!" 2 অপারেটর হিসাবে পড়তে হবে "==" এবং "!"। এটি কেবল দেখায় যে আপনি কোনও কিছু কীভাবে পড়ছেন তাতে সামান্য বিন্যাসের কতটুকু প্রভাব পড়তে পারে।
স্টারনামার

2
@ বাং দাও উম, জাভাস্ক্রিপ্ট? এটিতে === এবং! == রয়েছে। তবে না ==!
PSr

2
@ ব্যাংডাও এখন আপনি ডাব্লু 3 ফুলের আরও একটি কারণ খুঁজে পেয়েছেন দয়া করে এটি পড়ুন, এটি গুরুত্বপূর্ণ।
কিছু

77

==!পিএইচপি-তে কোনও অপারেটর নেই

এটি ঠিক ==এবং এর সংমিশ্রণ !। এখানে উপস্থিত কেবলমাত্র প্রাসঙ্গিক অপারেটর ==। সুতরাং এই সংমিশ্রণটি ==!ঠিক স্বাভাবিক হিসাবে কাজ করবে ==, Equalityআমার উপর পরীক্ষা করবে এবং বিশ্বাস করবে,

$variable_a ==! $variable_b 

আর কেউ নয়

$variable_a == (!$variable_b)

এবং এগুলো;

"a" ==! " ": bool(false)
"a" ==! "a": bool(false) //is same as "a" == (!"a")

এবং

true ==! false: bool(true)
true ==! true: bool(false)

একাধিক অপারেটরের অক্ষরের সংমিশ্রণ সর্বদা অপারেটর হিসাবে কাজ না করে। উদাহরণস্বরূপ, আমরা যদি গ্রহণ করি =এবং !, এটি কেবলমাত্র অপারেটর হিসাবে কাজ করবে যদি তা !=বা এর প্যাটার্নে থাকে !==। মত এই অক্ষরের জন্য অসংখ্য সমন্বয় হতে পারে !====, !==!ইত্যাদি .. ইত্যাদি .. অপারেটর সমন্বয় থাকা উচিত অনন্য বিন্যাস , অনন্য অর্ডার , অনন্য সমন্বয় , (সমস্ত অক্ষর সব অন্যান্য অক্ষর সঙ্গে মেশা অভ্যস্ত) এবং স্পষ্টভাবে তাদের মধ্যে কোনো স্থান ছাড়া

নীচে অপারেটরদের তালিকা পরীক্ষা করুন;

এখানে চিত্র বর্ণনা লিখুন


2
আমি ব্যবহার করতে সক্ষম হবার একই মায়ায় পড়ে গেলাম <table>
চাদ হ্যারিসন

+ প্রায় ভেবেছিল যে এটি একটি টেবিল ... তবে এটি আসলে একটি চিত্র
বাবা

38

==! অপারেটর নয় বরং দুটি:

== এবং !

! তুলনায় একটি উচ্চ অগ্রাধিকার আছে ==

সুতরাং:

"a" !== " ": bool(true) -> সত্য কারণ "ক" সত্যই "" এর সমান নয়

"a" ==! " ": bool(false) -> মিথ্যা কারণ "a" সমান নয়! ""

== এবং! এর মধ্যে একটি স্পেস দিয়ে লেখা যেতে পারে।


1
false because "a" is not equals to !" "! "" এর অর্থ হ'ল "" সত্য এবং!
জাফি

@ কোয়ারি হ্যাঁ আমি ব্যাখ্যার ভিতরে খুব বেশি
যাইনি

29

==!যেমন বিদ্যমান নেই। এটি কিছুটা রহস্যজনক স্বরলিপি== !

এই ক্রিয়াকলাপগুলিতে স্পেস যেমন কিছু আসে না তেমনি আপনি সহজেই লিখতে পারতেন a --> bযা মূল্যায়ন করে a-- > bতবে অদ্ভুত লাগবে।

সুতরাং, প্রশ্ন হিসাবে: "a" ==! " "পার্স করা হবে "a" == !" "। একটি স্ট্রিং অস্বীকৃতি আওতায় পড়ে ভোটদান কোনো স্ট্রিং অর্থ কিন্তু "0"" "যখন casted হয় true

সুতরাং, অভিব্যক্তি "a" == !" "স্থানান্তরিত হবে:

  1. "a" == !" "
  2. "a" == !false
  3. "a" == true

এবং, হিসাবে string "a"একই নয় bool true, এটি সম্পূর্ণ অভিব্যক্তিটির মূল্যায়ন করে false

তো, গল্পটির নৈতিকতা কী? নিজেকে ফাঁকা বা ভুল জায়গায় রেখে বিভ্রান্ত হতে দেবেন না! :)


3
এই উত্তরে বর্ণিত ভিন্ন, "a" == সত্যকে সত্য বলে মূল্যায়ন করে কারণ একটি খালি স্ট্রিংটি বুলিয়ান মানকে সত্য হিসাবে কাস্ট করা হয়। "A" === সত্য প্রকাশটি মিথ্যাতে মূল্যায়ন করবে।
পাস্কেল রোসিন

25

==! অপারেটর নয়

==!কোনও পিএইচপি তুলনা অপারেটর নয় - এটি একই == !(স্থানটি নোট করুন)

অর্থাত

if ("a" !== " ") {
    // evaluates to true - "a" and " " are not equal
}

if ("a" == !" ") {
    // unreachable
} else {
    // evaluates to false - "a" is not equal to true (!" " evaluates to true)
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.