【发布时间】:2016-12-12 21:43:14
【问题描述】:
我正在尝试编写自动加载器功能,但遇到了问题。当我从 Product 类内部调用 DBConnect 类时,它继承了 Product 类命名空间。
我不知道在自动加载 DBConnect 类时如何使用“use”语句。如果我尝试在我的加载器函数中的 include 之后添加“use”语句,则会引发错误。所以我不断收到“致命错误:找不到类'App\Model\Entity\DbConnect'”。它应该使用“App\Config\DBConnect”。
这是我构建的第一个自动加载器,所以我不确定我哪里出错了。
提前致谢。
bootstrap.php
require_once('Autoloader.php');
require_once $_SERVER['DOCUMENT_ROOT'] . '/Config/config.php';
spl_autoload_register('Core\Autoloader::loader');
Autoloader.php
namespace Core;
class Autoloader
{
public static function loader( $class, $dir = null ) {
if ( is_null( $dir ) )
$direct = array(
'/Controller',
'/Model/Entity',
'/Model/Table',
'/Config'
);
foreach ($direct as $dir){
$scan = scandir(ROOTPATH . $dir);
$classname = substr(strrchr($class, "\\"), 1);
$classfile = $classname . '.php';
foreach($scan as $file)
{
if(file_exists(ROOTPATH . $dir . '/' . $classfile)){
include ROOTPATH . $dir . '/' . $classfile;
goto xspot;
}
}
}
xspot:
}
}
产品.php
namespace App\Model\Entity;
require_once $_SERVER['DOCUMENT_ROOT'] . '/Config/config.php';
include ROOTPATH . '/Core/bootstrap.php';
class Product
{
public function __construct($conntype = 'MYSQLI') {
$db = new DbConnect();
$this->conn = $db->connect($conntype);
}
DBConnect.php
namespace App\Config;
class DbConnect {
function connect() {
require_once $_SERVER['DOCUMENT_ROOT'] . '/Config/config.php';
$conn = new \mysqli(DB_SERVER_MYSQLI, DB_USERNAME, DB_PASSWORD, DB_NAME, DB_PORT);
if (mysqli_connect_errno()) {
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
}
【问题讨论】:
标签: php class namespaces