簡體   English   中英

php 中 isset(user_input) 的替代方案

[英]Alternative to isset(user_input) in php

我想知道除了(顯而易見的選擇)isset()之外,是否還有另一種方法來檢查來自用戶輸入的變量是否已設置且不為空。 在某些情況下,我們可能不是使用 $_POST 來獲取值,而是使用一些類似的自定義函數。 isset() 不能用於函數調用的結果,因此必須使用另一種方法來執行相同的檢查。 現在,isset() 驗證了兩件事:

  1. 是否設置了值。
  2. 值是否為空。 但是在為變量分配空值( $variable = NULL; )和由於輸入字段為空而獲得空值之間存在一些差異。 或者至少我是這么讀的。

那么,有沒有一種在不使用 isset() 的情況下檢查這兩個要求的好方法?

函數返回值的等價於isset($var)func() === null

isset基本上進行!== null比較,如果測試的變量不存在,則不會引發錯誤。 這不是函數返回值的問題,因為 a) 函數必須存在(否則 PHP 將退出並出現致命錯誤)並且 b) 函數總是返回一些東西,至少是null 所以你真正需要做的就是檢查null ,不需要isset

我在這里廣泛地寫過這個: PHP isset 和 empty 的權威指南


除此之外,這取決於您要檢查的具體內容:

  • 測試是否通過 GET/POST 提交了密鑰: isset($_POST['key'])
  • 測試是否有值以及它是否不是== false : !empty($_POST['key'])
  • 測試它是否是一個非空字符串: isset($_POST['key']) && strlen($_POST['key'])
  • 也許更復雜的驗證: filter_input

最好的方法是 isset 但如果你堅持...嘗試empty()strlen()函數來檢查它是否為空或字符串長度大於這么多字符。 strlen()返回一個數字,傳遞給它的變量的長度。 empty()檢查其中是否有字符或是否為空。 使用empty()你必須小心,因為有些函數返回0false ,這不被認為是空的。

if(!empty($var))....

或者

if(strlen($var)>2)...

您也可以使用!empty()代替isset()函數!empty()適用於isset()並檢查任何字符串的值是否不為 null、0 或任何空字符串。 每當我需要比較變量的存在或其值時,我通常更喜歡!empty()

這里有一些選項...

PHP 7.4+:空合並賦值運算符

$variable ??= '';

PHP 7.0+:空合並運算符

$variable = $var ?? '';

PHP 5.3+:三元運算符

isset($variable) ?: $var = '';

在大多數情況下,我會這樣做:

$v = my_func();
if (isset($v) and $v) {
 ...
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM