Вечер добрый! Использую библиотеку Longman для телеграмм бота . Есть файл GenericmessageCommand, который отвечает за ответ бота, на сообщение пользователя. В этом файле мне требуется обратиться к своей базе данных и плюс к своему классу. Как правильно это сделать? Если я пишу в этом коде include (path/bd.php);, то программа меняет пути из-за namespace. Заранее спасибо. .\adm\basemysqli.php .\adm\Commands\GenericmessageCommand.php PHP: <?php /** * This file is part of the TelegramBot package. * * (c) Avtandil Kikabidze aka LONGMAN <akalongman@gmail.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Longman\TelegramBot\Commands\SystemCommands; use Longman\TelegramBot\Commands\SystemCommand; use Longman\TelegramBot\Conversation; use Longman\TelegramBot\Request; /** * Generic message command * * Gets executed when any type of message is sent. */ class GenericmessageCommand extends SystemCommand { /** * @var string */ protected $name = 'genericmessage'; /** * @var string */ protected $description = 'Handle generic message'; /** * @var string */ protected $version = '1.1.0'; /** * @var bool */ protected $need_mysql = true; /** * Command execute method if MySQL is required but not available * * @return \Longman\TelegramBot\Entities\ServerResponse * @throws \Longman\TelegramBot\Exception\TelegramException */ public function executeNoDb() { } /** * Command execute method * * @return \Longman\TelegramBot\Entities\ServerResponse * @throws \Longman\TelegramBot\Exception\TelegramException */ public function execute() { //If a conversation is busy, execute the conversation command after handling the message $conversation = new Conversation( $this->getMessage()->getFrom()->getId(), $this->getMessage()->getChat()->getId() ); $message = $this->getMessage(); // Здесь требуется доступ к mysqli базе } }
звучит как-то странно. ты можешь указать полное имя класса вместе с неймспейсом. типа PHP: $db = new \Foo\Bar\DB; // здесь явное указание корневого неймспейса или предварительно упомянуть класс во фразе use, там все именя танцуют от корневого неймспейса. а затем в коде уже без неймспейса, PHP помнит путь из use. PHP: use Foo\Bar\DB; // ... $db = new DB;
db это не класс, db это файл с настройками для подключения к mysql. А второй класс, который я хочу подключить,он не связан ни как c неймспейсом Файл db.php PHP: <?php session_start(); $mysqli = new mysqli("localhost", "s*******", "******", "**************"); /* Проверяем соединение */ if ($mysqli->connect_errno) { //printf("Ошибка соединения: %s\n", mysqli_connect_error()); exit(); } $mysqli->query("set names UTF8"); $mysqli->query("SET session wait_timeout = 28800"); $mysqli->query("SET session max_allowed_packet = 1073741824"); if ($result = $mysqli->query("SELECT DATABASE()")) { $row = $result->fetch_row(); $db= $row[0]; //Текущая база $result->close(); } ?>
Окей. Тогда ответ такой: НЕЙМСПЕЙС НИКАК НЕ ВЛИЯЕТ НА ПУТЬ ОТКУДА ПОДКЛЮЧАЮТСЯ ФАЙЛЫ. Есть настройка include_path, она не зависит от неймспейса. Ты сам попутал автолоадер классов и просто include и нас ввёл в заблуждение. --- Добавлено --- Имеет значение как ты указал путь до файла в include: начинается ли он с "." или "/", например. Ты можешь использовать константу __DIR__ чтобы с уверенностью указать нужный адрес.