在PHP
简单的命名空间,我想从 包括Proxy
类./proxy/Proxy.php在./index.php在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/"
},
},
,它假定所有的类命名空间代理走在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
试试你的index.php里面的以下内容:需要
include 'proxy/Proxy.php';
use proxy\Proxy;
$proxy = new Proxy();
此文件与类被列入为了访问。只调用它的命名空间是不够的。
^^从mega6382I的评论应该做的伎俩。
但是我想或许可以帮助您进一步开发,我建议您在需要时自动加载文件?您可以使用PHP自带的自动加载器:“spl_autoload_register!”。 我还建议您使用一些更好的命名空间,\ proxy \ Proxy根本没有意义...
您仍然需要包含类文件....使用类的命名空间不会自动为您做包含,它只是命名空间它们 –