[英]PHP - Use isset inside function not working..?
我有一個PHP腳本,在加載時,首先檢查它是否通過POST加載,如果不是,則GET ['id']是一個數字。
現在我知道我可以這樣做:
if(isset($_GET['id']) AND isNum($_GET['id'])) { ... }
function isNum($data) {
$data = sanitize($data);
if ( ctype_digit($data) ) {
return true;
} else {
return false;
}
}
但我想這樣做:
if(isNum($_GET['id'])) { ... }
function isNum($data) {
if ( isset($data) ) {
$data = sanitize($data);
if ( ctype_digit($data) ) {
return true;
} else {
return false;
}
} else {
return false;
}
}
當我這樣嘗試時,如果未設置$ _GET ['id'],則會收到未定義索引的警告:id ...就像我將$ _GET ['id']放入函數中一樣調用,它會發出警告...即使我的函數將檢查是否設置了var ...
還有另一種方法可以做我想做的事情,還是我被迫始終檢查isset然后添加其他要求。
我總是包含其他一些語言提供的便利功能:get。
function get($needle, $haystack, $return=null) {
return array_key_exists($needle, $haystack) ? $haystack[$needle] : $return;
}
現在您可以致電:
if(isNum(get('id', $_GET))) {
// do something here
}
您可以更改isNum
以通過引用接收參數
<?php
if(isNum($_GET['id'])) { ... }
function isNum(&$data) {
if (isset($data) ) {
$data = sanitize($data);
return ctype_digit($data);
} else {
return false;
}
}
但是, $_GET['id']
將在調用時隱式創建並初始化為NULL
。
如果您不滿意該解決方案或該解決方案的棘手特性,請選擇其他答案。
最初傳遞索引時,您引用的是未定義索引。 您可以這樣做:
$key = 'id';
function foo($id ) {
if ( isset( $_GET[$id] ) ) {
}
}
或者,您可以只在函數調用之前執行isset。
if ( isset($_GET['id']) && isNum($_GET['id'])) { }
另一種選擇,使用一個臨時變量:
$foo = isset( $_GET['id'] ) ? $_GET['id'] : null;
if ( $foo ) { functionCall($foo); }
如果您不太關心您,也可以調低錯誤報告級別。
這是使用自定義類的一種優雅的實現方式:
首先,定義一個SmartArray類:
class SmartArray extends ArrayObject {
public static function convert(&$array) {
$array = new self($array);
}
public function offsetGet($index) {
return $this->offsetExists($index)? parent::offsetGet($index):NULL;
}
}
然后只需調用:
SmartArray::convert($_GET);
現在,如果$ _GET沒有鍵'id',您的if(isNum($_GET['id'])) { ... }
不會再抱怨了。
這就是您想要的,請檢查以確保在對isNum
的調用之前設置了id:
if(isset($_GET['id']) && isNum($_GET['id'])) {
...
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.