我写了一篇关于"评论"和"回复"程序PHP中的系统。我想学习OOP,所以我将按照SOLID原则将旧代码转换为OOP。在我正在阅读的一本书中,作者说一个班级应该做一个"一个"只有一件事。
在我的评论和回复系统中,我生成了几个" div"元素动态地使用相同的类名但不同的" id' s"。我可以看到here的一个例子。
我想将我的代码分解为函数,以便我可以更轻松地维护它,但是我无法理解执行此操作的最佳方法。例如,我有几个嵌套的div :
<div class="content">
<div class="photoContainer" id="1"> <img src="http://placekitten.com/200/200" /> </div>
<div class="commentReplyContainer" id="1">
<div class="commentBox" id="1">
<form method="post">
<textarea name="comment"></textarea>
<input type="submit" />
</form>
</div>
<div class="commentEven">Hello I am a comment!</div>
</div>
</div>
<div class="content">
<div class="photoContainer" id="2"> <img src="http://placekitten.com/200/300" /> </div>
<div class="commentReplyContainer" id="2">
<div class="commentBox" id="2">
<form method="post">
<textarea name="comment"></textarea>
<input type="submit" />
</form>
</div>
<div class="commentEven">Hello I am another comment!</div>
</div>
</div>
有些divs
会像photoContainer
div一样立即关闭。此外,commentBox
div在内部添加表单后立即关闭。我看到的问题是content
div在其中添加了所有内容后关闭,commentReplyContainer
也是如此。所以,如果我遵循SOLID原则将其转换为OOP代码,我应该有一个生成content
div的类,另一个生成photoContainer
div的类,依此类推?如果我使用该方法,那么我将不得不编写一个生成content
div的类,但不关闭它,生成具有预期内容的photoContainer
div并关闭它,然后有一个被调用的类最后这将关闭content
div。我是否正确,因为这是我能够以我想要的方式嵌套我的div的唯一方法?
<?php
class CreateCommentSystem {
public function generateContentDiv(){
$content = <<<EOF
<div class="content" style="background-color: #302058; width: 100px; height: 200px">
EOF;
echo $content;
}
public function generatePhotoContainer(){
$photoContainer = <<<EOF
<div class="photoContainer" style="background-color: #df5320; width: 40px; height: 20px"> </div>
EOF;
echo $photoContainer;
}
public function closeContentDiv() {
$closeContentDiv = <<<EOF
</div>
EOF;
echo $closeContentDiv;
}
}
?>
然后执行
$divs = new CreateCommentSystem;
$divs->generateContentDiv();
$divs->generatePhotoContainer();
$divs->closeContentDiv();
我是在正确的轨道上还是我的理解完全错了?也许有一种更好的方式,我不知道有人可以指出。我希望我能够很好地解释自己,理解我的要求。
答案 0 :(得分:0)
当您根据SOLID原则查看问题时,您必须以抽象形式查看它。根据您的问题(在评论和回复的HTML中呈现),我会想到几件事:
我给的只是一个例子。例如,应查看Zend/Form实现和API,以了解如何操作和创建元素的好方法。
您应该避免不惜一切代价使用执行“echo”语句的方法,这使得重用结果非常困难。
如果你想学习面向对象的编程,我会建议你坚持创建很多类的强烈意愿,然后去阅读(和使用)一些现有的实现(正确的实现design patterns因此,您可以更好地了解对象及其交互的强大程度,因此在了解它之后,您可以通过创建新类来执行您想要的操作来利用该功能。
面向对象编程尝试以比其他范例非常不同的方式解决问题。 Design patterns通常是如何使用对象解决这些问题的基石,确保您通过它们更好地了解如何构建事物;否则你可能会把自己放在将算法放入方法的循环中,而不是利用OO提供的真正的糖。