php Ограничение вызова функции для определенного класса

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

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

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

mysql_query

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

$ Db-> запрос

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

Является ли это возможным? Любая помощь будет принята с благодарностью!

2 ответа

Решение

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

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'];

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

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

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

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

Другие вопросы по тегам