如何让15个静态PHP类很好地协同工作?

时间:2009-11-18 07:17:23

标签: php singleton

我有一个个人PHP应用程序,大约有15个类。每个类仅在页面执行时启动一次。换句话说,当页面加载时:

  • 加载了15个类,并且在加载每个类文件时,我创建了一个类的实例。
  • 应用程序(到目前为止)的设计使系统中的每个变量在生成页面时都有一个状态。我使用全局变量来访问每个
  • 它运行良好3年,但我是我自己代码的唯一开发人员和goo调试器。

我已经听过Singletons的所有问题,我讨厌这样做,“全球$ var”到处都是。请告诉我如何将这种类型的结构拉出来并进入开发人员喜欢的东西。我想以正确的方式编写软件,但我似乎无法为这种类型的执行找到一个非常简单的代码框架。

哦 - 我不是在寻找MVC框架解决方案。我很想你如何学习15门课程并将它们变成一个合适的框架来协同工作。我也很想说明以这种方式发展是多么“愚蠢”。

3 个答案:

答案 0 :(得分:2)

如果你想让所有类都有权访问变量,也许你可以尝试继承,例如

class Settings
{
    var $page_name = "My Page";
    var $database_name = "my_db";
}

然后让所有类继承此类,如

class Page extends Settings
{
    var $id = 0;
    var $template = "";
    function __construct() {}
}

$page = new Page();
echo $page->page_name;

或者您可以将值定义为常量,如果它们是

define("PAGE_NAME", "My Page");

您可以随处访问PAGE_NAME

我不以任何方式说这是正确的方式,它只是 方式。 :)

答案 1 :(得分:0)

我在开发php应用程序时遇到了同样的问题。我最终做的是创建静态方法和静态变量的类。实质上,它们的工作方式有点像名称空间我不确定这是多么“标准”,但它在实践中效果很好。

唯一的另一个选择是创建一个像你在问题中提到的单例,但除非你需要像构造函数和解构器这样的东西,否则imho可能会有点过分。

示例:

<?php
class MyClass{
    private static $my_static_variable;

    static public function myStaticMethod(){
        return self::$my_static_variable;
    }
}

然后您可以在任何地方使用它而无需使用global:

function foo(){
    MyClass::myStaticMethod();
}

class Bar{
    public function myBarMethod(){
        MyClass::myStaticMethod();
    }
}

答案 2 :(得分:0)

我自己一直在考虑同样的事情,并且我可以找到唯一的结论来破解MVC框架并看看它是如何构建的。

另一件事是提到的,从一个超级类开始并从那里继承。

所以有一个类Object,然后将其继承到某个东西等等。