Как вызвать medoo 1.5 внутри функции с помощью ajax?
Первый вопрос здесь. Я хочу вызвать функцию PHP с AJAX. Внутри функции у меня есть класс из библиотеки, которая находится в пространстве имен.
Я использую medoo с версией 0.9 внутри функций в php, и все работает отлично. Я также использую те же функции с вызовами 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" и использовать полный путь к пространству имен при вызове класса (внутри функции)?
1 ответ
Вы должны вызывать Medoo только один раз в своем коде, поэтому в верхней части вашего php-файла
require 'Medoo.php';
require 'function.php';
use Medoo\Medoo;
$db = new Medoo(DB_NAME);
а затем передать класс Medoo для вашей функции, такой как
echo my_function($db);
В вашей функции, вы можете использовать меду
function my_function($db){
$value = $db->get('...','...','...');
return $value;
}
надеюсь это поможет.