পিএইচপি-তে নাল বনাম মিথ্যা বনাম 0


146

আমাকে বলা হয়েছে যে ভাল ডেভেলপারদের স্পট / মধ্যে পার্থক্য ব্যবহার করতে পারে Nullএবং Falseএবং 0এবং সমস্ত অন্যান্য ভাল "কিছুই" সত্ত্বা।
কি হল পার্থক্য, পিএইচপি বিশেষভাবে? এর সাথে কিছু করার আছে ===?


বাস্তবে কখন কী ব্যবহৃত হয় তা নির্ধারণ করা প্রায় অসম্ভব। আমি অনুমান করি যে এটি আপনি কখন ব্যবহার করবেন nullএবং কখন ব্যবহার করবেন তা গুরুত্বপূর্ণ false। আমি ব্যবহার পছন্দ nullযখন একটি পদ্ধতি থেকে একটি মান পুনরুদ্ধার, কারন আমি ব্যবহার করতে পারেন issetতা নির্ধারণ করতে একটি মান পরিবর্তে ব্যবহার করার ফিরিয়ে দেওয়া হয় কিনা emptyযা অ্যাকাউন্ট নেবে না: false, 0, '0'অথবা একটি খালি স্ট্রিং অনেক পরিস্থিতিতে টেকসই মান হতে পারে। আমার কাছে এটি একটি অগোছালো নির্মাণের সবচেয়ে পরিষ্কার সমাধান est
জেএমআরসি

উত্তর:


221

এটি ভাষা নির্দিষ্ট, তবে পিএইচপিতে:

Null" কিছুই না " এর অর্থ । ভেরি আরম্ভ করা হয়নি।

False"" বুলিয়ান প্রসঙ্গে সত্য নয় "এর অর্থ । আপনি লজিক্যাল সমস্যা নিয়ে কাজ করছেন তা স্পষ্টভাবে প্রদর্শন করতে ব্যবহৃত হয়।

0একটি int। উপরে গণিতের জন্য ব্যবহৃত বাকীগুলির সাথে কিছুই করার নেই।

এখন, কী মুশকিল, এটি পিএইচপি এর মতো গতিময় ভাষায় , তাদের সকলের একটি বুলিয়ান প্রসঙ্গে একটি মান রয়েছে , যা (পিএইচপি-তে) False

আপনি যদি এটি দিয়ে পরীক্ষা করেন তবে ==এটি বুলিয়ান মান পরীক্ষা করে, তাই আপনি সমতা পাবেন। আপনি যদি এটি দিয়ে ===পরীক্ষা করেন তবে এটি ধরণের পরীক্ষা করবে এবং আপনি বৈষম্য পাবেন।

তাহলে কেন তারা দরকারী?

ঠিক আছে, strrpos()ফাংশন তাকান। এটি যদি কিছু না পাওয়া যায় তবে এটি মিথ্যা ফিরিয়ে দেয়, তবে 0 টি যদি স্ট্রিংয়ের শুরুতে কিছু পাওয়া যায়!

<?php
// pitfall :
if (strrpos("Hello World", "Hello")) { 
    // never exectuted
}

// smart move :
if (strrpos("Hello World", "Hello") !== False) {
    // that works !
}
?>

এবং অবশ্যই, যদি আপনি রাজ্যগুলির সাথে ডিল করেন:

আপনি DebugMode = False(সেট আপ অফ), DebugMode = True(সেট করা) এবং DebugMode = Null(একেবারে সেট না করা, হার্ড ডিবাগিংয়ের দিকে নিয়ে যাবে) ;-) এর মধ্যে পার্থক্য তৈরি করতে চান ।


39
নাল সম্পর্কে নোট: পিএইচপি এটি "মূল্যহীন" হিসাবে ব্যবহার করে তবে এটি প্রবেশ করা ভাল অভ্যাস নয়। সাধারণভাবে নুল অর্থ "অজানা মান" যা "মূল্য নেই" বা "অবিচ্ছিন্ন ভেরিয়েবল" এর চেয়ে আলাদা। প্লাস 1 কিছুই নয় 1, যখন একটি অজানা মান প্লাস এক একটি অজানা মান। কেবল মনে রাখবেন যে কোনও অপারেটর নূলে প্রয়োগ করা হবে তার ফলশূন্য হয়ে যাবে (কারণ) কোনও "অজানা মান" এর যে কোনও ক্রিয়াকলাপের ফলে অজানা মান আসে।
এলি

7
মনে রাখবেন যে এটি সমস্ত উদ্দেশ্য । বাস্তবে যা ঘটে তার সাথে কিছুই করার নেই। বাস্তবে একটি ফাংশন অস্তিত্বমান মানের (যেমন স্ট্রপোস, ইনপুট_ফিল্টার) এবং ব্যর্থতার জন্য নাল (যেমন ইনপুট_ফিল্টার) এর জন্য মিথ্যা ফিরিয়ে দিতে পারে। সুতরাং উত্তরটি হল, নির্দিষ্ট ফাংশন ডকুমেন্টেশন পড়ার পরে === টি মিথ্যা এবং / অথবা === নাল ব্যবহার করুন।
gcb

5
@ এলি: আপনি এই ধারণাটি কোথায় পাবেন যে নুল মানে সাধারণভাবে "অজানা মান"। আমি যে কোনও কম্পিউটারের ভাষা যেখানে এটি সত্য তা ভাবতে পারি না এবং এর অর্থ ইংরাজীতেও নয়, কমপক্ষে আমি যে কোনও সংজ্ঞা পেয়েছি বা শুনেছি তার অনুসারে নয়। আমি হয়ত জানি না এমন কিছু আপনি জানেন?
আইকনোক্লাস্ট

2
@ আইকনোক্লাস্ট - আমি এটি ডাটাবেস বিশ্ব থেকে নিচ্ছি। যেহেতু আমি এটি বুঝতে পারি, নাল এমন একটি ডেটা মানের জন্য স্থানধারক হিসাবে ব্যবহৃত হয় যা ডাটাবেসে উপস্থিত নেই বা অজানা। দেখুন dev.mysql.com/doc/refman/5.0/en/working-with-null.html বা en.wikipedia.org/wiki/Null_%28SQL%29
এলি

2
এলি ভুল নয়। তিনি এই শব্দার্থতভাবে উল্লেখ করছেন, যখন আপনি নাল ব্যবহার করেন, আপনি অন্যান্য প্রোগ্রামারগুলিকে সিগন্যাল করেন যে সেখানে কী আছে তা আপনি জানেন না। এটি অপরিবর্তিত আপনি যখন 0 ব্যবহার করেন তখন আপনি সিগন্যাল দেন যে সেখানে কী রয়েছে তা আপনি জানেন: একটি সংখ্যা। এবং এখানে নম্বর জিনিস অনুপস্থিতি প্রতিনিধিত্ব করে। মনে রাখবেন যে পিএইচপি মূল্যবোধকে যেভাবে হুমকি দেয়, মানগুলি একটি অর্থ বহন করে না, মানগুলি ডকুমেন্টেশনের একটি রূপ।
ই সন্তুষ্ট

45

nullহয় nullfalseহয় false। দুঃখের হলেও সত্য.

পিএইচপি তে খুব একটা ধারাবাহিকতা নেই। ডেভেলপারদের TRY নাল মানে হলো "অজানা" বা "অবর্তমান" করা। তবে প্রায়শই মিথ্যা 'অস্তিত্বহীন' হিসাবে পরিবেশন করবে (যেমন স্ট্রপপস ('ব্যর্থ', 'অনুসন্ধান') মিথ্যা ফিরে আসবে, এবং নাল নয়)

আপনি প্রায়শই নাল ব্যবহার করা দেখতে পাবেন যখন তারা ইতিমধ্যে কোনও কিছুর জন্য মিথ্যা ব্যবহার করছে। যেমন ফিল্টার_ইনপুট ()। ভেরিয়েবল ফিল্টার ব্যর্থ হলে তারা মিথ্যা প্রত্যাবর্তন করে। এবং নথটি যদি ভেরিয়েবলটি বিদ্যমান না থাকে (বিদ্যমান থাকে না তবে এটি ফিল্টারটিও ব্যর্থ হয়েছিল? সুতরাং কেন নাল ফেরায়?!?)

পিএইচপি ফাংশনগুলিতে তথ্য ফিরিয়ে দেওয়ার সুবিধে রয়েছে। এবং ডেভেলপারদের ডেটার পরিবর্তে সমস্ত ধরণের ব্যর্থতার স্থিতিতে ক্র্যাম করুন।

এবং পিএইচপি-তে ব্যর্থতা (মিথ্যা, নাল) থেকে ডেটা (ইন্ট, টিআর, ইত্যাদি) সনাক্ত করার কোনও বুদ্ধিমান উপায় নেই

ফাংশনের উপর নির্ভর করে আপনাকে সর্বদা পরীক্ষা করতে হবে === নাল বা === মিথ্যা। বা উভয়ের জন্য, ফিল্টার_ইনপুট () / ফিল্টার_ভার () এর মতো ক্ষেত্রে

টাইপ জাগলিং সহ এখানে কিছু মজা। এমনকি অ্যারে এবং অবজেক্টগুলিও অন্তর্ভুক্ত নয়।

var_dump( 0<0 );        #bool(false)
var_dump( 1<0 );        #bool(false)
var_dump( -1<0 );       #bool(true)
var_dump( false<0 );    #bool(false)
var_dump( null<0 );     #bool(false)
var_dump( ''<0 );       #bool(false)
var_dump( 'a'<0 );      #bool(false)
echo "\n";
var_dump( !0 );        #bool(true)
var_dump( !1 );        #bool(false)
var_dump( !-1 );       #bool(false)
var_dump( !false );    #bool(true)
var_dump( !null );     #bool(true)
var_dump( !'' );       #bool(true)
var_dump( !'a' );      #bool(false)
echo "\n";
var_dump( false == 0 );        #bool(true)
var_dump( false == 1 );        #bool(false)
var_dump( false == -1 );       #bool(false)
var_dump( false == false );    #bool(true)
var_dump( false == null );     #bool(true)
var_dump( false == '' );       #bool(true)
var_dump( false == 'a' );      #bool(false)
echo "\n";
var_dump( null == 0 );        #bool(true)
var_dump( null == 1 );        #bool(false)
var_dump( null == -1 );       #bool(false)
var_dump( null == false );    #bool(true)
var_dump( null == null );     #bool(true)
var_dump( null == '' );       #bool(true)
var_dump( null == 'a' );      #bool(false)
echo "\n";
$a=0; var_dump( empty($a) );        #bool(true)
$a=1; var_dump( empty($a) );        #bool(false)
$a=-1; var_dump( empty($a) );       #bool(false)
$a=false; var_dump( empty($a) );    #bool(true)
$a=null; var_dump( empty($a) );     #bool(true)
$a=''; var_dump( empty($a) );       #bool(true)
$a='a'; var_dump( empty($a));      # bool(false)
echo "\n"; #new block suggested by @thehpi
var_dump( null < -1 ); #bool(true)
var_dump( null < 0 ); #bool(false)
var_dump( null < 1 ); #bool(true)
var_dump( -1 > true ); #bool(false)
var_dump( 0 > true ); #bool(false)
var_dump( 1 > true ); #bool(true)
var_dump( -1 > false ); #bool(true)
var_dump( 0 > false ); #bool(false)
var_dump( 1 > true ); #bool(true)

24
আমার মতামত 0 == নাল নিখরচায় অর্থহীন, যেহেতু 0 একটি মান এবং নাল একটি পতাকা যা দেখায় যে ভেরিয়েবলটি অনির্বাচিত হয়। ধন্যবাদ পিএইচপি দল

1
আপনি আপনার কোড বিভাগটি দিয়ে আবার শুরু করেছেন var_dump( null == 0 );
স্পার্কি

2
পিএইচপি-তে আসলে কী অদ্ভুত: নাল <-1 => সত্য
থিপিপি

1
@ মার্কসেন কমপক্ষে যদি পিএইচপি ধারাবাহিকভাবে 0 == নালার মতো আচরণ করত তবে আমি এটির সাথে ঠিক আছি। অদ্ভুতভাবে, 0 == nullএবং null == [], কিন্তু [] != 0!!
নওফাল

1
strrpos('fail', 'search') will return false, and not nullআমার মতে সঠিক - যদি এর nullঅর্থ অজানা থাকে তবে strrposফিরে আসাটা nullএমনটি বলেছিল যে 'স্ট্রিংটি আছে কিনা তা আমি জানি না' বরং 'স্ট্রিংটি নেই'।
ইবারবব

22

নীচে একটি উদাহরণ দেওয়া হল:

            Comparisons of $x with PHP functions

Expression          gettype()   empty()     is_null()   isset() boolean : if($x)
$x = "";            string      TRUE        FALSE       TRUE    FALSE
$x = null;          NULL        TRUE        TRUE        FALSE   FALSE
var $x;             NULL        TRUE        TRUE        FALSE   FALSE
$x is undefined     NULL        TRUE        TRUE        FALSE   FALSE
$x = array();       array       TRUE        FALSE       TRUE    FALSE
$x = false;         boolean     TRUE        FALSE       TRUE    FALSE
$x = true;          boolean     FALSE       FALSE       TRUE    TRUE
$x = 1;             integer     FALSE       FALSE       TRUE    TRUE
$x = 42;            integer     FALSE       FALSE       TRUE    TRUE
$x = 0;             integer     TRUE        FALSE       TRUE    FALSE
$x = -1;            integer     FALSE       FALSE       TRUE    TRUE
$x = "1";           string      FALSE       FALSE       TRUE    TRUE
$x = "0";           string      TRUE        FALSE       TRUE    FALSE
$x = "-1";          string      FALSE       FALSE       TRUE    TRUE
$x = "php";         string      FALSE       FALSE       TRUE    TRUE
$x = "true";        string      FALSE       FALSE       TRUE    TRUE
$x = "false";       string      FALSE       FALSE       TRUE    TRUE

পিএইচপি-তে প্রকারের তুলনার আরও রেফারেন্সের জন্য দয়া করে এটি দেখুন । এটি আপনাকে একটি স্পষ্ট বোঝা দেওয়া উচিত।


5

পিএইচপি-তে আপনি === এবং! == অপারেটরগুলি কেবল মানগুলি সমান কিনা তা পরীক্ষা করতে বা তাদের প্রকারের সাথে মেলে কিনা তা পরীক্ষা করতে পারেন। উদাহরণস্বরূপ: 0 == falseহয় true, কিন্তু 0 === falseহয় false। একই !=বনাম জন্য যায় !==। এছাড়াও যদি আপনি nullউল্লিখিত অপারেটরগুলি ব্যবহার করে অন্য দুটি সাথে তুলনা করেন, অনুরূপ ফলাফল আশা করুন।

এখন পিএইচপি-তে মানগুলির এই গুণটি সাধারণত ব্যবহৃত হয় যা কখনও কখনও 0(শূন্য) হতে পারে এমন একটি মান ফেরত দেওয়ার সময় ব্যবহৃত হয় তবে কখনও কখনও এটি ফাংশনটি ব্যর্থ হতে পারে। পিএইচপি-তে এই ক্ষেত্রে আপনি ফিরে আসেন falseএবং আপনাকে পরিচয় অপারেটর ব্যবহার করে এই কেসগুলি পরীক্ষা করতে হবে ===। উদাহরণস্বরূপ, যদি আপনি অন্যটির মধ্যে একটি স্ট্রিংয়ের অবস্থান সন্ধান করছেন এবং আপনি ব্যবহার করছেন strpos(), এই ফাংশনটি এমন সংখ্যাসূচক অবস্থানটি ফিরিয়ে দেবে যা স্ট্রিংটি খুব প্রথম দিকে পাওয়া গেলে 0 হতে পারে, তবে যদি স্ট্রিংটি খুঁজে পাওয়া যায় না সব, তারপরstrpos() ফিরে আসবে falseএবং ফলাফলের সাথে ডিল করার সময় আপনার এটিকে বিবেচনায় নিতে হবে ।

যদি আপনি নিজের ফাংশনগুলিতে একই কৌশলটি ব্যবহার করেন তবে স্ট্যান্ডার্ড পিএইচপি লাইব্রেরির সাথে পরিচিত কেউ বুঝতে পারে যে কী চলছে এবং কীভাবে যাচাই করা হবে কীভাবে যাচাই করা উচিত তা প্রসেস করার সময় কিছু ত্রুটি ঘটেছে। একই ফাংশন প্যারামগুলির জন্য একই রকম হয়, আপনি অ্যারে বা স্ট্রিং বা না কী তার উপর নির্ভর করে আপনি তাদের আলাদাভাবে প্রক্রিয়া করতে পারেন এবং এই কৌশলটি পিএইচপি জুড়ে খুব বেশি ব্যবহৃত হয়, তাই প্রত্যেকে এটি বেশ সহজেই পেয়ে যাবে। সুতরাং আমি অনুমান যে শক্তি।


5

মিথ্যা, নাল, কিছুই নয়, 0, অপরিজ্ঞাত ইত্যাদি

এগুলির প্রত্যেকটির নির্দিষ্ট অর্থ রয়েছে যা প্রকৃত ধারণার সাথে সম্পর্কিত। কখনও কখনও একাধিক অর্থ একক কীওয়ার্ড বা মান দিয়ে ওভারলোড হয়।

ইন সি এবং সি ++ , NULL, Falseএবং 0একই মান ওভারলোড করা হয়। ইন সি # তারা 3 স্বতন্ত্র ধারণা করছি।

nullবা NULLসাধারণত মান অভাব নির্দেশ করে, তবে সাধারণত কেন তা নির্দিষ্ট করে না। 0প্রাকৃতিক সংখ্যা শূন্য নির্দেশ করে এবং 1, 2, 3, ইত্যাদির টাইপ-সমতুল্যতা রয়েছে এবং পৃথক ধারণাগুলি সমর্থন করে এমন ভাষায় NULLকেবল একটি সংখ্যার সাথে চিকিত্সা করা উচিত।

মিথ্যা অ-সত্য নির্দেশ করে indicates এবং এটি বাইনারি মানগুলিতে ব্যবহৃত হয় । এটি আনসেটের অর্থ নয়, এটির অর্থও নয় 0। এটি কেবল দুটি বাইনারি মানগুলির মধ্যে একটি নির্দেশ করে।

কোনও কিছুই ইঙ্গিত করতে পারে না যে মানটি নির্দিষ্টভাবে এমন কোনও কিছু হিসাবে সেট করা থাকে যা একই জিনিসটিকে নাল হিসাবে নির্দেশ করে তবে উদ্দেশ্য হিসাবে।

কিছু ভাষায় অপরিবর্তিত ইঙ্গিত দেয় যে মানটি এখনও সেট করা হয়নি কারণ কোনও কোডই প্রকৃত মান নির্দিষ্ট করে নি।


আকর্ষণীয়, সম্ভবত, তবে পিএইচপি মোটেও আলোচনা করে না।
ব্র্যাড

4

আমি শুধু 1/2 দিনে হয় একটি পেতে চেষ্টা ব্যয় করেছি 0, null, falseথেকে ফিরে আসার strops!

এখানে আমি যা করার চেষ্টা করছিলাম তা এখানে আগেই, আমি দেখতে পেলাম যে পিএইচপি কোডিংয়ে একটি ব্ল্যাকহোল রয়েছে বলে মনে করে যুক্তিটি সঠিক দিকে প্রবাহিত হচ্ছে না:

কনসেপ্ট কোনও সার্ভারে হোস্ট করা একটি ডোমেন নাম গ্রহণ করুন এবং নিশ্চিত করুন যে এটি রুট স্তর নয়, ঠিক আছে এটি করার বিভিন্ন উপায়, তবে আমি অন্যান্য পিএইচপি ফাংশন / কনস্ট্রাক্টগুলির কারণে আমি আলাদা বেছে নিয়েছি।

যাইহোক এখানে আসার ভিত্তি ছিল:

if (strpos($_SERVER ['SERVER_NAME'], dirBaseNAME ()) 
{ 
    do this 
} else {
    or that
}

{
echo strpos(mydomain.co.uk, mydomain);  

if ( strpos(mydomain, xmas) == null ) 
    {
        echo "\n1 is null"; 
    }

if ( (strpos(mydomain.co.uk, mydomain)) == 0 ) 
    {
        echo "\n2 is 0"; 
    } else {
        echo "\n2 Something is WRONG"; 
    }

if ( (mydomain.co.uk, mydomain)) != 0 ) 
    {
        echo "\n3 is 0"; 
    } else {
        echo "\n3 it is not 0"; 
    }

if ( (mydomain.co.uk, mydomain)) == null ) 
    {
        echo "\n4 is null"; 
    } else {
        echo "\n4 Something is WRONG"; 
    }
}

শেষ পর্যন্ত এই বিষয়টি পড়ার পরে, আমি দেখতে পেলাম যে এটি কাজ করেছে !!!

{
if ((mydomain.co.uk, mydomain)) !== false ) 
    {
        echo "\n5 is True"; 
    } else {
        echo "\n5 is False"; 
    }
}

এই নিবন্ধটির জন্য ধন্যবাদ, আমি এখন বুঝতে পারি যে এটি ক্রিসমাস হলেও এটি ক্রিসমাস হিসাবে নাও হতে পারে false, যেমন এটি একটি NULLদিনও হতে পারে !

কিছু সাধারণ কোড ডিবাগ করার দিন নষ্ট করার পরে, আশা করি আমি এটি আগে জানতাম, কারণ আমি কাজটি করার চেষ্টা করার জায়গায় সমস্ত জায়গায় গিয়ে সমস্যাটি চিহ্নিত করতে সক্ষম হয়েছি। তা না কাজ, যেমন False, NULLএবং 0হিসাবে একই সব নয় True or False or NULL?


2

থেকে পিএইচপি অনলাইন ডকুমেন্টেশন :

স্পষ্টরূপে কোনও মানকে বুলেয়ানে রূপান্তর করতে, (বুল) বা (বুলিয়ান) কাস্ট ব্যবহার করুন।
তবে বেশিরভাগ ক্ষেত্রে castালাই অনিবার্য, যেহেতু কোনও অপারেটর, ফাংশন বা নিয়ন্ত্রণ কাঠামোর জন্য বুলিয়ান আর্গুমেন্টের প্রয়োজন হয় তবে একটি মান স্বয়ংক্রিয়ভাবে রূপান্তরিত হয়।
বুলিয়ান রূপান্তর করার সময়, নিম্নলিখিত মানগুলি মিথ্যা হিসাবে বিবেচনা করা হয়:

  • বুলিয়ান FALSE নিজেই
  • পূর্ণসংখ্যা `` 0 (শূন্য)
  • ভাসা 0.0 (শূন্য)
  • খালি স্ট্রিং, এবং স্ট্রিং "0"
  • শূন্য উপাদান সহ একটি অ্যারে
  • শূন্য সদস্য ভেরিয়েবলযুক্ত একটি বস্তু (কেবল পিএইচপি 4)
  • বিশেষ ধরনের NULL (আনসেট ভেরিয়েবল সহ)
  • সিম্পল এক্সএমএল অবজেক্টগুলি খালি ট্যাগ থেকে তৈরি করা
    প্রতিটি অন্যান্য মান বিবেচিত হয় TRUE(কোনও সংস্থান সহ)

সুতরাং, বেশিরভাগ ক্ষেত্রে, এটি একই রকম।

অন্যদিকে, এবং ===এবং ==একই জিনিস নয়। নিয়মিত, আপনার কেবল "সমান" অপারেটর প্রয়োজন need স্পষ্ট করা:

$a == $b    //Equal. TRUE if $a is equal to $b.
$a === $b   //Identical. TRUE if $a is equal to $b, and they are of the same type. 

আরও তথ্যের জন্য, " তুলনা অপারেটরগুলি পরীক্ষা করুন পিএইচপি অনলাইন ডক্সে " পৃষ্ঠাটি দেখুন

আশাকরি এটা সাহায্য করবে.


1

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


1

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

নুলের যৌক্তিক প্রভাবগুলি প্রায়শই পৃথক হয় - কিছু ভাষায় NULL কোনও কিছুর সমান হয় না, তাই যদি (a == NULL) সর্বদা মিথ্যা থাকে।

সুতরাং ব্যক্তিগতভাবে আমি সর্বদা মিথ্যাতে একটি বুলিয়ান শুরু করতাম এবং একটিকে NULL প্রারম্ভিক করানো কিছুটা আড়ম্বরপূর্ণ দেখত (এমনকি সি যেখানে দুজনেই কেবল 0 ... কেবল একটি স্টাইলের জিনিস)।


1

আমি মনে করি খারাপ বিকাশকারীরা সেখানে কোডে নাল / 0 / টির সমস্ত বিভিন্ন ব্যবহার খুঁজে পান।

উদাহরণস্বরূপ, বিকাশকারীরা সবচেয়ে সাধারণ ভুলগুলির মধ্যে একটি হ'ল কোনও ফাংশন সহ ডেটা আকারে ত্রুটি কোডটি ফেরত দেওয়া।

// On error GetChar returns -1
int GetChar()

এটি একটি চিনির ইন্টারফেসের একটি উদাহরণ। এটি "সফ্টওয়্যার বিকাশ প্রসেস ডিবাগিং" বইয়ে এবং অন্য একটি বইতে "সঠিক কোড লেখার" ক্ষেত্রে ব্যাখ্যা করা হয়েছে।

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

পরিবর্তে, সর্বোত্তম উপায় হ'ল আপনার ডেটার সাথে ত্রুটি কোডটি মেশানো নয়। সুতরাং নিম্নলিখিত ফাংশন।

char GetChar()

এখন হয়ে যায়

// On success return 1
// on failure return 0
bool GetChar(int &char)

এর অর্থ হ'ল বিকাশকারী আপনার বিকাশের দোকানে যতই তরুণ হোক না কেন, সে কখনই এই ভুল পাবে না। যদিও এটি অনর্থক সম্পর্কে কথা বলছে না বা কোডের উপর নির্ভর করে।

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


1

পিএইচপি-তে এটি নির্ভর করে যে আপনি প্রকারের বৈধতা যাচ্ছেন:

( 
 ( false !== 0 ) && ( false !== -1 ) && ( false == 0 ) && ( false == -1 ) &&
 ( false !== null ) && ( false == null ) 
)

প্রযুক্তিগতভাবে নাল 0x00কিন্তু পিএইচপি( null == 0x00 ) && ( null !== 0x00 )

0 একটি পূর্ণসংখ্যা মান।


1

NULLপিএইচপি-র সম্পর্কে একটি আকর্ষণীয় তথ্য : আপনি যদি কোনও সমান ভার সেট NULLকরেন তবে এটি অনুরূপ যেমন আপনি unset()এটিতে আহ্বান করেছিলেন।

NULLমূলত একটি ভেরিয়েবলের কোনও মূল্য নির্ধারিত হয় না; falseএকটি বৈধ বুলিয়ান মান, 0একটি বৈধ পূর্ণসংখ্যা মান, এবং পিএইচপি মধ্যে কিছু মোটামুটি কুশ্রী ধর্মান্তর হয়েছে 0, "0", "", এবং false


0

নাল কিছুই নয়, মিথ্যাটি কিছুটা, এবং 0 (সম্ভবত) 32 বিট।

পিএইচপি বিশেষজ্ঞ নয়, আরও কয়েকটি আধুনিক ভাষায় সেগুলি বিনিময়যোগ্য নয়। আমি 0 এবং মিসের মিথ্যাকে আদান-প্রদানের যোগ্য হতে চাই তবে বুলিয়ান আসল ধরণের হওয়ার সাথে আপনি এর সাথে যুক্ত পদ্ধতি এবং অবজেক্টগুলি রাখতে পারেন যাতে এটি কেবল একটি ট্রেড অফ। নাল যদিও নাল, মূলত কোনও কিছুর অনুপস্থিতি।


0

ঠিক আছে, আমি আমার পিএইচপি এর দিনগুলি থেকে "===" অংশটির উত্তর দিতে যথেষ্ট মনে করতে পারি না, তবে বেশিরভাগ সি-স্টাইলের ভাষার জন্য, NUL পয়েন্টার মানগুলির প্রসঙ্গে, বুলিয়ান হিসাবে মিথ্যা এবং শূন্য হিসাবে ব্যবহার করা উচিত সংখ্যার মান যেমন একটি int। '\ 0' হ'ল একটি চরিত্রের প্রসঙ্গে cust আমি সাধারণত ফ্লোট এবং ডাবলসের জন্য 0.0 ব্যবহার করতে পছন্দ করি।

সুতরাং .. দ্রুত উত্তর: প্রসঙ্গ।


0

প্রায় সমস্ত আধুনিক ভাষায়, যুক্তিযুক্তভাবে বাতিল পয়েন্টারগুলিকে (বা রেফারেন্সগুলি) উল্লেখ করে যার কোনও মান না থাকে, বা কোনও ভেরিয়েবল যা আরম্ভ হয় না। 0 হল শূন্যের পূর্ণসংখ্যা মান এবং মিথ্যা হ'ল বুলিয়ান মান, ভাল, মিথ্যা। জিনিসগুলিকে জটিল করার জন্য, সিতে, উদাহরণস্বরূপ, নাল, 0 এবং মিথ্যা সমস্ত একইভাবে উপস্থাপিত হয়। আমি জানি না যে এটি পিএইচপি-তে কীভাবে কাজ করে।

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

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


0

মিথ্যা এবং 0 টি ধারণাগতভাবে সমান, অর্থাত্ এগুলি isomorphic। 0 হ'ল প্রাকৃতিক সংখ্যার বীজগণিতের প্রাথমিক মান এবং মিথ্যা বুলিয়ান বীজগণিতের জন্য প্রাথমিক মান।

অন্য কথায়, 0 টি এমন সংখ্যার হিসাবে সংজ্ঞায়িত করা যেতে পারে যা কিছু প্রাকৃতিক সংখ্যায় যুক্ত হলে একই সংখ্যাটি দেয়:

x + 0 = x

একইভাবে, মিথ্যা একটি মান এমন যে এটির বিভাজন এবং অন্য কোনও মান একই মান:

x || False = x

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

আমি অন্য কোথাও নুলের প্রভাব সম্পর্কে আরও বিস্তৃত লিখেছি।


1
অফটপিক, মিথ্যা == 0 সম্পূর্ণরূপে প্রতিবন্ধী। আরও বেশি পিএইচপি ফেরত ডেটা বা কোনও ফাংশনে ব্যর্থতার সাথে। mysql_insert_id এর জন্য রিটার্ন দেখুন। "" "সাফল্যের উপরের পূর্ববর্তী ক্যোয়ারী দ্বারা একটি" "স্বতঃপরিচয় কলামের জন্য তৈরি করা আইডি, 0 যদি পূর্ববর্তী ক্যোয়ারী একটি স্বতঃসূচক মান তৈরি করে না, বা মাইএসকিউএল সংযোগ স্থাপন না করা হলে মিথ্যা।" "মূলত এটি এটিকে ফিরিয়ে দিতে পারে), আইডি, খ) শূন্য, সি) মিথ্যা ... এখন যদি টেবিলের প্রথম আইটেম হয় তবে আইডি শূন্য হবে! সুতরাং তিনটি মান একই! বিকাশকারী কীভাবে তিন ধরণের শূন্যকে বোঝাতে পারেন? ... এবং আমি আপনার পোস্টটি নালার সাথে একমত
gcb

0

কেউ আমাকে ব্যাখ্যা করতে পারেন কেন 'তুলনামূলক' তুলনামূলক উদাহরণ হিসাবে কেবল স্ট্রিং নয়?

$x = 0;
var_dump($x == 'NULL');  # TRUE   !!!WTF!!!

1
কারণ পিএইচপি অভ্যন্তরীণভাবে পূর্ণসংখ্যার টাইপের সাথে কাস্ট করে এবং তারপরে তুলনা করে। php > var_dump((int) "NULL"); // => int(0) php > var_dump((int) "BLA"); // => int(0)php.net/manual/en/language.operators.compistance.php দেখুন স্ট্রিং এবং সংখ্যায় স্বাভাবিক গণিত অনুবাদ করুন
সেভেলস

-1

মিথ্যাচারের সমস্যাগুলি পিএইচপি ইতিহাস থেকে আসে। সমস্যাটি সঠিকভাবে সংজ্ঞায়িত স্কেলারের ধরণকে লক্ষ্য করে না।

'*' == true -> true (string match)
'*' === true -> false (numberic match)

(int)'*' == true -> false
(string)'*' == true -> true

পিএইচপি 7 কঠোরতা একটি পদক্ষেপ এগিয়ে, তবে সম্ভবত যথেষ্ট নয়। https://web-techno.net/typing-with-php-7-what-you-shouldnt-do/

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