PHP에서 게시 된 변수를 확인하는 더 좋은 방법이 있습니까?

StackOverflow https://stackoverflow.com/questions/1209873

  •  06-07-2019
  •  | 
  •  

문제

PHP 페이지에서 다음과 같이 보이는 코드 라인이 있습니다.

$my_id = isset($_REQUEST['my_id']) ? $_REQUEST['my_id'] : '';
$another_var = isset($_REQUEST['another_var']) ? $_REQUEST['another_var'] : 42;
...

이 배열을 확인하고 존재하지 않는 경우 로컬 변수에 할당하는 더 좋고 간결하거나 읽기 쉬운 방법이 있습니까?

편집 : 사용하고 싶지 않습니다 register_globals() - 어쨌든 여전히 ISSET 문제가 있습니다.

도움이 되었습니까?

해결책

함수로 래핑하는 것은 어떻습니까?

<?php

function getPost($name, $default = null) {
    return isset($_POST[$name]) ? $_POST[$name] : $default;
}

다른 팁

더 나은 방법은 싱글 톤/정적 클래스를 만들어 요청 데이터를 확인하는 세부 사항을 추상화하는 것입니다.

같은 것 :

class Request {

  private $defaults = array();
  private static $_instance = false;

  function getInstance () {
    if (!self::$_instance) {
     $c = __CLASS__;
      self::$_instance = new $c;
    }
    return self::$_instance;
  }

  function setDefaults($defaults) {
    $this->defaults = $defaults;
  }

  public function __get($field) {
    if (isset($_REQUEST[$field]) && !empty($_REQUEST[$field])) {
        return $_REQUEST['field'];        
      } elseif (isset($this->defaults[$field])) {
        return $this->defaults[$field];
      } else {
        return ''; # define a default value here.
      }
   }
}

그런 다음 할 수 있습니다.

# get an instance of the request
$request = Request::getInstance();

# pass in defaults.
$request->setDefaults(array('name'=>'Please Specify'));

# access properties
echo $request->name;
echo $request->email;

이것은 당신의 개별 스크립트가 더 깨끗하게로드하고 유효성 검사 등을 추상화시킬 수 있다고 생각합니다.이 디자인의 많은 범위와 대체 동작을 확장/추가하고 더 복잡한 기본 취급 등을 추가합니다.

먼저 사용합니다 $_POST 게시 된 변수의 경우. $_REQUEST 뿐만 아니라 많은 다른 들어오는 변수의 매시업입니다. $_POST 문제를 일으킬 수 있습니다.

질문에 대한 한 가지 해결책은 isset() 논리.

function ForceIncomingValue($Key, $Default) {
    if (!isset($_POST[$Key]))
         return $Default;
    else return $_POST[$Key];
}

우선, $ _request 변수를 사용하지 마십시오. 개발 중에 버그 및 기타 문제로 이어질 것입니다.


function getPOST($key) {
    if(isset($_POST[$key])) {
        return $_POST[$key];
    }
}

note that this code leaves the variable empty when $_POST[$key] 설정되지 않았습니다

값을로드 할 수없는 경우 (현명한) 기본값을 제공 할 수 있도록 해당 코드를 조정할 수도 있습니다.

function getPOST($key, $default = NULL) {
    if(isset($_POST[$key])) {
        return $_POST[$key];
    } else {
        return $default;
    }
}

스크립트의 글을 쓰는 시점에 알려진 변수 세트가 있습니까, 아니면 임의의 값 세트에 대해 이것을하고 싶습니까? 전자가 사실이라면 다음과 같은 일을 할 수 있습니다.

# This array would hold the names of all the variables you're expecting
# and a default value for that variable name
$variableNames = array (...); 
foreach ($variableNames as $key => $default) {
    if (isset ($_REQUEST[$key])) $$key = $_REQUEST[$key];
    else $$key = $default;
}

기본적으로 이것은 변수를 평가하여 다른 변수를 생성하는 PHP의 능력을 활용합니다 (따라서 $$ 키를위한 이중 달러-이는 이름이 $ 키의 값인 새 변수를 생성 함).

나는 아직 후자의 상황에 대한 좋은 해결책을 찾지 못했습니다.

PHP의 널 연합 운영자!

$username = $_GET['user'] ?? 'nobody';

많은 변수의 경우 요구 사항 점검을 통해 누구나 자유롭게 사용할 수 있습니다. expect 기능.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top