PHP - ตรวจสอบว่าตัวแปรไม่ได้กำหนดไว้หรือไม่


92

พิจารณาสถิติ jquery นี้

isTouch = document.createTouch !== undefined

ฉันต้องการทราบว่าเรามีคำสั่งที่คล้ายกันใน PHP หรือไม่ถูก isset () แต่ตรวจสอบค่าที่ไม่ได้กำหนดอย่างแท้จริงเช่น:

$isTouch != ""

PHP มีบางอย่างที่คล้ายกับข้างต้นหรือไม่?


คำตอบ:


171

คุณสามารถใช้ได้ -

$isTouch = isset($variable);

มันจะกลับมาtrueหาก$variableมีการกำหนด falseถ้าตัวแปรไม่ได้กำหนดไว้ก็จะกลับ

หมายเหตุ: ส่งกลับค่า TRUE หาก var มีอยู่และมีค่าอื่นที่ไม่ใช่ NULL, FALSE ไม่เช่นนั้น

หากคุณต้องการที่จะตรวจสอบfalse, 0ฯลฯ จากนั้นคุณสามารถใช้empty()-

$isTouch = empty($variable);

empty() ใช้ได้กับ -

  • "" (สตริงว่าง)
  • 0 (0 เป็นจำนวนเต็ม)
  • 0.0 (0 เป็นลูกลอย)
  • "0" (0 เป็นสตริง)
  • NULL
  • เท็จ
  • array () (อาร์เรย์ว่าง)
  • $ var; (ตัวแปรที่ประกาศ แต่ไม่มีค่า)

2
isset()ส่งคืนบูลเสมอ
VeeeneX

บูลีนหล่อจำเป็นหรือไม่? isset (... ) ส่งคืนบูลแล้วใช่ไหม
Cr3aHal0

1
ไม่มันส่งคืนtrueหรือfalse. ดังนั้นไม่จำเป็นต้องหล่อขนาดนั้น
Sougata Bose

1
คุณสามารถทำได้โดยใช้empty()ซึ่งจะส่งคืนเท็จหากเป็นสตริงว่าง isset()จะคืนค่าจริงหากเป็นสตริงว่างเปล่าก็จะทำการตรวจสอบ isset ภายใน
ไมค์

1
คุณยังสามารถทำเช่นนี้: $isTouch = (bool) $variable;ซึ่งจะทำเช่นเดียวกับisset()และอาจจะเล็ก ๆ น้อย ๆ empty()ที่ดีกว่าเพราะมันจะทำงานเช่น
ไมค์

20

อีกวิธีหนึ่งคือ:

if($test){
    echo "Yes 1";
}
if(!is_null($test)){
    echo "Yes 2";
}

$test = "hello";

if($test){
    echo "Yes 3";
}

จะกลับมา :

"Yes 3"

วิธีที่ดีที่สุดคือใช้ isset () มิฉะนั้นคุณอาจมีข้อผิดพลาดเช่น "undefined $ test"

คุณสามารถทำได้ดังนี้:

if( isset($test) && ($test!==null) )

คุณจะไม่มีข้อผิดพลาดใด ๆ เนื่องจากไม่ยอมรับเงื่อนไขแรก


ถ้าเราใช้$test!==nullโดยไม่มีวงเล็บแล้วจะเกิดอะไรขึ้น? จะให้ข้อผิดพลาดหรือไม่?
เวียร์

ไม่ก็โอเคเหมือนกัน
TiDJ

7

ในการตรวจสอบคือตัวแปรถูกตั้งค่าคุณต้องใช้ฟังก์ชัน isset

$lorem = 'potato';

if(isset($lorem)){
    echo 'isset true' . '<br />';
}else{
    echo 'isset false' . '<br />';
}

if(isset($ipsum)){
    echo 'isset true' . '<br />';
}else{
    echo 'isset false' . '<br />';
}

รหัสนี้จะพิมพ์:

isset true
isset false

อ่านเพิ่มเติมในhttps://php.net/manual/en/function.isset.php


6

คุณสามารถใช้ได้ -

Ternary oprator เพื่อตรวจสอบค่าสภาพพื้นที่ที่กำหนดโดย POST / GET หรือไม่เช่นนี้

$value1 = $_POST['value1'] = isset($_POST['value1']) ? $_POST['value1'] : '';
$value2 = $_POST['value2'] = isset($_POST['value2']) ? $_POST['value2'] : '';
$value3 = $_POST['value3'] = isset($_POST['value3']) ? $_POST['value3'] : '';
$value4 = $_POST['value4'] = isset($_POST['value4']) ? $_POST['value4'] : '';

3

JavaScript ของ 'เข้มงวดไม่เท่ากัน' ผู้ประกอบการ ( !==) เมื่อเปรียบเทียบกับundefinedไม่ได้ส่งผลให้falseในnullค่า

var createTouch = null;
isTouch = createTouch !== undefined  // true

เพื่อให้บรรลุพฤติกรรมที่เทียบเท่าใน PHP คุณสามารถตรวจสอบว่าชื่อตัวแปรมีอยู่ในคีย์ของผลลัพธ์ของget_defined_vars().

// just to simplify output format
const BR = '<br>' . PHP_EOL;

// set a global variable to test independence in local scope
$test = 1;

// test in local scope (what is working in global scope as well)
function test()
{
  // is global variable found?
  echo '$test ' . ( array_key_exists('test', get_defined_vars())
                    ? 'exists.' : 'does not exist.' ) . BR;
  // $test does not exist.

  // is local variable found?
  $test = null;
  echo '$test ' . ( array_key_exists('test', get_defined_vars())
                    ? 'exists.' : 'does not exist.' ) . BR;
  // $test exists.

  // try same non-null variable value as globally defined as well
  $test = 1;
  echo '$test ' . ( array_key_exists('test', get_defined_vars())
                    ? 'exists.' : 'does not exist.' ) . BR;
  // $test exists.

  // repeat test after variable is unset
  unset($test);
  echo '$test ' . ( array_key_exists('test', get_defined_vars())
                    ? 'exists.' : 'does not exist.') . BR;
  // $test does not exist.
}

test();

ในกรณีส่วนใหญ่isset($variable)มีความเหมาะสม ที่เทียบเท่ากับarray_key_exists('variable', get_defined_vars()) && null !== $variable. หากคุณเพียงแค่ใช้null !== $variableโดยไม่ได้ตรวจสอบการมีอยู่ล่วงหน้าคุณจะทำให้บันทึกของคุณยุ่งเหยิงด้วยคำเตือนเพราะนั่นคือความพยายามที่จะอ่านค่าของตัวแปรที่ไม่ได้กำหนดไว้

อย่างไรก็ตามคุณสามารถใช้ตัวแปรที่ไม่ได้กำหนดกับข้อมูลอ้างอิงโดยไม่มีคำเตือน:

// write our own isset() function
function my_isset(&$var)
{
  // here $var is defined
  // and initialized to null if the given argument was not defined
  return null === $var;
}

// passing an undefined variable by reference does not log any warning
$is_set = my_isset($undefined_variable);   // $is_set is false

1

คุณสามารถใช้ฟังก์ชันPHP isset ()เพื่อทดสอบว่ามีการตั้งค่าตัวแปรหรือไม่ isset ()จะกลับมาเป็น FALSE ถ้าการทดสอบตัวแปรที่ได้รับการตั้งค่าให้เป็นโมฆะ ตัวอย่าง:

<?php
    $var1 = '';
    if(isset($var1)){
        echo 'This line is printed, because the $var1 is set.';
    }
?>

โค้ดนี้จะแสดงผล "This line is printed, because the $ var1 is set."

อ่านเพิ่มเติมในhttps://stackhowto.com/how-to-check-if-a-variable-is-undefined-in-php/


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.