কেন () এবং! খালি () উভয়ই পরীক্ষা করে দেখুন


269

issetএবং মধ্যে পার্থক্য আছে কি !empty। আমি যদি এই ডাবল বুলিয়ান চেক করি তবে এটি কি এইভাবে সঠিক বা অপ্রয়োজনীয়? এবং একই জিনিস করার জন্য একটি ছোট উপায় আছে?

isset($vars[1]) AND !empty($vars[1])

3
বিভিন্ন ধরণের ভেরিয়েবল (তাদের পার্থক্য রয়েছে) সহ তাদের ব্যবহারের ফলাফলের জন্য এখানে একটি চমৎকার চার্ট রয়েছে: virendrachandak.com/demos/php-isset-vs-empty-vs-is_null.php
জেফ ক্লেটন

সুস্পষ্ট নির্ভুল পরিপূরকগুলি isset এবং is_null, কিন্তু! খালি কয়েকটি আলাদা আলাদা করে covers এটি সমস্ত আপনি যে ধরণের ডেটা পরীক্ষা করছেন তার উপর নির্ভর করে।
জেফ ক্লেটন

উত্তর:


419

এটি সম্পূর্ণ অপ্রয়োজনীয়। emptyকম-বেশি সংক্ষিপ্তসার জন্য !isset($foo) || !$fooএবং !emptyএটি অনুরূপ isset($foo) && $foo। অর্থাত emptyকোনও মানের সত্যতা বাড়াতেisset অতিরিক্ত চেকের বিপরীত জিনিসটি করে ।

বা অন্য কথায়, emptyএকই !$foo, তবে ভেরিয়েবলের অস্তিত্ব না থাকলে সতর্কতা ছুঁড়ে না। এটি এই ফাংশনের মূল বিষয়: ভেরিয়েবল সেট হওয়ার বিষয়ে চিন্তা না করেই বুলিয়ান তুলনা করুন।

ম্যানুয়ালটি এটি এইভাবে রাখে:

empty()এর বিপরীত (boolean) var, যখন ভেরিয়েবল সেট না করা হয় তখন কোনও সতর্কতা তৈরি হয় না।

আপনি কেবল !empty($vars[1])এখানে ব্যবহার করতে পারেন ।


7
তবে যদি সেখানে না থাকে তবে $vars[1]সে একটি নোটিশ পাবে।
karim79

6
আমি কোথা থেকে এই ধারণা পেয়েছিলাম আমি জানি না। প্লাস ওয়ান।
karim79

8
@ কর্মিম আইএমও emptyপিএইচপি-র সবচেয়ে ভুল বোঝাবুঝি functions "কোনও সতর্কতা উত্পন্ন হয় না" সম্পর্কে ছোট স্নিপেটটি উপেক্ষা করা খুব সহজ। এটি এখানে পোস্ট করার জন্য আমাকে কয়েকবার ডকুমেন্টেশনটি স্ক্যান করতে হয়েছিল।
প্রতারণা করুন

2
empty($vars[1])এমনকি কোনও সতর্কবার্তা এমনকি $vars[1]সেট করা হয় না, কিন্তু echo $vars[1]করবে but আমি ব্যবহার করে সত্যতা যাচাই echo $vars[1]; if (!empty($vars[1])) echo 1; else echo 0;
আমিল ওদুওয়ারা

4
@ সাহোর অনেক ভাষা বিবেচনা 0করে false। পিএইচপি একমাত্র নয়। আপনার অভিযোগ কি তা এখনও নিশ্চিত নন।
প্রতারণা করুন

33

isset() কোনও ভেরিয়েবল সেট করা থাকলে এবং শূন্য না হলে পরীক্ষা করে:

http://us.php.net/manual/en/function.isset.php

empty() ভেরিয়েবলটি নির্দিষ্ট মানগুলিতে সেট করা হলে সত্যটি ফিরে আসতে পারে:

http://us.php.net/manual/en/function.empty.php

এটি প্রদর্শনের জন্য, নীচের কোডটি $ the_var অচিহ্নিত, 0 তে সেট করে এবং 1 তে সেট করে দেখুন।

<?php

#$the_var = 0;

if (isset($the_var)) {
  echo "set";
} else {
  echo "not set";
}

echo "\n";

if (empty($the_var)) {
  echo "empty";
} else {
  echo "not empty";
}
?>

12

গৃহীত উত্তর সঠিক নয়।

isset (), খালি () এর সমান নয়

আপনি যদি এই রাস্তায় নামেন তবে আপনি কিছু পরিবর্তে অপ্রীতিকর এবং বাগগুলি ডিবাগ করা শক্ত তৈরি করবেন। যেমন এই কোডটি চালানোর চেষ্টা করুন:

<?php

$s = '';

print "isset: '" . isset($s) . "'. ";
print "!empty: '" . !empty($s) . "'";

?>

https://3v4l.org/J4nBb


7
গৃহীত উত্তর কোনওভাবেই এর issetসমতুল্য বলে প্রস্তাব করে না !empty
প্রতারণা করুন


3

খালি খালি চেক হ'ল রেফার্ড ভেরিয়েবল / অ্যারের একটি মান রয়েছে যদি আপনি পিএইচপি ডকটি পরীক্ষা করেন (খালি) আপনি দেখতে পাবেন যে এই জিনিসগুলি এমটিপি হিসাবে বিবেচিত হবে

* "" (an empty string)
* 0 (0 as an integer)
* "0" (0 as a string)
* NULL
* FALSE
* array() (an empty array)
* var $var; (a variable declared, but without a value in a class)

যখন আইসেটটি পরীক্ষা করে চলকটি পরিবর্তনশীল হয় এবং নাল নয় যা পিএইচপি ডকটিতেও পাওয়া যায় (আইসেট)


2

এটি র কোন দরকার নাই.

ভেরিয়েবলের অস্তিত্ব না থাকলে কোনও সতর্কতা উত্পন্ন হয় না। তার মানে খালি () মূলত! Isset ($ var) এর সংক্ষিপ্ত সমতুল্য || $ var == মিথ্যা।

php.net


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

এটি কেবল সত্য, পাঁচ বছর পরে।
লেনন

2

isset($vars[1]) AND !empty($vars[1])সমতূল্য !empty($vars[1])

আমি এটি অনুমিতভাবে দেখানোর জন্য সহজ কোড প্রস্তুত করেছি।

শেষ সারিটি অপরিবর্তিত ভেরিয়েবল।

+-----------+---------+---------+----------+---------------------+
| Var value | empty() | isset() | !empty() | isset() && !empty() |
+-----------+---------+---------+----------+---------------------+
| ''        | true    | true    | false    | false               |
| ' '       | false   | true    | true     | true                |
| false     | true    | true    | false    | false               |
| true      | false   | true    | true     | true                |
| array ()  | true    | true    | false    | false               |
| NULL      | true    | false   | false    | false               |
| '0'       | true    | true    | false    | false               |
| 0         | true    | true    | false    | false               |
| 0.0       | true    | true    | false    | false               |
| undefined | true    | false   | false    | false               |
+-----------+---------+---------+----------+---------------------+

এবং কোড

$var1 = "";
$var2 = " ";
$var3 = FALSE;
$var4 = TRUE;
$var5 = array();
$var6 = null;
$var7 = "0";
$var8 = 0;
$var9 = 0.0;

function compare($var)
{
    print(var_export($var, true) . "|" .
        var_export(empty($var), true) . "|" .
        var_export(isset($var), true) . "|" .
        var_export(!empty($var), true) . "|" .
        var_export(isset($var) && !empty($var), true) . "\n");
}

for ($i = 1; $i <= 9; $i++) {
    $var = 'var' . $i;
    compare($$var);
}

@print(var_export($var10, true) . "|" .
    var_export(empty($var10), true) . "|" .
    var_export(isset($var10), true) . "|" .
    var_export(!empty($var10), true) . "|" .
    var_export(isset($var10) && !empty($var10), true) . "\n");

অপরিজ্ঞাত ভেরিয়েবলের বাইরে ফাংশনটি মূল্যায়ন করতে হবে, কারণ ফাংশনটি নিজেই সুযোগে অস্থায়ী পরিবর্তনশীল তৈরি করে।


0

"খালি": কেবলমাত্র ভেরিয়েবলগুলিতে কাজ করে। খালি বিভিন্ন পরিবর্তনশীল ধরণের জন্য বিভিন্ন জিনিস বোঝাতে পারে (ম্যানুয়াল পরীক্ষা করুন: http://php.net/manual/en/function.empty.php )।

"isset": ভেরিয়েবলটি বিদ্যমান কিনা তা পরীক্ষা করে এবং একটি সত্য নল বা মিথ্যা মান পরীক্ষা করে। "আনসেট" কল করে আনসেট করা যেতে পারে। আবার, ম্যানুয়াল পরীক্ষা করে দেখুন।

যে কোনও একটির ব্যবহার আপনি যে পরিবর্তনশীল ধরণের ব্যবহার করছেন তা নির্ভর করে।

আমি বলব, উভয়ের জন্য যাচাই করা এটি আরও নিরাপদ, কারণ আপনি যদি ভেরিয়েবলটি উপস্থিত থাকে তবে আপনি প্রথমে যাচাই করছেন এবং যদি এটি সত্যই নাল বা খালি না থাকে।


3
@ szahn "উভয়ের জন্য চেক করা নিরাপদ", - প্রোগ্রামার হিসাবে আপনি সুরক্ষার জন্য যা চান তা যাচাই করতে পারেন। তবে যদি আপনার কোড অপ্রয়োজনীয় হয় তবে আপনি প্রোগ্রামার হিসাবে অপ্রয়োজনীয় হতে পারেন।
madlopt

0

আমরা যদি নীচের মতো সাবমিট বোতামের মাধ্যমে যুক্ত / সম্পাদনা করতে একই পৃষ্ঠা ব্যবহার করি

<input type="hidden" value="<?echo $_GET['edit_id'];?>" name="edit_id">

তাহলে আমাদের ব্যবহার করা উচিত নয়

isset($_POST['edit_id'])

bcoz edit_idপৃষ্ঠা যুক্ত করা বা সম্পাদনা করা যাই হোক না কেন সর্বদা সেট করা থাকে, পরিবর্তে আমাদের শর্তের নিচে চেক ব্যবহার করা উচিত

!empty($_POST['edit_id'])

আগের পোস্টটি bcoz জমা দেওয়া হয়েছিল আমি ভুল করে এন্টার টিপুন, এখানে আমার সম্পূর্ণ উত্তর ... কেন ডাউনওয়োট? :(
diEcho

0
  • পিএইচপি ওয়েব সাইট থেকে, empty()ফাংশনটি উল্লেখ করে:

রিটার্নস FALSEযদিvar একটি খালি এবং অ শূন্য মান আছে।

এটা জানা ভাল জিনিস। অন্য কথায়, ফাংশনটি ব্যবহার করার সময় NULL, 0থেকে "" থেকে "সমস্ত কিছু ফিরে আসবে ।TRUEempty()

  • isset()ফাংশনটি কী দেয় তার বিবরণ এখানে দেওয়া হয়েছে :

ফেরত পাঠায় TRUEযদি varবিদ্যমান;FALSEঅন্যথায়।

অন্য কথায়, শুধুমাত্র ভেরিয়েবল যে কোন অস্তিত্ব নেই (অথবা, কঠোরভাবে সঙ্গে ভেরিয়েবলের মধ্যে NULLমান) ফিরে আসবে FALSEউপর isset()ফাংশন। সমস্ত ভেরিয়েবলের যে কোনও ধরণের মান রয়েছে, এটি 0একটি ফাঁকা পাঠ্য স্ট্রিং ইত্যাদি ফিরে আসবে TRUE

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