Existuje lepší způsob, jak kontrolovat Publikováno proměnné v PHP?

hlasů
7

Připadá mi v mých stránek PHP jsem skončit s linií a řádků kódu, které vypadají takto:

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

Je tam lepší, výstižnější, nebo čitelnější způsob, jak kontrolovat toto pole a přiřadit je k lokální proměnné, pokud existují, nebo použít výchozí když ne?

EDIT: Já nechci používat register_globals()- stejně bych mít problém isset tak jako tak.

Položena 31/07/2009 v 00:07
zdroj uživatelem
V jiných jazycích...                            


6 odpovědí

hlasů
6

Jak se o zabalením do funkce?

<?php

function getPost($name, $default = null) {
    return isset($_POST[$name]) ? $_POST[$name] : $default;
}
Odpovězeno 31/07/2009 v 00:16
zdroj uživatelem

hlasů
4

lepší metoda by mohla být vytvořit singleton / statickou třídu abstrahovat vzdálených detailů kontrolu dat žádosti.

Něco jako:

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.
      }
   }
}

pak můžete udělat:

# 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;

Myslím, že toto je vaše individuální skripty zatížení čistší a abstrahuje pryč validace atd Plus spoustu působnosti se tento návrh rozšířit jej / přidat alternativní chování, přidejte složitější manipulaci s výchozí atd atd

Odpovězeno 31/07/2009 v 00:14
zdroj uživatelem

hlasů
2

Za prvé, nikdy použít proměnnou $ _REQUEST, bude to vést k chyb a jiných problémů v průběhu vývoje


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

note that this code leaves the variable empty when $_POST[$key] nebyl nastaven

můžete také přizpůsobit, aby kód, který vám umožní místo poskytne (rozumným) ve výchozím nastavení, kdy nelze načíst hodnotu.

Funkce getPOST ($ key, $ default = NULL) {
    if (isset ($ _ POST [$ key])) {
        vrátit _POST $ [$ key];
    } Else {
        vrátit $ výchozí;
    }
}
Odpovězeno 31/07/2009 v 00:30
zdroj uživatelem

hlasů
2

Za prvé, použijte $_POSTpro vyslané proměnných. $_REQUESTje mashup z mnoha různých vstupních proměnných, a to nejen $_POSTa může způsobit problémy.

Jedním z řešení pro vaši otázku by bylo vytvořit funkci, která zpracovává isset()logiku.

function ForceIncomingValue($Key, $Default) {
    if (!isset($_POST[$Key]))
         return $Default;
    else return $_POST[$Key];
}
Odpovězeno 31/07/2009 v 00:17
zdroj uživatelem

hlasů
1

Je soubor proměnných čekáte známy v době psaní skriptu, nebo chceš, aby to pro libovolný soubor hodnot? V prvním případě je to pravda, jsi to mohl udělat něco takového:

# 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;
}

V zásadě to využívá schopnosti PHP vyhodnotit proměnných vytvořit jiné proměnné (proto double-dolaru za $$ klíč - to znamená vytvořit novou proměnnou, jejíž název je hodnota $ key).

Ještě jsem se přijít s dobrým řešením do posledně jmenované situaci.

Odpovězeno 31/07/2009 v 00:15
zdroj uživatelem

hlasů
0

PHP null operátor splývání !

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

Pro mnoho proměnných, s šekem požadavku, někdo je zdarma k použití svou expectfunkci .

Odpovězeno 02/03/2016 v 00:07
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more