gpt4 book ai didi

PHP:自动加载有问题

转载 作者:可可西里 更新时间:2023-10-31 23:28:54 26 4
gpt4 key购买 nike

我正在创建一个网站,我使用 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

作为一个例子,您可以帮助我理解这个问题,我们将只讨论两个类 DbConfigDatabase

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;
}
}

所以..

  1. 如何使用 spl_autoload_register() 的某些实现将这些类加载到另一个 .php 文件中,以便我可以使用它们来创建对象?例如在名为“Testing.php

  2. 的文件中
  3. 以前我会在我的文件夹的根目录之外解析一个 .ini 文件来获取数据库连接细节,我应该用我的新方法来做这个吗?类 DbConfig?

最佳答案

根据PSR-4标准,

The fully qualified class name MUST have a top-level namespace name, also known as a "vendor namespace".

您的类(class)似乎没有这个。要添加它,请更改 namespace Lib\Config;例如,namespace AskMeOnce\Lib\Config; .您需要将此前缀添加到所有类中。

然后,使用您引用的 PSR-4 自动加载器,更改 $prefix = 'Foo\\Bar\\';$prefix = 'AskMeOnce\\';$base_dir = __DIR__ . '/src/';$base_dir = 'C:\Apache\htdocs'; .将该函数放在一个名为 autoload.php 的文件中,并在任何需要知道如何自动加载的文件中要求它。

一旦你require该自动加载器,PHP 将知道查找以命名空间 AskMeOnce 开头的任何类在指定的基本目录中。从命名空间中删除该前缀后,命名空间代表路径的其余部分。例如,AskMeOnce\Lib\Config\DbConfig将在 <basedir>/Lib/Config/DbConfig.php 寻找.

具体回答你的问题,(1)把函数放在autoload.php ,经过我上面提到的修改。 (2) 由于 ini 文件不是 PHP 类,所以只要您的代码知道如何找到它(无论是硬编码路径还是其他路径),它在哪里并不重要。

关于PHP:自动加载有问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35556721/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com