最近我开始尝试做更多基于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();
所以如何重新初始化课程?
答案 0 :(得分:2)
类和对象可帮助您将代码和逻辑组织到自包含单元中。就这些。这非常重要。它没有解决存储问题或其他任何问题。
是的,您仍然会将对象的数据存储在数据库中,然后再从数据库中读取并再次创建对象实例。
input → new Task(..) → store object data in database
read data from database → new Task(..) → display on website
为什么这比直接使用数据库中的数组更好?因为它允许您更好地组织代码。即使对象的生命周期只是一小部分,在该部分中,使用该对象的所有代码都可以更优雅地编写,并且最重要的是类型安全,因为它明确定义了什么对象看起来像。数组是一个无类型抓包的东西,很难处理你的应用程序变得越复杂。特别是只使用数组的重构代码非常困难。
答案 1 :(得分:1)
你是对的,你需要在某个地方存储这样的信息,而正确的地方就是db。所以,问题是:为什么你需要使用和创建类"任务"如果你可以直接将其保存在db中。因为你想基于"类和对象构建应用程序,所以不要像你说的那样使用过程式编程。因此,您需要使用对象并为所有内容创建类,以便具有完全OO应用程序。
因此,您的应用程序应该基于类/对象,这是您和其他一些开发人员将使用的。现在您只需要将该数据从该对象保存到数据库中。这意味着,您需要为此引入一些额外的层。一个非常好的是Doctrine ORM。它确实映射并将您的对象转换为db。通常每个类在db中都有自己的表,并且类中的每个字段在db中都有自己的列(这仅适用于需要保存在db中的类)
关键是,您可以像在任何其他对象中一样轻松地使用应用程序中的对象,而不知道应该如何在db(或其他位置)中保存它们。只有你需要做的是:
$task->save();
就是这样。该任务将保存在db。
中