簡體   English   中英

PHP-在函數中使用isset無法正常工作..?

[英]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.

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