php, ограничивающий вызов функции определенным классом


У меня есть класс с именем db.php .....и у меня в нем есть следующий метод.

function query($sql){
   return mysql_query($sql);
}

Я хочу, чтобы только этот класс мог использовать

Запрос Mysql_

Но другие не могут. А другие могут использовать только вызов

$db->запрос

Функция этого класса.

Возможно ли это? Любая помощь будет очень признательна!

Author: Greg K, 2014-07-12

2 answers

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

rename_function('mysql_query', 'mysql_query_old' );

function mysql_query(){
  //do whatever
  //pass the call to original method if needed.
  $args = func_get_args();
  if (count($args) === 2)
    return mysql_query_old($args[0], $args[1]);
  else
    return mysql_query_old($args[0]);
}

Чтобы ограничить его только определенным классом, вы можете просто проверить вызывающий класс:

$trace = debug_backtrace()[1];
$class = $trace['class'];

Посмотрите здесь и здесь для получения дополнительной информации:

 3
Author: Greg K, 2014-07-13 10:12:23

Насколько я знаю, отключение функций в PHP - это настройка "все или ничего":

  • Вы можете сделать так, чтобы расширение вообще не загружалось.
  • Вы можете запретить функцию с помощью disable_functions, что является PHP_INI_SYSTEM, таким образом, общесистемной настройкой.

Я не думаю, что есть что-то настолько мелкозернистое, как вы просите. Какой бы ни была причина, по которой вам нужно написать новый код с устаревшим расширением mysql, вам придется найти другое решение.

 1
Author: Álvaro González, 2014-07-12 16:26:04