PHP에서 게시 된 변수를 확인하는 더 좋은 방법이 있습니까?
-
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의 능력을 활용합니다 (따라서 $$ 키를위한 이중 달러-이는 이름이 $ 키의 값인 새 변수를 생성 함).
나는 아직 후자의 상황에 대한 좋은 해결책을 찾지 못했습니다.