我正在开发一个项目,该项目具有以下文件结构:
index.php
|---lib
|--|lib|type|class_name.php
|--|lib|size|example_class.php
我想自动加载类,class_name 和 example_class(与 PHP 类命名相同),以便在 index.php 中类已经被实例化,所以我可以这样做:
$class_name->getPrivateParam('name');
我在网上查了一下,但找不到正确的答案 - 有人可以帮助我吗?
EDIT
感谢您的回复。让我扩展一下我的场景。我正在尝试编写一个 WordPress 插件,可以将其放入项目中,并通过将类放入插件内的“功能”文件夹中来添加附加功能。永远不会有 1000 个类,一次可能有 10 个?
我可以编写一个方法来迭代“lib”文件夹的文件夹结构,包括每个类,然后将其分配给(类名的)变量,但不认为这是一种非常有效的方法,但它也许这似乎是实现我需要的最好方法?
如果您需要自动加载类,请使用 SPL 自动加载的命名空间和类名称约定,这将节省您的重构时间。
当然,您需要将每个类实例化为对象。
谢谢。
就像在这个线程中一样:命名空间中的 PHP 自动加载 https://stackoverflow.com/questions/3642282/php-autloading-in-namespaces
但如果你想要一个复杂的解决方法,请看一下 Symfony 的 autoload 类:https://github.com/symfony/ClassLoader/blob/master/ClassLoader.php 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!";
}
}
}
?>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)