PHP - 使用命名空间创建 PDO 连接

Posted

技术标签:

【中文标题】PHP - 使用命名空间创建 PDO 连接【英文标题】:PHP - Create PDO Connection using namespace 【发布时间】:2019-09-23 21:13:46 【问题描述】:

我有一个项目文件夹名称实用程序。 目录列表为:

- utilities
    - tli
        - database
            Connection.php
    index.php

Connection.php 是 PDOConnection。 代码是:

<?php

namespace app\tli\database;

use PDO;
use PDOException;

Class Connection

    private $server = "mysql:host=localhost;dbname=ytsurumaru_hanwa_coil_v.2";
    private $user = "root";
    private $pass = "";
    private $options = array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,);
    protected $con;

    public function openConnection()
    
        try 
            $this->con = new PDO($this->server, $this->user, $this->pass, $this->options);
            return $this->con;
         catch (PDOException $e) 
            return "There is some problem in connection: " . $e->getMessage();
        
    

    public function closeConnection()
    
        $this->con = null;
    

更新源

现在,我需要 index.php 中的这个 Connection 实例

<?php

namespace app;

use app\tli\database\Connection;
use PDOException as PDOEx;

require('tli/database/Connection.php');

try 
    $connection = new Connection(); // not found
    $connection->openConnection();
 catch (PDOEx $e) 
    echo $e->getMessage();

当我运行它时,

D:\wamp64\www\utilities\tli>php index.php

Warning: require(tli/database/Connection.php): failed to open stream: No such file or directory in D:\wamp64\www\utilities\tli\index.php on line 8

Fatal error: require(): Failed opening required 'tli/database/Connection.php' (include_path='.;C:\php\pear') in D:\wamp64\www\utilities\tli\index.php on line 8

如何解决,我的命名空间有问题吗?

【问题讨论】:

你在 composer.json 中定义了命名空间吗?向我们展示来自 Composr 的自动加载器 我不使用 composer.json。怎么用? 或自定义自动加载器.. 你绝对可以在没有 Composer 的情况下使用命名空间。 好吧,正确的路径是:require('database/Connection.php'); 【参考方案1】:

这还不足以访问您的数据库连接吗?

require 'tli/database/Connection.php';

然后,由于您位于不同的名称空间并且没有别名,因此您应该在“try catch 块”中:

$connection = new Connection(); // not found

执行以下操作:

$connection = new \tli\database\Connection();

确保设置正确的路径。

您可以像这样使用不同的名称:

namespace app;
require 'tli/database/Connection.php';
use tli\database\Connection as MyConnection;
$connection = new MyConnection();

【讨论】:

【参考方案2】:

您需要使用其中的一个

include('tli/database/Connection.php')
include_once('tli/database/Connection.php')
require('tli/database/Connection.php') 
require_once('tli/database/Connection.php')

或者,如果您想要更多自动化,请使用 autoloader。 你可能想看看this SO question 和所有相关的东西。

【讨论】:

抱歉,从您的目录结构的描述来看,index.php 似乎在实用程序目录中。从错误消息看来,它位于 tli 目录中。所以正确的路径应该是database/Connection.php

以上是关于PHP - 使用命名空间创建 PDO 连接的主要内容,如果未能解决你的问题,请参考以下文章

PHP中命名空间是怎样的存在?

在 PHP 5.3 中使用命名空间自动加载?

PHP命名空间

php中命名空间面向对象访问控制接口

在 PHP 中使用命名空间和自动加载从变量创建对象

PHP命名空间面向对象以及构造函数