Я создаю сайт, и я использую Apache в качестве своего веб-сервера.PHP: проблема с автозагрузкой
Я создал сайт без использования классов. Все мои функции расположены в одном файле, и я просто включаю этот файл на каждую страницу, где мне нужно использовать некоторые из функций.
Теперь я хочу перейти на подход ООП, но у меня возникли проблемы с пониманием того, как автоматически загружать мои классы. Я прошел через ряд связанных страниц, например; PSR-4 Example, spl_autoload_register(), Related Question, и я просто не могу об этом подумать.
Итак, поскольку я использую Apache, путь для корня моего веб-сайта: C: \ Apache \ htdocs.
Мои каталоги выглядят следующим образом;
+ htdocs
+ Lib
+ Base
- User.php
- Device.php
- Company.php
- Database.php
+ Services
- UserService.php
- DeviceService.php
- CompanyServer.php
+ Config
- DbConfig.php
В качестве примера, так что вы можете помочь мне получить мою голову вокруг этого, мы будем просто говорить о двух классах DBCONFIG и базы данных.
DbConfig.php (с соединительные детали опущены)
<?PHP
namespace Lib\Config;
class DbConfig
{
protected $serverName;
protected $userName;
protected $password;
protected $dbName;
public function __construct()
{
$this->serverName = 'not my server name';
$this->userName = 'not my username';
$this->passCode = 'not my password';
$this->dbName = 'not my database';
}
}
database.php (Очень просто, пока я не могу реально использовать его - в этот момент я добавлю его функциональность)
<?PHP
namespace Lib\Base;
use Lib\Config\DbConfig;
class Database extends DbConfig
{
protected $connection;
private $dataSet;
private $sqlQuery;
public function __construct()
{
parent::__construct();
$this->connection = null;
$this->dataSet = null;
$this->sqlQuery = null;
}
}
Так ..
Как загрузить эти классы, используя некоторую реализацию spl_autoload_register(), в другой файл .php, чтобы я мог использовать их для создания объектов? например, в файле с именем «Testing.php»
Раньше я бы разобрать .ini файл вне корня моей папки, чтобы получить подробную информацию соединения с базой данных, я должен сделать это с моим новым подходом наличия деталей соединения в классе DbConfig?
spl_autoload_register (функция ($ класс) { включать «классы /». $ Класса. '.class.php'; }); 1. Используйте эту функцию для своего .php-файла, который должен всегда загружаться. 2. Имя класса и имя файла должны совпадать, иначе автозагрузка не найдет класс. Например, Testing.php имеет тестирование имени класса. :) –
хорошо сформулированный и структурированный php-вопрос +1 – birdspider
Если вы пытаетесь выполнить PSR-4, почему бы не использовать автозагрузчик [composer] (https://getcomposer.org/)? –