在Functions.php中使用类而不是全局函数


11

在我见过的许多主题(包括TwentyEleven)中,以及在网上找到的示例中,functions.php为主题创建文件时,所有功能都在全局范围内声明。为了澄清,这是典型的函数文件的外观:

function my_theme_do_foo() { // ... }

function my_theme_do_bar() { // ... }

add_action( 'foo_hook', 'my_theme_do_foo' );

在我看来,如果使用一个类,可以将事情“封装”得更好:

class MyTheme {
    function do_foo() { // ... }
    function do_bar() { // ... }
}

$my_theme = new MyTheme();

add_action( 'foo_hook', array( &$my_theme, 'do_foo' ) );

第二种方法的优点(以我卑微的眼光):

  • 较短的函数名称
  • 访问实例变量(IMO的最大优势)
  • 没有全局功能

缺点:

  • 类名仍可能导致冲突
  • 用子主题“自定义”还不太清楚(必须扩展父类)
  • 大多数主题都没有这样做,所以您会逆势而上

我可能忽略了一些事情,但是我想知道为什么不采用OOP方法?如果有的话,对我来说有点“干净”。也许我弄错了?

我对WordPress主题开发还很陌生,所以如果这是WP社区中的常识,请原谅我。只是想了解为什么事情就是这样。


-你可以从Kovshenin检查主题wordpress.org/extend/themes/profile/kovshenin他使用OOP方法中的functions.php
Mamaduka

Answers:


9

使用类进行封装是许多开发人员用于插件的非常常用的方法。我做到了,我发现它更干净。但是对于插件。本质上,主题更具程序性。

对于默认的WordPress主题,我们不这样做,因为它增加了进入的障碍。功能非常简单。删除与类相关联的动作可能很困难(在特定情况下可能会引起错误)。

同样,默认主题中的许多功能都是可插入的。扩展类并替换方法远比仅定义函数复杂得多。虽然代码的两个不同方面可以替换不同的功能,但是您不能动态扩展类。正如您所指出的,扩展父类绝对是不利的。

我考虑过让二十一十一的主题选项编码为一门课程,但从未尝试过。这种独立的,类似于插件的功能似乎是封装的理想选择。


谢谢你的回答,纳辛。我没有考虑过“解开”课堂活动的难度。关于选项封装-我们一直在思考同一件事:github.com/jestro/struts
Andy Adams
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.