我正在做一个项目,其中我有以下文件结构:
index.php
|---lib
|--|lib|type|class_name.php
|--|lib|size|example_class.php
我想自动加载类class_name和example_class (名称与PHP类相同),这样在index.php中这些类就已经被实例化了,所以我可以这样做:
$class_name->getPrivateParam('name');
我在网上看了看,但找不到正确的答案--有人能帮我吗?
编辑
谢谢你的回复。让我来扩展一下我的场景。我正在尝试编写一个WordPress插件,可以将其放入项目中,并通过将类拖放到文件夹“functionality”中来添加额外的功能。永远不会有1000个类,一下子可能会有10个?
我可以写一个方法来迭代“lib”文件夹的文件夹结构,包括每个类,然后将它赋给一个变量(类名),但我不认为这是一个非常有效的方法,但似乎这是实现我所需的最好方法?
发布于 2013-07-23 17:27:23
请注意,如果您需要自动加载类-使用SPL自动加载的名称空间和类名约定,它将节省您的重构时间。当然,您需要将每个类实例化为一个对象。谢谢。
就像这个帖子里的:PHP Autoloading in Namespaces
但如果您想要一个复杂的变通方法,请查看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!";
}
}
}
?>
发布于 2013-07-23 17:49:21
如果您有访问命令行的权限,可以使用classMap部分中的composer进行尝试,如下所示:
{
"autoload": {
"classmap": ["yourpath/", "anotherpath/"]
}
}
然后你就有了一个wordpress插件来在wordpress cli:http://wordpress.org/plugins/composer/中启用composer
发布于 2013-07-23 17:27:31
http://php.net/manual/de/function.spl-autoload-register.php
spl_autoload_register(function ($class) {
@require_once('lib/type/' . $class . '.php');
@require_once('lib/size/' . $class . '.php');
});
https://stackoverflow.com/questions/17806301
复制相似问题