我正在学习OOP,我正在创建一个WordPress插件。我查看了一堆不同的流行WordPress插件,他们都使用不同的编码风格和方法来实现相同的功能。
我创建了下面的精简函数作为示例。一些插件将使用一种样式,而其他插件将使用其他插件。
该功能是在WordPress后期编辑屏幕中简单地打印出3个按钮。什么被认为是正确/首选/最佳方式?
function sliced_print_buttons( $id ) {
$emails = new Sliced_Emails();
$pdf = new Sliced_Pdf();
$admin = new Sliced_Admin();
$email_button = $emails->get_email_button( $id );
$pdf_button = $pdf->get_pdf_button( $id );
$convert_button = $admin->get_convert_invoice_button( $id );
echo $email_button;
echo $print_button;
echo $convert_button;
}
如上所述实例化3个不同的类?
function sliced_print_buttons( $id ) {
$email_button = Sliced_Emails::get_email_button( $id );
$pdf_button = Sliced_Pdf::get_pdf_button( $id );
$convert_button = Sliced_Admin::get_convert_invoice_button( $id );
echo $email_button;
echo $print_button;
echo $convert_button;
}
使用静态方法打印上面的按钮?
function sliced_print_buttons( $id ) {
echo email_button();
echo print_button();
echo convert_button();
}
或创建可以打印按钮的单独功能?
通过所有不同的WordPress插件并阅读OOP,我感到非常困惑。我们非常感谢一些指导。
答案 0 :(得分:0)
第一种编码方式有什么问题?
缺乏一致性。该类基本上被用作插件命名空间。尝试避免使用所有函数名称污染全局命名空间是值得称赞的,但为函数使用一致的唯一前缀可以完成同样的事情。相反,你最终会得到看起来彼此相关的数据和方法,但实际上最简单的连接是成为同一个插件的一部分。
执行不佳的单身人士。每个插件类都需要成为单身人士。具有两个类的实例将导致一系列或多个问题,从低效率(例如,多次运行相同的查询)到可能的冲突,因为插件的第一实例过滤一些数据然后由第二实例重新过滤。我并不是说单身人士天生就是坏人,但他们肯定是过度使用的(维基百科说的是这样!而且,引用“圣经”,“怀疑那些只有一个实例的课程”),当他们是使用时,应谨慎使用,并采取适当的谨慎措施以避免多次使用。
代码重用和抽象的障碍。以这种方式创建的类不能真正被细分(尽管我还没有在类前看到最终的关键字),部分原因是上面提到的单例问题,部分是因为没有明确定义类的内容,所以制作更具体的版本是没有意义的。这妨碍了创建抽象以在类似的类之间共享公共代码,并大大增加了任何合理大小的插件的复杂性。