PHP初学者OOP构建一个对象

时间:2012-11-16 19:24:10

标签: php

提前感谢您的帮助和指导。我终于完成了从线性编程到OOP的转换。我正在上第一堂课,我可以用一点方向。我的第一堂课是一个具有以下属性的画廊

class Gallery
    {
        //Gallery Name
        public $galleryID;
        public $galleryName;

        //Client Name
        public $clientName;

        //Gallery Options
        public $bg_color;
        public $albumAgreement;
        public $maxChanges;
        public $sharing_on;

        //Revisions
        public $revisions;
}

我的出局因此看起来像:

Gallery Object
(
    [galleryID] => 
    [galleryName] => 
    [clientName] => 
    [bg_color] => 
    [albumAgreement] => 
    [maxChanges] => 
    [sharing_on] => 
    [revisions] => 
)

我的下一步是我想将'修订'作为一个对象,以便我的输出看起来像

Gallery Object
(
    [galleryID] => 
    [galleryName] => 
    [clientName] => 
    [bg_color] => 
    [albumAgreement] => 
    [maxChanges] => 
    [sharing_on] => 
    [revisions] => Revisions Object (
        [revisionID] =>
        [revisionName] =>
    )
)

我有什么方向可以选择这样的课程以及课程的样子?

由于

3 个答案:

答案 0 :(得分:10)

好的是PHP是动态类型的,因此您的代码几乎保持不变。初始化revisions时,只需将其初始化为Revisions对象的实例,就像这样

$gallery = new Gallery();
$gallery->revisions = new Revisions()  // assuming you have defined the Revisions class

至于类应该是什么样的,基于你的var_dump,就像这样:

class Revisions {
  public $revisionID;
  public $revisionName;

  public function __construct($id, $name) {
     $this->revisionID = $id;
     $this->revisionName = $name;
  }

  // if required, define a default constructor as well that does not take any parameters

}

由于您的问题并不完全清楚revisions所做的事情,您可能想要制作一个Revision对象而不是Revisions(不是复数形式),然后{{1}是$gallery->revisions的数组。

答案 1 :(得分:0)

基本上,您正在为Revisions创建一个单独的类,就像您为Gallery所做的那样。

class Gallery
{
    //Gallery Name
    public $galleryID;
    public $galleryName;

    //Client Name
    public $clientName;

    //Gallery Options
    public $bg_color;
    public $albumAgreement;
    public $maxChanges;
    public $sharing_on;

    //Revisions
    public $revisions;
}
class Revisions {
    public $revisionID;
    public $revisionName;
}

//Set the revisions within gallery
$gallery = new Gallery();
$gallery->revisions = new Revisions();

答案 2 :(得分:0)

对安装者和吸气剂或构造者进行一些研究。我将使用下面的每个具有相同最终结果的示例。

class Gallery
{
    //Gallery Name
    protected $galleryID;
    protected $galleryName;

    //Client Name
    protected $clientName;

    //Gallery Options
    protected $bg_color;
    protected $albumAgreement;
    protected $maxChanges;
    protected $sharing_on;

    //Revisions
    protected $revisions;


    public function setGalleryID($id)
    {
         $this->galleryID = $id;
    }

    public function getGalleryID()
    {
         return $this->galleryID;
    }

    public function setRevisions(Revisions $revisions)
    {
         $this->revisions = $revisions;
    }

    public function getRevisions()
    {
         return $this->revisions;
    }
}

$gallery = new Gallery();
$gallery->setRevisions(new Revisions());
var_dump($gallery->getRevisions());

或使用构造函数

class Gallery
{
    //Gallery Name
    protected $galleryID;
    protected $galleryName;

    //Client Name
    protected $clientName;

    //Gallery Options
    protected $bg_color;
    protected $albumAgreement;
    protected $maxChanges;
    protected $sharing_on;

    //Revisions
    protected $revisions;


    public function __construct($id, Revisions $revisions)
    {
         $this->galleryID = $id;
         $this->revisions = $revisions;
    }

    public function getGalleryID()
    {
         return $this->galleryID;
    }

    public function getRevisions()
    {
         return $this->revisions;
    }
}

$gallery = new Gallery(1, new Revisions());
var_dump($gallery->getRevisions());

通过这种方式,您可以更好地控制进入的内容,出现的内容,只读(gettable),只写(可设置)或两者。例如,在setter中,您可以看到Revisions是在$ revision之前编写的。这可确保只有Revisions对象可以设置为$ this-> revisions。