php限制对特定类的函数调用

php限制对特定类的函数调用,php,function,class,call,restrict,Php,Function,Class,Call,Restrict,我有一个名为db.php的类。。。。。我有下面的方法 function query($sql){ return mysql_query($sql); } 我希望只有这个类可以使用 mysql\u查询 但其他人不能。而其他人只能通过调用 $db->query 这个类的函数 可能吗? 任何帮助都将不胜感激 据我所知,PHP中的函数禁用是一种全有或全无设置: 您可以使扩展完全不加载 您可以使用禁用函数,这是PHP\u INI\u SYSTEM,因此是一个系统范围的设置 我不认为有什么比你要

我有一个名为db.php的类。。。。。我有下面的方法

function query($sql){
   return mysql_query($sql);
}
我希望只有这个类可以使用

mysql\u查询

但其他人不能。而其他人只能通过调用

$db->query

这个类的函数

可能吗?
任何帮助都将不胜感激

据我所知,PHP中的函数禁用是一种全有或全无设置:

  • 您可以使扩展完全不加载
  • 您可以使用禁用函数,这是
    PHP\u INI\u SYSTEM
    ,因此是一个系统范围的设置

我不认为有什么比你要求的更精细的了。无论出于何种原因,您必须使用旧版mysql扩展编写新代码,您都必须找到另一种解决方案。

据我所知,在PHP中禁用函数是一种全有或全无的设置:

  • 您可以使扩展完全不加载
  • 您可以使用禁用函数,这是
    PHP\u INI\u SYSTEM
    ,因此是一个系统范围的设置

我不认为有什么比你要求的更精细的了。无论出于什么原因,您必须使用遗留的mysql扩展编写新代码,您都必须找到另一种解决方案。

我非常确定这可以通过间接的方式实现。如果需要,可以重命名该函数,然后再次调用它:

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

看一看,了解更多信息:

我很确定这可以通过间接的方式实现。如果需要,可以重命名该函数,然后再次调用它:

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

查看并获取更多信息:

1)
mysql\u query
已弃用,不应用于新代码(请改用)。2) 您不能阻止任何地方的任何类使用内置PHP函数。来自@this.lau_的完美答案非常奇怪。最有可能的解决方案是:1)
mysql\u query
已被弃用,不应用于新代码(请改用)。2) 您不能阻止任何地方的任何类使用内置PHP函数。来自@this.lau_的完美答案非常奇怪。很可能有一个更有效的解决方案。如果可以在服务器上安装该PECL扩展,那么如果从系统范围的
auto\u prepend\u文件
directive.interest调用,它肯定可以完成这项任务。如果可以在服务器上安装该PECL扩展,那么如果从系统范围的
auto\u prepend\u文件
指令调用,它肯定可以完成这项任务。