在PHP中实例化类或使用静态方法

时间:2015-11-23 01:07:31

标签: php wordpress oop design-patterns

我正在学习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,我感到非常困惑。我们非常感谢一些指导。

1 个答案:

答案 0 :(得分:0)

第一种编码方式有什么问题?

  

缺乏一致性。该类基本上被用作插件命名空间。尝试避免使用所有函数名称污染全局命名空间是值得称赞的,但为函数使用一致的唯一前缀可以完成同样的事情。相反,你最终会得到看起来彼此相关的数据和方法,但实际上最简单的连接是成为同一个插件的一部分。

     

执行不佳的单身人士。每个插件类都需要成为单身人士。具有两个类的实例将导致一系列或多个问题,从低效率(例如,多次运行相同的查询)到可能的冲突,因为插件的第一实例过滤一些数据然后由第二实例重新过滤。我并不是说单身人士天生就是坏人,但他们肯定是过度使用的(维基百科说的是这样!而且,引用“圣经”,“怀疑那些只有一个实例的课程”),当他们是使用时,应谨慎使用,并采取适当的谨慎措施以避免多次使用。

     

代码重用和抽象的障碍。以这种方式创建的类不能真正被细分(尽管我还没有在类前看到最终的关键字),部分原因是上面提到的单例问题,部分是因为没有明确定义类的内容,所以制作更具体的版本是没有意义的。这妨碍了创建抽象以在类似的类之间共享公共代码,并大大增加了任何合理大小的插件的复杂性。

来自Rethinking object oriented wordpress plugins