这是我当前班级的骨架
class JokeTemplates
{
public function CheckTemplateCategory()
{
}
public function SubmitUserTemplates()
{
}
Public function ShowUserUploadedTemplates()
{
}
public function ShowUSerFOrwardedTemplates()
{
}
public function ShowAllTemplates()
{
}
}
将来我可能要设计很多像LoveTemplates,FriendshipTemplates,BirthdayTemplates等等的课程。 其中一些函数如SubmitUserTemplates,ShowUserUploadedTemplates,ShowUSerFOrwardedTemplates可能保持相同,而某些函数的功能如ShowAllTemplates,CheckTemplateCategory等可能会改变。
如果我在所有类中创建所有函数(复制粘贴),将导致巨大的代码冗余。 我应该如何设计我的代码以减少冗余。
答案 0 :(得分:3)
如果我在我的所有类中创建所有函数(复制粘贴),将导致巨大的代码冗余。我应该如何设计我的代码以减少冗余。
这就是inherianceDocs的用途:
您可以根据interfaceDocs定义Templates
类型:
Interface Templates
{
public function CheckTemplateCategory();
public function SubmitUserTemplates();
Public function ShowUserUploadedTemplates();
public function ShowUSerFOrwardedTemplates();
public function ShowAllTemplates();
}
根据接口的实现,您可以创建类型为TemplatesBase
的基本模板(我称之为Templates
)。您可以在此处开始将实际代码编写到函数中:
class TemplatesBase implements Templates
abstract class TemplatesBase implements Templates
{
public function CheckTemplateCategory()
{
...
}
public function SubmitUserTemplates()
{
}
Public function ShowUserUploadedTemplates()
{
}
public function ShowUSerFOrwardedTemplates()
{
}
public function ShowAllTemplates()
{
}
}
最后,您可以从该类扩展,只添加您需要的功能:
class JokesTemplates extends TemplatesBase
{
public function ShowUSerFOrwardedTemplates()
{
throw new TemplatesException('Jokes Templates don't support USerFOrwardedTemplates.');
}
}
答案 1 :(得分:0)
与使用任何其他编程语言的方式相同。如果在整个程序中多次使用完全相同的代码块,则将其置于其自己的函数中。
答案 2 :(得分:0)
如果您将其用作主类。并使用其他类来扩展它。它将使用主类中的函数,除非它们本身已定义。
e.g。如果你把ShowallTempates()放到扩展你的例子的类中,它将使用那个而不是你的例子中的那个。如果你不定义它将使用你的例子中的那个。
如果必须定义这些字段,请使用抽象类。
答案 3 :(得分:0)
使用继承。
创建一个BaseTemplate类。在此基类中实现通用逻辑(即冗余方法)。所有其他模板都应该扩展BaseTemplate类。
答案 4 :(得分:0)
您要求的是继承和功能覆盖的原因。无需过度复杂化:
class TemplatesBase
{
public function checkTemplateCategory()
{
return "Base";
}
public function submitUserTemplates()
{
// ...
}
public function showUserUploadedTemplates()
{
// ...
}
public function showUserForwardedTemplates()
{
// ...
}
public function showAllTemplates()
{
// show all templates
}
}
class JokeTemplates extends TemplatesBase
{
public function checkTemplateCategory()
{
return "Jokes";
}
public function showAllTemplates()
{
// show all joke templates
}
}
class LoveTemplates extends TemplatesBase
{
public function checkTemplateCategory()
{
return "Love";
}
public function showAllTemplates()
{
// show all love templates
}
}