这个问题对某些人来说可能是显而易见的,但我刚刚开始用Web应用程序开发多层架构,尤其是PHP。我有一个包含多个对象的库,它正在快速扩展。我总是试着在可重用性方面进行思考,并将我的项目分解为小型,可重用和松散耦合的组件,这样我不仅可以创建项目,还可以为未来的项目创建部件。我正在尝试设计一种包管理系统,以便我可以停止在对象的include语句中使用绝对路径。我想有一个文件,其中包含我库中每个类文件的包含。除了包含,我想添加一个带有" singleton"的类。模式,这将允许我按需获取库中的每个对象的实例。我计划为每个返回对新实例的引用的对象创建一个静态getter。基本上,这样的事情......
include('classa.php');
include('classb.php');
include('classc.php');
class pacman{
private static $instance_stack;
public static function GetPackage($strPackage){
if(!self::$instance_stack){
self::$instance_stack['classa']=new ClassA();
self::$instance_stack['classb']=new ClassB();
self::$instance_stack['classc']=new ClassC();
}
if(array_key_exists(strtolower($strPackage),self::$instance_stack)){
return self::$instance_stack[strtolower($strPackage)];
}
else{
return false;
}
}
}
然后,如果我想上课...
include('pacman.php');
$ClassA = pacman::GetPackage('classa');
我意识到这是一个非常基本的实现。我的例子只涵盖了最低限度。我的问题不是实现这个;相反,这是一个问题,包括数百个来自包含的未实例化的类是否会对性能产生显着影响。如果是这样,有没有人知道一个解决方法?我无法告诉你跟踪数百个类的相对路径是多么困难,这些类都按内容分类为导演。
答案 0 :(得分:2)
你应该尝试自动加载它们:
<?php
function __autoload($class_name) {
include $class_name . '.php';
}
$obj = new ClassA();
$obj2 = new ClassB();
?>
这会按需“加载”类,从而减少开销,并且需要预先包含所有文件。更多信息请访问:http://php.net/autoload
答案 1 :(得分:0)