পিএইচপি-তে অপারেটর দ্বিগুণ নয়!


188

ডাবল নন অপারেটর পিএইচপি-তে কী করে ?

উদাহরণ স্বরূপ:

return !! $row;

উপরের কোডটি কী করবে?


32
এটি মূলত return (bool) $row;
করণের

5
আমি ভাবছিলাম তাদের মধ্যে কোনটি দ্রুত এবং আমরা বিজয়ী হিসাবে (বুল) পেয়েছি। i.stack.imgur.com/dcnsM.png
বিনোদ কালাথিল

1
@ বিনোদ এটি একটি দুর্দান্ত তথ্য যা তার জন্য ধন্যবাদ!
রবিন কে

উত্তর:


290

এটি হবে "দ্বিগুণ না অপারেটর" না, এটা না অপারেটর দুইবার প্রয়োগ করা হয়েছে। অধিকার !একটি বুলিয়ান ফলে, হবে প্রতীক নির্বিশেষে । তারপরে !বামেরা সেই বুুলিয়ানটিকে অস্বীকার করবে।

এর অর্থ হ'ল যে কোনও সত্য মানের জন্য (শূন্য, খালি খালি স্ট্রিং এবং অ্যারে বাদে সংখ্যাগুলি) আপনি বুলিয়ান মান পাবেন TRUEএবং যে কোনও মিথ্যা মানের জন্য (০, ০.০ NULL, খালি স্ট্রিং বা খালি অ্যারে) পাবেন বুলিয়ান মান FALSE

এটি কার্যকরীভাবে কাস্টের সমতুল্য boolean:

return (bool)$row;

22
"ডাবল-নন-অপারেটর" বা "ডাবল নট অপারেটর" .. আপনি কীভাবে এটি পড়েন তা নির্ভর করে।
নিকফ 14

9
@ নিকফ আসলেই নয়, "ডাবল নট অপারেটর" একটি অপারেটরকে বোঝায়, নট অপারেটরকে দু'বার ব্যবহার করার কাজ নয়।
থিও

3
@ থিও, এটি আসলে একজন অপারেটর? দোভাষী এই ক্ষেত্রে !!সমান বিবেচনা করবেন (bool)? অথবা কোনটি ব্যবহৃত হয় তার উপর নির্ভর করে বিভিন্ন মেশিন কোড চালিত হবে?
পেসারিয়ার

এটি জাভাস্ক্রিপ্টের জন্যও কাজ করে, এখানে জাভাস্ক্রিপ্টের জন্য মিথ্যা মূল্যবোধের একটি তালিকা রয়েছে এবং পিএইচপি
জোমার সেভিলজো

1
আপনি যতগুলি চান ব্যবহার করতে পারেন। যদি 'ব্যাং' (বিস্ময়কর বিন্দু) এর বিজোড় সংখ্যা থাকে তবে এটি একটি নোট অপারেশন হিসাবে একই রকম হবে !value, এবং যদি কোনও পরিমাণ ব্যাং থাকে তবে এটি একই হবে (bool) value
ডায়মন্ডসিয়া

51

বুলিং কাস্টিং হিসাবে এটি একই (বা প্রায় একই - কোনও কোণার ক্ষেত্রেও থাকতে পারে)। যদি $rowসত্যে ফেলে দেওয়া হয়, তবে !! $rowএটিও সত্য।

তবে আপনি যদি অর্জন করতে চান তবে আপনার (bool) $rowসম্ভবত সম্ভবত এটি ব্যবহার করা উচিত - এবং কিছু "আকর্ষণীয়" অভিব্যক্তি নয়;)


2
থ্যাঙ্কস এর সত্যতা উপলব্ধি করে, আমি অন্য প্রোগ্রামিং ভাষায় এরকম কিছু দেখেছি ne
আন্দ্রেই

16
ব্যবহার !!একটি অভ্যাস সি (++,) এ প্রোগ্রামিং থেকে অবশিষ্ট নেই। সিটিতে একটি কাস্ট করা পিএইচপি-র মতো সহজ নয়, আপনি অনেকগুলি বিভিন্ন সমস্যা পেতে পারেন, সতর্কতাগুলি সংকলন করতে পারেন, সুতরাং এইভাবে লোকেদের ব্যবহার করে বোল করতে হবে !!
নিকিসি

1
@নিক - এটি অদ্ভুত শোনায়, আইএমও ... যেহেতু operator!অতিরিক্ত লোডযোগ্য, তাই এটি ব্যবহার C++করা বিপজ্জনক হবে। এছাড়াও আপনি সিতে স্ট্রাক্ট কাস্ট করতে পারবেন না, বা !সেগুলি ব্যবহার করতে পারবেন না । এছাড়াও যদি কিছু উপেক্ষা করা যায় তবে আপনি সম্ভবত এটি কোনও ফাংশন থেকে প্রত্যাবর্তন করতে সক্ষম হবেন যা এটি একটি বুলিয়ান। আপনি কি সি সম্পর্কে কথা বলছেন?
ভাইরাপোর

2
আমি দেখেছি !! 1 সি তে নিরাপদ রূপান্তর হিসাবে অনেক সি প্রোগ্রামে। (যেহেতু বুলিয়ান সত্যিকার অর্থে সি তে 0 / "শূন্য নয়")
অধ্যাপক ফ্যালকেন

1
@ ভাইরাপটর, !!আপনার দাবি অনুসারে "আকর্ষণীয়" কিছুই নয়। এটি সি থেকে জাভাস্ক্রিপ্ট পর্যন্ত পুরো জায়গা জুড়ে।
পেসারিয়ার

18

এর মানে যদি $rowএকটি আছে truthy মান, এটা ফিরে আসবে true, অন্যথায় false, একটি বুলিয়ান মান রূপান্তর।

এখানে পিএইচপি ডক্স থেকে বুলিয়ান রূপান্তরকরণের উদাহরণ রয়েছে।

Expression             Boolean
$x = "";               FALSE
$x = null;             FALSE
var $x;                FALSE
$x is undefined        FALSE
$x = array();          FALSE
$x = array('a', 'b');  TRUE
$x = false;            FALSE
$x = true;             TRUE
$x = 1;                TRUE
$x = 42;               TRUE
$x = 0;                FALSE
$x = -1;               TRUE
$x = "1";              TRUE
$x = "0";              FALSE
$x = "-1";             TRUE
$x = "php";            TRUE
$x = "true";           TRUE
$x = "false";          TRUE

7

"কোনও নয়" কোনও ভাষা প্রকাশের ফলে ভাষার কী সত্যকে মূল্য দেয় তা বোঝার জন্য অনেক ভাষায় একটি সুবিধাজনক উপায়। উদাহরণস্বরূপ, পাইথনে :

>>> not not []
False
>>> not not [False]
True

এটি যে জায়গাগুলিতে একটি জটিল মান হ্রাস করতে চান সেখানে সুবিধাজনক হতে পারে "" কোনও মূল্য আছে কি? "


1

আর একজন মানব, সম্ভবত সহজ, 'পড়ার' উপায়টি নয়:

  • প্রথম '!' 2 টি কাজ করে: বুলিয়ানকে 'রূপান্তর' করে তার বিপরীতে আউটপুট দেয়। সুতরাং মানটি যদি 'মিথ্যা' হয় তবে এটি সত্য হবে।

  • দ্বিতীয় '!' প্রথমটির বিপরীতে আউটপুট দিতে হয়।

সুতরাং, মূলত, ইনপুট মানটি যে কোনও হতে পারে, একটি স্ট্রিং হতে পারে তবে আপনি বুলিয়ান আউটপুট চান, তাই প্রথম '!' ব্যবহার করুন। এই মুহুর্তে, আপনি যদি ইনপুট মানটি 'মিথ্যা' বলে মনে করেন সত্য, তবে এখানে থামুন এবং কেবল একটি একক ব্যবহার করুন '!' অন্যথায় যদি ইনপুট মানটি 'সত্যবাদী' হয় তবে আপনি যদি সত্যটি চান, তবে অন্য একটি '!' যোগ করুন।


0

এদিকে তাকান

!$a;

বরং ব্যাখ্যার চেয়ে! অপারেটর হিসাবে গ্রহণ হিসাবে

এর বুলিয়ান বিপরীত মান তার ডানদিকে

পড়া

অভিব্যক্তির বিপরীতে বুলিয়ানটিকে তার ডানদিকে নিয়ে যান

এক্ষেত্রে

$a;

একটি অভিব্যক্তি হতে পারে

তাই হয়

!$a;

তাই হয়

!!$a;

এবং

!!!$a;

এবং এই জাতীয় প্রতিটি যেমন একটি বৈধ এক্সপ্রেশন, তাই! অপারেটর তাদের প্রত্যেককে নতুন করে দেওয়া যেতে পারে।

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