我正在研究一个项目,我有以下文件结构:
index.php
|---lib
|--|lib|type|class_name.php
|--|lib|size|example_class.php
我想自动加载类,class_name和example_class(与PHP类名称相同),以便在index.php中,类已经实例化,所以我可以这样做:
$class_name->getPrivateParam('name');
我曾在网上看过,但无法找到正确的答案 - 有人可以帮我解决问题吗?
如果你可以访问命令行,可以在classMap部分的Composer中使用如下内容进行尝试:
{
"autoload": {
"classmap": ["yourpath/", "anotherpath/"]
}
}
然后,你有一个WordPress插件来启用WordPress cli中的编写器:http://wordpress.org/plugins/Composer/
如果你需要自动加载类,请使用SPL自动加载的名称空间和类名称约定,这将节省你重新构建的时间。当然,你将需要实例化每个类作为一个对象。
就像这个线程: PHP自动加载名称空间
但是如果你想要一个复杂的解决方法,请看看Symfony的autoload类:https: //github.com/symfony/ClassLoader/blob/master/ClassLoader.php
或者像这样(我在我的一个项目中做过):
<?
spl_autoload_register(function($className)
{
$namespace=str_replace("\\","/",__NAMESPACE__);
$className=str_replace("\\","/",$className);
$class=CORE_PATH."/classes/".(empty($namespace)?"":$namespace."/")."{$className}.class.php";
include_once($class);
});
?>
然后你可以像这样实例化你的类:
<?
$example=new NS1\NS2\ExampleClass($exampleConstructParam);
?>
这是你的类(在/NS1/NS2/ExampleClass.class.php中找到):
<?
namespace NS1\NS2
{
class Symbols extends \DB\Table
{
public function __construct($param)
{
echo "hello!";
}
}
}
?>