PHP - 静态类和缓存类

3
下面的代码展示了我在Java中如何缓存对象。
class Account{
    private static ArrayList<Account> accounts = new ArrayList<Account>(); //Array that holds Account objects
    private String username; //Unique Name or Username

    public Account(String username) { // constructor
        this.username = username;
        Account.accounts.add(this); //Add object to accounts Array
    }

    public String getUsername() { 
        return this.username; // Return username
    }

    public Account getAccount(String username) { //Get object "Account" with username
        for (Account acc: Account.accounts) { //Foreach loop that loop over all accounts from the Array
            if (acc.getUsername() == username) return acc; // Return Account object if given username == object's username
        }
        return null;
    }
}

我已经注释过了,如果您不懂Java,那么这将有意义,但是Java OOP与PHP OOP类似。
从上面的Java代码中,我可以将所有对象保存在数组中,因此它不会一直查询数据库。 1) 我想知道是否可以使用PHP做类似的事情来加速代码并缓存类。如果可能,请给我一个示例。如果不行,那么最好的方法是什么? 2) 在面向对象编程时,有哪些良好的实践方法可以使内存使用率低?
提前感谢您。

1
你应该意识到 PHP 脚本只在请求的生命周期内“存在”,对吧?如果你想要保留缓存,你需要使用外部机制,比如 memcache 或静态文件。 - Ja͢ck
哦,我以为我让PHP类静态化了。如果我在这里说了胡话,我很抱歉,因为我对PHP还比较新。 - Dan Nite
我认为如果对这个问题进行解释的话会很好,因为它是PHP新手的好资源。 - Andy Librian
是的,解释一下会很好。现在我知道它不会像Java那样工作。我应该怎么做呢?或者我应该创建一个新的账户类,并在每次页面重新加载或用户转到需要账户类的另一个页面时查询数据库? - Dan Nite
假设这是一个需要登录系统的服务,您可以将帐户存储在会话中。 - Ja͢ck
1个回答

1
Java应用程序和PHP应用程序最大的区别在于,Java通常是一个不断运行的程序,可以同时处理多个传入连接,而PHP实例则由托管Web服务器为每个单独的请求启动和关闭。这意味着您加载的任何类、实例化的对象或分配的变量只有若干毫秒的生命周期(在一个相当快的应用程序中)。静态类属性与Java中的工作方式相同,但整个应用程序在几毫秒后被关闭,因此这不能作为长期缓存。更重要的是,每个单独的HTTP请求都是其自己独立的线程,因此在一个线程中分配某些内容不会使它在任何其他同时或随后的线程中可见。
要跨请求缓存某些内容,您需要一个外部数据存储。对此,您有许多选项,具体取决于您最适合的情况:

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接