ใช้คลาสแทนฟังก์ชั่นระดับโลกใน 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 ใน function.php
Mamaduka

คำตอบ:


9

การใช้คลาสสำหรับการห่อหุ้มเป็นวิธีการทั่วไปโดยนักพัฒนาซอฟต์แวร์จำนวนมากสำหรับปลั๊กอิน ฉันทำสิ่งนี้และฉันพบว่ามันสะอาดกว่า แต่สำหรับปลั๊กอิน ชุดรูปแบบมีขั้นตอนเพิ่มเติมตามธรรมชาติ

เราไม่ได้ทำเพื่อธีม WordPress เริ่มต้นเพราะมันเป็นอุปสรรคต่อการเข้า ฟังก์ชั่นค่อนข้างง่าย การลบการกระทำที่ผูกติดกับชั้นเรียนอาจเป็นเรื่องยาก (และอาจมีข้อผิดพลาดในบางสถานการณ์)

นอกจากนี้จำนวนฟังก์ชั่นในชุดรูปแบบเริ่มต้นสามารถเสียบได้ การขยายคลาสและการแทนที่เมธอดนั้นซับซ้อนกว่าการนิยามฟังก์ชัน และในขณะที่โค้ดสองด้านที่แตกต่างกันสามารถแทนที่ฟังก์ชั่นที่แตกต่างกันคุณไม่สามารถขยายคลาสได้แบบไดนามิก ในขณะที่คุณชี้ให้เห็นความจำเป็นที่จะต้องขยายชั้นผู้ปกครองเป็นข้อเสียอย่างแน่นอน

ฉันถือว่าการสร้างรหัสตัวเลือกชุดรูปแบบของ Twenty Eleven แต่ไม่เคยไปถึงมัน ฟังก์ชั่นที่แยกออกมาคล้ายปลั๊กอินนั้นดูเหมือนจะเป็นตัวเลือกที่ดีสำหรับการห่อหุ้ม


ขอบคุณสำหรับคำตอบ Nacin ฉันไม่ได้คิดเกี่ยวกับความยากลำบากในการกระทำ "ปลดล็อค" กับชั้นเรียน เกี่ยวกับการห่อหุ้มตัวเลือก - เราได้คิดในสิ่งเดียวกัน: github.com/jestro/struts
Andy Adams
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.