我已经看到一些PHP类定义,其中包含许多与实际类似乎无关(或者至多松散相关)的方法。例如:
class Dog {
public $var;
public function __construct() {}
public function eat() {
// Code here is relevant to dog.
}
public function sleep() {
// Code here is relevant to dog.
}
public function play() {
// Code here is relevant to dog.
}
public function pay_milkman() {
// The code here isn't really related to the life of a dog but is useful in the rest of the project.
}
public function go_to_work() {
// The code here isn't really related to the life of a dog but is useful in the rest of the project.
}
etc...
}
让一个班级做一切或者我应该编写更模块化的代码是一种好习惯吗?
如果您能在任何可能提供的答案中解释为什么,我将不胜感激。
答案 0 :(得分:1)
狗不支付牛奶,也不支付(通常)工作,因此这些功能不应该属于Dog类。这些功能会出现在像Person
这样的类中,它可能通过两类之间的关系拥有一只或多只狗,即:
class Person {
public $dogs;
public function buy_dog() {
$dog = new Dog;
$this->dogs[] = $dog;
}
}
答案 1 :(得分:1)
我认为你的班级只需要一些专门的案例:
class Dog {
public $var;
public function __construct() {}
public function eat() {
// Code here is relevant to dog.
}
public function sleep() {
// Code here is relevant to dog.
}
public function play() {
// Code here is relevant to dog.
}
}
class ExtremelySmartAndWellTrainedDog extends Dog {
public function pay_milkman() {
// Code here is relevant to a well-trained dog
}
}
class SheepDog extends Dog {
public function go_to_work() {
// Code here is what sheepdogs do
}
}
当然,如果有可能让智能/训练有素的狗和工作,那么我会在特征中实现这些方法。
答案 2 :(得分:0)
根据我的理解,你在询问是否在课堂上使用大量功能是一种不好的方法。在我看来,这取决于。在开发面向对象的应用程序时,我总是想到我可以用于该类的所有可能的函数/方法。
还有更多。例如,有飞行的鸟类和其他没有飞行的鸟类,因此我的面向对象的方法如下:
class Bird
{
public $canfly;
public function __construct($canfly)
{
$this->canfly = $canfly;
}
public function canFly()
{
return $this->canfly;
}
}
企鹅是一只鸟,但不会飞。
class Penguin extends Bird
{
public function canFly()
{
// return parent::canFly(); <- Original Property from parent.
return false; // Override
}
}
测试课程
$class = new Penguin(false);
if($class->canFly() == false)
{
print("Bird can't Flye");
}
那里有很多例子。点击here获取非常好的教程。