php функция __construct() вопрос, связанный с этим-> get = $_GET

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

  •  06-07-2019
  •  | 
  •  

Вопрос

Я работаю над чьим-то кодом, и у них есть конструктор, который использует:

class qwerty {
public function __construct(){
// some other code
    $this->get = $_GET;
}
}

Мой вопрос заключается в следующем:Можно ли очистить данные внутри конструктора?Даже используя какую-нибудь простую функцию вроде strip_tags()?

Пример использования:

$qwerty = new qwerty;
qwerty->get['id'];
Это было полезно?

Решение

Я вижу два подхода к этому.Одним из них было бы просто использовать цикл foreach в конструкторе для перебора параметров $_GET

foreach($_GET AS $key => $val)
{
  $_GET[$key] = sanitize($val);
}

В качестве альтернативы, извлеките данные с помощью функции get и очистите их там.

function getParams($key)
{
  return sanitize($_GET[$key]);
}

Другие советы

В конструкторе вы можете делать практически все, что захотите.Сказав это, это не значит, что вы должны это делать.Многие возразили бы, что ничего значимого или способного вызвать исключение не должно быть в конструкторе.В любом случае, если вы собираетесь использовать этот класс, вы могли бы сделать что-то вроде этого:

class qwerty
{
    private $get;

    public function __construct($params)
    {
       $this->get = $this->sanitize($params);
    }

    public function sanitize($params)
    {
        $sanitized = $params;

        foreach ($sanitized as $key => $value) {
            $sanitized[$key] = strip_tags($value);
        }

        return $sanitized;
    }

    public function getField($field)
    {
        if (array_key_exists($field,$this->get)) {
            return $this->get[$field];
        } else {
            return null;
        }
    }
}

$q = new qwerty($_GET);
$q->getField('id');
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top