提前感谢您的帮助和指导。我终于完成了从线性编程到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] =>
)
)
我有什么方向可以选择这样的课程以及课程的样子?
由于
答案 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。