【发布时间】:2016-02-22 14:54:22
【问题描述】:
我正在创建一个网站,并使用 Apache 作为我的网络服务器。
我创建了一个不使用类的网站。我的所有功能都位于一个文件中,我只是在需要使用某些功能的每个页面上都包含此文件。
我现在想换成 OOP 方法,但我无法理解如何自动加载我的类。我已经浏览了许多相关页面,例如; 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 和 Database。
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(function ($class) { include 'classes/' . $class . '.class.php'; }); 1. 将此功能用于您必须始终加载的 .php 文件。 2. 类名和文件名要一致,否则自动加载将找不到类。示例 Testing.php 具有类名 testing。 :)
-
一个措辞和结构很好的 php 问题 +1
-
如果您想遵守 PSR-4,为什么不使用 composer 自动加载器?
-
@JustinHoward 我会去看看,但对我来说了解发生了什么很重要。
-
在这个阶段,您似乎不需要 PSR-4 兼容性,因此只需按照@Desert_King 的建议使用自定义自动加载器。如果您确实想要正式的 PSR-4 自动加载器,请查看 Zero to PSR-4 in 60 seconds。