实例之间的 PHP 类变量


PHP Class variables between instances

最近我开始尝试做更多基于 OOP 的编程,因为我知道它比过程编程要好得多,但我有一个可能很简单的问题。如果我想实现一个"任务"类,其中每个任务都有一个标题、描述、完成程度以及提交者。我有以下代码来创建类:

class Tasks
{
    public $title;
    public $description;
    public $completionPercent;
    public $contact;
    public function __construct($title, $description, $completionPercent, $contact)
    {
        $this->title = $title;
        $this->description = $description;
        $this->completionPercent = $completionPercent;
        $this->contact = $contact;
    } 
    public function getTitle()
    {
        return $this->title;
    }
    public function getDescription()
    {
        return $this->description;
    }
    public function getCompletionPercent()
    {
        return $this->completionPercent;
    }
    public function getContact()
    {
        return $this->contact;
    }
    public function setTitle($title)
    {
        $this->title = $title;
    }
    public function setDescription($description)
    {
        $this->description = $description;
    }
    public function setCompletionPercent($completionPercent)
    {
        $this->completionPercent = $completionPercent;
    }
    public function setContact($contact)
    {
        $this->contact =$contact;
    }
}

我的问题是,如果我创建一个任务,然后稍后访问它,就像关闭浏览器一样,然后在几天后当我更新它时返回它,我如何存储它并重新访问它。我了解数据库,并在我用来学习的当前站点中经常使用它们,但是当我假设您可以跳过课程并利用数据库时,我不明白将类中的信息存储在数据库中是合乎逻辑的。我读到您可以在文件中序列化或存储 XML/json 并以这种方式访问类,但我再次不明白如果您可以将文件读入数组并以这种方式使用它,为什么您需要该类。我知道OOP很重要,但我仍然只是试图让它达到我可以开始定期使用类的地方,以便我可以熟悉它们并作为一名程序员进步。我相信网上有很多关于他的阅读,但我只是不断找到关于在会话变量中存储类变量的东西,这不是我想要的。让我知道是否有我可以澄清的地方,我知道当我第一次上课时我会做类似$task1 = new Task(...);的事情,但是关闭浏览器并重新登录后,我仍然无法访问$task1正确吗?我不能只做$task1->getTitle();那么如何重新初始化类?

类和对象可帮助您将代码和逻辑组织成自包含单元。仅此而已。这一点非常重要。它没有解决存储或其他任何问题。

是的,您仍将对象的数据存储在数据库中,然后再次从数据库中读取并再次创建对象实例。

input → new Task(..) → store object data in database
read data from database → new Task(..) → display on website

为什么这比直接使用数据库中的数组更好?因为它可以让你更好地组织你的代码。即使对象的生存期只是几分之一秒,在该部分内,使用该对象的所有代码都可以编写得更优雅,最重要的是类型安全,因为它清楚地定义了该对象的外观。数组是一个非类型化的抓包,你的应用程序变得越复杂,它就很难处理。特别是重构仅使用数组的代码非常非常困难。

你是对的,你需要将这些信息存储在某个地方,而正确的地方是db。所以,问题是:如果可以直接将其保存在数据库中,为什么需要使用和创建类"Task"。因为你想基于"类和对象"构建应用程序,所以不要像你说的那样使用过程编程。因此,您需要使用对象并为所有内容创建类,以便拥有完全的OO应用程序。

因此,您的应用程序应该基于类/对象,这就是您和其他一些开发人员将使用的内容。现在,您只需要将这些数据从该对象保存到数据库中。这意味着,您需要为此引入一些额外的层。一个非常好的是教义ORM。它执行映射并将您的对象转换为数据库。通常每个类在db中都有自己的表,类中的每个字段在db中都有自己的列(这仅适用于需要保存在db中的类)

关键是,您可以像使用任何其他对象一样轻松地使用应用程序中的对象,而无需知道如何将它们保存在 db(或其他地方)中。您唯一需要做的是:

$task->save();

仅此而已。该任务将保存在数据库中。