这里的第一个问题。我想用ajax调用php函数。在函数内部,我有一个来自名称空间上的库的类。
我在PHP中的函数内部一直使用medoo版本0.9,一切都运行良好。我也使用与ajax调用相同的函数。
在我的function.php文件中,我有:
//if called from js with ajax I use a var in the link to know for ex. variable_from_js=1
if(isset($_GET['variable_from_js']){
$response = my_function();
echo $response;//i catch the response with js then
exit;
}
//my function
function my_function(){
$a = new Medoo(DB_NAME);//DB_NAME is a global
...
}
Medoo正在使用版本中的命名空间> 1.2等许多其他图书馆。当我直接调用my_function()时,我使用:
require 'Medoo.php';
require 'function.php';
use Medoo\Medoo;
echo my_function();
一切都很好。现在,如果我调用相同的ajax调用,我会得到interanl服务器错误,因为找不到类Medoo。
我无法使用代码:
use Medoo\Medoo;
在if语句内部或函数内部因为这些东西的局部范围。我应该在全球范围内称呼它。但我正在使用ajax调用。
我应该在function.php中再次编写“use”语句,还是应该在其他地方编写? 是否有解决方案或唯一的解决方案是去掉“use”语句并在调用类(内部函数)时使用完整的命名空间路径?
答案 0 :(得分:1)
你应该只在你的代码中调用一次Medoo,所以在php文件的顶部
require 'Medoo.php';
require 'function.php';
use Medoo\Medoo;
$db = new Medoo(DB_NAME);
然后将medoo类传递给您的函数,例如
echo my_function($db);
在您的函数中,您可以使用诸如
之类的medoofunction my_function($db){
$value = $db->get('...','...','...');
return $value;
}
希望这会有所帮助。