php - PHP 中的简单命名空间

标签 php namespaces

我想包括类(class) Proxy
./proxy/Proxy.php 在 ./index.php

require_once 'proxy/Proxy.php';
$proxy = new Proxy();

但接下来我想使用命名空间,所以我做了:

./proxy/Proxy.php
namespace proxy;
class Proxy
{
[...]



./index.php
$proxy = new \proxy\Proxy();

或者
$proxy = new proxy\Proxy();

或者
use proxy\Proxy;
$proxy = new Proxy();

我总是得到:Fatal error: Uncaught Error: Class 'proxy\Proxy' not found in /var/www/proxy/index.php
怎么了?

最佳答案

首先,如果您要使用命名空间,请使它们符合 PSR-4 自动加载器!检查此链接:

http://www.php-fig.org/psr/psr-4/

换句话说,我要求您将命名空间更改为 Proxy有资本。

其次,要使自动加载工作,您需要注册一个自动加载器。你可以通过查看这个来自己做 http://php.net/manual/en/function.spl-autoload-register.php ,或者,更好的方法是安装 Composer ( https://getcomposer.org/ )。

然后使用 Composer,如果您当前没有使用它,请运行 composer init从您的站点根目录,这将生成一个 composer.json .

在 Json 中,添加以下条目:

"autoload": {
    "psr-4": { 
        "Proxy": "src/" 
    },
},

假设所有以 namespace Proxy 开头的类都在 src 中。目录。

由于您对自动加载配置进行了更改,请运行 composer dumpautoload它将生成新的类图。

最后,在您的脚本中,require_once 'vendor/autoload.php你永远不需要 require又上课了!
require_once 'vendor/autoload.php';

use Proxy\Proxy;

$proxy = new Proxy();

该约定基于文件路径和名称,因此 src/Proxy.phpnamepace Proxy , class Proxy . src/Something/Else.php将是 namespace Proxy\Somethingclass Else .

玩得开心! :-D

关于php - PHP 中的简单命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46787744/

相关文章:

php - PHP 文件是否有可能在执行时删除自身?

php - 返回的数组产生意外的结果

javascript - 如何更改表单中附加选择元素的值

php - 表单发布并重定向回来后的异步curl请求

C# 6 命名空间作为来自强类型命名空间引用的字符串

c++ - 使用 foo::bar 不会屏蔽 typedef-name::bar?

r - ggfortify::autoplot 或 ggfortify::::autoplot 不工作

php - 在 Ajax 提交后强制下载 TCPDF 创建的 PDF

xml - 使用 Microsoft.xmldom 更改 XML 元素的命名空间前缀以利用 GetElementsByTagName

android - 在哪里可以找到应用程序的命名空间 [Android]