php - 找不到 PHP 类
问题描述
我创建了一个单例类来返回我的数据库连接。我唯一要做的就是getInstance()
从另一个 php 文件中调用它的函数。
这是单例文件:
<?php
namespace stm_asc;
class PDO_Conn
{
public static $instance;
private static $host = '127.0.0.1';
private static $db = 'stm_asc';
private static $charset = 'utf8mb4';
private static $user = 'alekrabbe';
private static $pass = '<password>';
private static $dsn;
private static $opt = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_EMULATE_PREPARES => false,
];
private function __construct() {
//
}
public static function getInstance() {
if (!isset(self::$instance)) {
try {
self::$dsn = "mysql:host=".self::$host.";dbname=".self::$db.";charset=".self::$charset.";";
self::$instance = new PDO(self::$dsn, self::$user, self::$pass, self::$opt);
echo "Connected successfully";
} catch(PDOException $e) {
echo "Connection failed: " . $e->getMessage();
}
}
return self::$instance;
}
}
然后我所做的是login.php
调用函数getInstance()
,如下所示:
<?php
error_reporting(E_ALL);
ini_set("display_errors","On");
$pdo = \stm_asc\PDO_Conn::getInstance();
//session_start();
?>
<!DOCTYPE html>
<html>
[HTML CODE HERE]
</html>
但是当我尝试闲逛时,login.php
我收到以下错误:
Fatal error: Uncaught Error: Class 'stm_asc\PDO_Conn' not found in /home/alekrabbe/PhpstormProjects/selectorHat/views/login.php:4 Stack trace: #0 {main} thrown in /home/alekrabbe/PhpstormProjects/selectorHat/views/login.php on line 4
我不确定为什么找不到类 PDO_Conn,这是我的目录结构:
如果我评论这条线,$pdo = \stm_asc\PDO_Conn::getInstance();
一切都很好。
我正在使用 PHP 7.2.7 和 Ubuntu 18.04
编辑 1
所以我按照这个文档尝试使用自动加载器。但是它仍然无法正常工作,这是代码:
<?php
session_start();
spl_autoload_register(function ($name) {
echo "Want to load $name.\n";
throw new Exception("Unable to load $name.");
});
try {
$pdo = \stm_asc\PDO_Conn::getInstance();
$mapper = new \stm_asc\MySQL_DataMapper($pdo);
$stuff = $mapper->fetchUserByFname('Alexandre');
var_dump($stuff);
} catch (Exception $e) {
echo $e->getMessage(), "\n";
}
?>
<!DOCTYPE html>
<html>
[HTML CODE HERE]
</html>
这是出现在屏幕上的消息:
Want to load stm_asc\PDO_Conn. Unable to load stm_asc\PDO_Conn.
但是现在正在加载 html、css 和 java 脚本,我相信这是由于 try catch 块。
我也尝试require_once '../controller/database/PDO_Conn.php';
在 login.php 的开头添加,所以它看起来像这样:
<?php
require_once '../controller/database/PDO_Conn.php';
$pdo = \stm_asc\PDO_Conn::getInstance();
?>
<!DOCTYPE html>
<html>
[HTML CODE HERE]
</html>
但错误仍然存在:
Fatal error: Uncaught Error: Class 'stm_asc\PDO_Conn' not found in /home/alekrabbe/PhpstormProjects/selectorHat/views/login.php:22 Stack trace: #0 {main} thrown in /home/alekrabbe/PhpstormProjects/selectorHat/views/login.php on line 22
解决方案
解决方案 1:在您的login.php
.
<?php
require_once '../path/to/file.php';
在您的情况下:(来自 login.php)
<?php
require_once '../controller/database/PDO_Conn.php';
解决方案2:(推荐)
使用 PHP Autoloader:请参阅我在 GitHub 中为您设置的这个简单的自动加载示例。
推荐阅读
- django - 如何在 Django 中使用 UUID 自动填充预先存在的数据库条目
- javascript - 在 Feathers.js 客户端过滤/查询实时事件
- c - 打印英文标尺的C程序
- java - 不使用 JVMTI 的 Java 强制垃圾收集?
- c# - 反序列化 JSON,其中属性名称指示值的类型
- pivot-table - 反转日期顺序的熊猫数据透视表
- flutter - 检查文本字段颤动中文本的高度
- c# - 无法通过 UWP 中的 System.Data.DataTable 对象分配 CollectionViewSource.Source
- c# - 将 FlowDOcument.xaml 引用到 WPF XAML 并通过 ComboBox 更改参考文档
- unreal-engine4 - 无法在虚幻引擎 4 中编译 Actor 类 - 错误 MSB3073 以代码 6 退出