PHP OOP架构问题

时间:2012-09-28 19:25:46

标签: php oop architecture

这个问题对某些人来说可能是显而易见的,但我刚刚开始用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');

我意识到这是一个非常基本的实现。我的例子只涵盖了最低限度。我的问题不是实现这个;相反,这是一个问题,包括数百个来自包含的未实例化的类是否会对性能产生显着影响。如果是这样,有没有人知道一个解决方法?我无法告诉你跟踪数百个类的相对路径是多么困难,这些类都按内容分类为导演。

2 个答案:

答案 0 :(得分:2)

你应该尝试自动加载它们:

<?php
function __autoload($class_name) {
    include $class_name . '.php';
}

$obj  = new ClassA();
$obj2 = new ClassB(); 
?>

这会按需“加载”类,从而减少开销,并且需要预先包含所有文件。更多信息请访问:http://php.net/autoload

答案 1 :(得分:0)

回答你的表现问题是 - 没关系。在你拥有Facebook2,Yahoo2或Googl2之前,你不会发现任何差异。

我个人不鼓励你大量使用单身人士。这是一个名字很好的GLOBAL。使您的代码长期难以使用。

如果您对可重复使用的软件包/库感兴趣,请了解Phar

如果您需要在任何地方使用静态getter,请检查名为traits的最新5.4.x功能。它将帮助您避免重复代码。

最后,不要在课程中使用require。使用autoload