在PHP

2017-10-17 22 views
0

简单的命名空间,我想从 包括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

有什么不对?

+2

您仍然需要包含类文件....使用类的命名空间不会自动为您做包含,它只是命名空间它们 –

回答

1

首先,如果您打算使用名称空间,使它们符合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.phpnamepace Proxyclass Proxysrc/Something/Else.php将是namespace Proxy\Somethingclass Else

玩得开心! :-D

1

试试你的index.php里面的以下内容:需要

include 'proxy/Proxy.php'; 
use proxy\Proxy; 

$proxy = new Proxy(); 

此文件与类被列入为了访问。只调用它的命名空间是不够的。

0

^^从mega6382I的评论应该做的伎俩。

但是我想或许可以帮助您进一步开发,我建议您在需要时自动加载文件?您可以使用PHP自带的自动加载器:“spl_autoload_register!”。 我还建议您使用一些更好的命名空间,\ proxy \ Proxy根本没有意义...