我想包括类(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.php
是 namepace Proxy
, class Proxy
. src/Something/Else.php
将是 namespace Proxy\Something
与 class Else
.玩得开心! :-D
关于php - PHP 中的简单命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46787744/