我一直在使用Symfony类加载器(阅读其他人,概念并开始实现).
我已经阅读了http://symfony.com/doc/current/components/class_loader.html以及我已经改变了目录结构以适应所有.这是一个失败的小源代码:
文件名:test.php,dir:C:/test/BE/src/main.php
<?php
define('BASE_DIR','/../..');
echo BASE_DIR.'/BE/libs/symphony/component/ClassLoader/2.1.0/UniversalClassLoader.php';
require_once BASE_DIR.'/BE/libs/symphony/component/ClassLoader/2.1.0/UniversalClassLoader.php';
use Symfony\Component\ClassLoader\UniversalClassLoader;
$loader = new UniversalClassLoader();
$loader->registerNamespace('App\Location\Location', 'Location/Location');
// You can search the include_path as a last resort.
$loader->useIncludePath(true);
$loader->register();
use App\Location\Location;
new App\Location\Location(); //Fatal error: Class 'App\Location\Location' not found in C:/test/BE/src/main.php
Run Code Online (Sandbox Code Playgroud)
文件名:Location.php,dir:C:/test/BE/src/Location/Location.php
namespace App\Location;
class Location{
private $lat;
private $lng;
}
Run Code Online (Sandbox Code Playgroud)
Jak*_*las 11
通过注册您的命名空间如下:
$loader->registerNamespace('App\Location\Location', 'Location/Location');
Run Code Online (Sandbox Code Playgroud)
autoloader将App\Location\Location
在Location/Location/App/Location/Location.php
文件中查找该类.请注意,文件/目录名称区分大小写.
第一个参数registerNamespace()
是命名空间或命名空间的一部分.第二个参数是PSR-0兼容库的路径.这意味着该路径中的目录结构应遵循PSR-0标准.在计算给定命名空间的路径时,不使用此路径.
如果你想保持你当前的目录结构,代码应该适合你:
$loader->registerNamespace('App', __DIR__);
Run Code Online (Sandbox Code Playgroud)
我宁愿把你的源代码放在一个公共目录中,例如src:
src/
App/
Location/
Location.php
Run Code Online (Sandbox Code Playgroud)
然后注册名称空间如下:
$loader->registerNamespace('App', 'src');
Run Code Online (Sandbox Code Playgroud)
通过这样做,你只是告诉自动加载器它应该在src文件夹中查找App命名空间类.请注意,它适用于App命名空间中的每个类(在PSR-0之后).
前段时间我写了一篇关于Symfony自动加载器的博客文章.您可能会发现它很有用:使用Symfony2 ClassLoader组件在任何PHP项目中自动加载类
由于您计划使用Pimple和一些Symfony组件,请查看Silex微框架.可能是你需要实现的东西.
归档时间: |
|
查看次数: |
5449 次 |
最近记录: |