【问题标题】:Basic Oriented Object Modelization in PHP5PHP5 中的基本面向对象建模
【发布时间】:2011-01-11 16:44:37
【问题描述】:

我使用 zend 框架,我想听听您对我的类建模的建议。 我有 3 个类 Patrimony.php Project.php 和 Version.php。 版本扩展项目扩展 Patrmimony。 另一方面,我有这样的文件夹结构/data/patrimonies/projects/versions/

我不知道我是否必须使用设计模式或类似的东西,如果 patrimony 有一个包含项目实例的变量 $_project,我如何实例化我的类 (__construct() params)。简而言之,我对 OOP 感到非常困惑。

请点亮我:-)

class Admin_Model_Patrimony { }

class Admin_Model_Project extends Admin_Model_Patrimony { }

class Admin_Model_Version extends Admin_Model_Project { }

【问题讨论】:

  • 我真的不明白你的问题。但请注意,继承可能不是最好的解决方案。组成可能会更好。例如。 Version 的目的是什么?如果一个项目可以存在多个版本,我会将其设计为一个组合。
  • 好的,谢谢提示,我会看看这个模式。

标签: php zend-framework oop


【解决方案1】:

我查看了构图模式,当您想用不同数量的叶子进行构图时似乎很有趣。就我而言,任何实体总是有一个遗产一个项目和一个版本。

我的目标是有时我只使用有关遗产的信息,有时我只需要有关项目的信息。

我向您展示了我是如何设计我的类的,请参阅执行过程和预期值的最后几行。 我认为这段代码不起作用,那么当我实例化一个孩子时如何设置父母的变量?

// Version
class Version extends Project
private $this->_patId;
private $this->_proId;
private $this->_verId;
{
public function __contruct($patrimonyId, $projectId, $versionId)
{
$this->_patId = $patrimonyId;
$this->_proId = $projectId;
$this->_verId = $versionId;
}
public function getVersionId()
{
return $this->_verId;
}

// Project
class Project extends Patrimony
private $this->_patId;
private $this->_proId;
{
public function __contruct($patrimonyId, $projectId)
{
$this->_patId = $patrimonyId;
$this->_proId = $projectId;
}
public function getProjectId()
{
return $this->_proId;
}

// Patrimony
class Patrimony
private $this->_patId;
{
public function __contruct($patrimonyId)
{
$this->_patId = $patrimonyId;
}
public function getPatrimonyId()
{
return $this->_patId;
}

// Execution
$version = new Version(1,2,3);
$version->getVersionId(); // should return 1
$version->getProjectId(); // should return 2
$version->getPatrimonyId(); // should return 3

【讨论】:

    猜你喜欢
    • 2013-10-25
    • 1970-01-01
    • 2012-10-02
    • 2012-12-17
    • 2012-03-03
    • 1970-01-01
    • 2015-12-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多