Почему команда use в PHP не работает с include? - PullRequest
0 голосов
/ 04 мая 2020

У меня есть этот скрипт:

<?php
error_reporting(E_ALL);
require 'vendor/autoload.php';

use Church\Config;
use Church\SQLiteConnection;
use Church\Template;
use Church\User;
$ERROR = "";

if(isset($_POST['username']) && isset($_POST['username']))
{
  $login = new User((new SQLiteConnection())->connect());
  if($login->loginUser($_POST['username'], $_POST['password']))
  {

  }
  else {
    $ERROR = "login";
  }
}

if(isset($_GET['go']))
{

}
else {
  if (!file_exists(Config::PATH_TO_SQLITE_FILE)) {
    include('init/install.php');
  }
}

Когда я делаю это с этой частью:

include('init/install.php');

вместо этого:

$tpl = new Template('templates/install.tpl');
$tpl->set('HEADER', $tpl->getFile('templates/header.tpl'));
$tpl->set('FOOTER', $tpl->getFile('templates/footer.tpl'));
$tpl->set('APP_NAME', Config::APP_NAME);
$tpl->set('APP_VERSION', Config::APP_VERSION);
$tpl->set('BASE_URL', $_SERVER['PHP_SELF']);
$tpl->render();

Я получаю это ошибка:

Fatal error: Uncaught Error: Class 'Template' not found in

Я не понимаю, почему он работает без включения, но с включением автоматическая загрузка не работает. Что я пропустил?

1 Ответ

2 голосов
/ 04 мая 2020

Взгляните на документы здесь: https://www.php.net/manual/en/language.namespaces.importing.php

Ключевое слово use должно быть объявлено в самой внешней области файла (глобальной области) или внутри пространства имен деклараций. Это потому, что импорт выполняется во время компиляции, а не во время выполнения , поэтому он не может быть ограничен областью блока. В следующем примере будет показано недопустимое использование ключевого слова use:

И затем:

Правила импорта основаны на файлах, то есть включенные файлы НЕ наследуются правила импорта родительского файла.

Вывод таков: вы не можете делать то, что хотите. Вам необходимо импортировать (также известный как use ) во включенном файле.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...