Как вызвать 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;
}

надеюсь это поможет.

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