PHP - kiểm tra xem biến có không được xác định không


87

Hãy xem xét trạng thái jquery này

isTouch = document.createTouch !== undefined

Tôi muốn biết nếu chúng ta có một câu lệnh tương tự trong PHP, không phải là Isset () mà là kiểm tra một giá trị không xác định theo nghĩa đen, đại loại như:

$isTouch != ""

Có cái gì đó tương tự như ở trên trong PHP không?


Câu trả lời:


167

Bạn có thể dùng -

$isTouch = isset($variable);

Nó sẽ trả về truenếu $variableđược xác định. nếu biến không được xác định, nó sẽ trả về false.

Lưu ý: Trả về TRUE nếu var tồn tại và có giá trị khác NULL, nếu không thì trả về FALSE.

Nếu bạn muốn kiểm tra false, 0v.v. Bạn có thể sử dụng empty()-

$isTouch = empty($variable);

empty() làm việc cho -

  • "" (một chuỗi trống)
  • 0 (0 dưới dạng số nguyên)
  • 0.0 (0 dưới dạng số float)
  • "0" (0 dưới dạng một chuỗi)
  • VÔ GIÁ TRỊ
  • SAI
  • array () (một mảng trống)
  • $ var; (một biến được khai báo, nhưng không có giá trị)

1
isset()luôn trả về bool.
VeeeneX

Việc ép kiểu boolean có cần thiết không? Isset (...) đã trả về bool rồi phải không?
Cr3aHal0

1
Không. Nó trở lại truehoặc false. Vì vậy, không cần đúc đó.
Sougata Bose

1
bạn cũng có thể làm điều này bằng cách sử dụng giá trị empty()sẽ trả về false nếu nó là một chuỗi rỗng. isset()sẽ trả về true nếu nó là một chuỗi trống, cũng rỗng không kiểm tra nội bộ.
mic

1
bạn cũng có thể làm điều này: $isTouch = (bool) $variable;sẽ làm tương tự như isset()và có thể tốt hơn một chút vì nó sẽ hoạt động như thế nào empty().
mic

19

Một cách khác đơn giản là:

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

$test = "hello";

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

Sẽ trở lại :

"Yes 3"

Cách tốt nhất là sử dụng Isset (), nếu không bạn có thể gặp lỗi như "undefined $ test".

Bạn có thể làm như thế này:

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

Bạn sẽ không gặp bất kỳ lỗi nào vì điều kiện đầu tiên không được chấp nhận.


Nếu chúng ta sử dụng $test!==nullmà không có dấu ngoặc, thì điều gì sẽ xảy ra? Nó sẽ cho lỗi?
Vir

Không, nó cũng ổn.
TiDJ

7

Để kiểm tra biến đã được thiết lập hay chưa, bạn cần sử dụng hàm 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 />';
}

mã này sẽ in:

isset true
isset false

đọc thêm trong https://php.net/manual/en/ Chức năng.isset.php


6

Bạn có thể dùng -

Trình điều khiển bậc ba để kiểm tra giá trị khi được đặt bởi POST / GET hoặc không giống như thế này

$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 của 'nghiêm ngặt không bằng' nhà điều hành ( !==) trên so với undefinedkhông không gây ra falsetrên nullcác giá trị.

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

Để đạt được một hành vi tương đương trong PHP, bạn có thể kiểm tra xem tên biến có tồn tại trong các khóa của kết quả của 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();

Trong hầu hết các trường hợp, isset($variable)là thích hợp. Đó là tương đương với array_key_exists('variable', get_defined_vars()) && null !== $variable. Nếu bạn chỉ sử dụng null !== $variablemà không kiểm tra trước sự tồn tại, bạn sẽ làm lộn xộn nhật ký của mình với các cảnh báo vì đó là nỗ lực đọc giá trị của một biến không xác định.

Tuy nhiên, bạn có thể áp dụng một biến không xác định cho một tham chiếu mà không có bất kỳ cảnh báo nào:

// 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

0
if(isset($variable)){
    $isTouch = $variable;
}

HOẶC LÀ

if(!isset($variable)){
    $isTouch = "";// 
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.