เมื่อมีการพัฒนาปลั๊กอินควรมีการจัดกลุ่มฟังก์ชั่นเข้าด้วยกันเป็น Class เพื่อหลีกเลี่ยงความขัดแย้งของ namespace หรือไม่?
ใช่ แต่นั่นเป็นเพียงหนึ่งในข้อโต้แย้งเล็กน้อย ในความเป็นจริงที่ไม่ธรรมชาติ "จริง" ของชั้นในOOAD
การใช้คลาสสร้างค่าใช้จ่ายด้านประสิทธิภาพสำหรับ PHP หรือไม่
ไม่สะดุดตา การออกแบบที่ไม่ดีและ / หรือการเขียนโค้ดที่ไม่ดีหรือการปรับให้เหมาะสมล่วงหน้านั้นจะสร้างปัญหาด้านประสิทธิภาพมากกว่าฟีเจอร์ภาษาที่แท้จริง
หากมีการเข้าชมประสิทธิภาพชื่อฟังก์ชันควรได้รับการแก้ไขล่วงหน้าแทนหรือไม่
ตามที่เขียนไว้ไม่มีการเข้าชมที่มีประสิทธิภาพ โค้ดที่ไม่ถูกต้องจะเป็นการเพิ่มประสิทธิภาพมากกว่าโค้ดที่เขียนได้ดีซึ่งมีโค้ดมากกว่าหนึ่งบรรทัด แต่ไม่ได้บังคับให้คุณทำสิ่งที่ไม่ดี
บรรทัดล่างสุด:
คุณสามารถใช้คลาสต่าง ๆ สำหรับปลั๊กอินได้ คุณสามารถใช้เพื่อให้มีเนมสเปซบางประเภทและใช้ "เพียง" สำหรับฟังก์ชั่นทั่วโลก รูปแบบที่ตรงที่สุดของฟังก์ชั่นคลาคงที่ตัวอย่างรหัสต่อไปนี้แสดงให้เห็นถึงทั้งฟังก์ชั่นระดับโลกครั้งแรกแล้วฟังก์ชั่นระดับคงที่ทั่วโลก:
/* global function */
function myplug_hook()
{
}
add_filter('the_hook', 'myplug_hook');
/* global static function */
class myplug
{
public static function hook()
{
}
}
add_filter('the_hook', 'myplug::hook');
นี่เป็นเพียงตัวอย่างเล็ก ๆ น้อย ๆ ที่แสดงว่าคุณต้องพิมพ์เพิ่มเติมสำหรับเบ็ดเดียว นอกจากนี้ยังแสดงวิธีการทำงานของการกำหนดเนมสเปซ: คุณสามารถแทนที่ชื่อคลาสเดี่ยวได้ง่ายขึ้นเพื่อเปลี่ยนชื่อฟังก์ชั่นสแตติกทั้งหมดจากนั้นค้นหาและแทนที่myplug::
ซึ่งอาจยากกว่าด้วยmyplug_
เนื่องจากผลบวกปลอม แต่ในท้ายที่สุดก็ไม่แตกต่างกันมาก
จุดสำคัญคือระดับคงที่ฟังก์ชั่นเอกสารไม่ได้จริงๆมากอื่นแล้วฟังก์ชั่นระดับโลกเอกสาร
และตัวอย่างนี้แสดงให้เห็นเช่นกัน: Namespacing นั้นใช้ได้ แต่ด้วย worpdress การกำหนด namespaces จะหยุดด้วยการใช้ hooks: ฟังก์ชันการโทรกลับจะถูกเข้ารหัสยากดังนั้นประโยชน์ในการกำหนดเส้นทางโดยใช้คลาส (ที่เดียวสำหรับชื่อฐาน, classname) ไม่ ช่วยเมื่อคุณแทรกแซงรหัสด้วย wordpress สำหรับชื่อเบ็ด
ประโยชน์ที่แท้จริงเริ่มต้นด้วยการใช้อินสแตนซ์ของคลาสจริงและฟังก์ชันที่ไม่คงที่ สิ่งนี้มีประโยชน์ที่คุณสามารถเริ่มใช้หลักการ OO และคุณสามารถปรับปรุงรหัสของคุณ ฟังก์ชั่นคลาสแบบสแตติกนั้นมีปัญหามากกว่าทางแก้ปัญหา
แล้วมันเป็นมากกว่าแค่น้ำตาลทราย
จุดสำคัญคือทำสิ่งที่ช่วยให้คุณเขียนรหัสที่คุณสามารถจัดการและดูแลรักษาได้ง่าย อย่าให้คะแนนมากเกินไปนั่นเป็นข้อผิดพลาดทั่วไป ที่สำคัญกว่านั้นคือคุณเขียนโค้ดที่อ่านและเข้าใจได้ง่ายนั่นเป็นสิ่งที่คุณต้องการ บางทีคำถามและคำตอบนี้อาจมีประโยชน์สำหรับรูปภาพขนาดใหญ่ในบริบทนี้: วิธีใช้ Metabox แบบกำหนดเองหลายรายการ
วิธีการทั่วไปหนึ่งที่ฉันมีแม้จะมีปลั๊กอินขนาดเล็กก็คือการใช้ฟังก์ชั่นตัวช่วยแบบคงที่เพื่อยกตัวอย่างปลั๊กอินและส่วนที่เหลืออยู่ในอินสแตนซ์ปลั๊กอินแล้ว สิ่งนี้ช่วยในการสรุปแค็ปซูลลอจิกหลักและได้รับประโยชน์จากการตั้งชื่อด้วย hooks และสมาชิกส่วนตัวสามารถนำกลับมาใช้ใหม่ได้ระหว่าง hooks ซึ่งไม่สามารถทำได้ด้วยฟังก์ชั่นมาตรฐานระดับโลก ตัวอย่างโค้ดต่อไปนี้แสดงรูปแบบ:
<?php
/** Plugin Headers ... */
return MyPlugin::bootstrap();
class MyPlugin
{
/** @var MyPlugin */
static $instance;
static public function bootstrap() {
if (NULL === self::$instance) {
self::$instance = new __CLASS__;
}
return self::$instance;
}
# ...
}
นี่เป็นรูปแบบทั่วไปที่ฉันใช้สำหรับไฟล์ปลั๊กอินพื้นฐาน คลาสปลั๊กอินในมือข้างหนึ่งแสดงให้เห็นถึงปลั๊กอินไปยัง wordpress และในทางกลับกันจะช่วยให้เริ่มใช้กระบวนทัศน์เชิงวัตถุสำหรับรหัสของตัวเองซึ่งสามารถแม้กระทั่งวัตถุที่มุ่งเน้นอย่างสมบูรณ์ (แต่ไม่จำเป็นต้อง) มันเป็นคอนโทรลเลอร์ที่เชื่อมต่อกับ wordpress API ทั้งหมดตามที่ร้องขอ
ดังตัวอย่างที่แสดงอินสแตนซ์ของปลั๊กอินจะถูกสร้างขึ้น วิธีนี้ช่วยให้คุณสามารถใช้งานคอมมอนส์ที่รู้จักกันดีเช่นConstructor Docs ( __construct
)เพื่อเริ่มต้นปลั๊กอินจริง:
# ...
class MyPlugin
{
# ...
public function __construct()
{
add_filter('the_hook', array($this, 'hook'));
}
public function hook()
{
}
# ...
}
ในขณะที่เบ็ดมีการลงทะเบียนวัตถุปลั๊กอินนี้แล้วผลประโยชน์จากมันออกแบบ: คุณได้หยุดที่จะยากรหัสฟังก์ชั่นที่เกิดขึ้นจริงกับเบ็ดปลั๊กอินคอนกรีตClassName เป็นไปได้เนื่องจากการเชื่อมโยงคลาสกับอินสแตนซ์วัตถุสำหรับการโทรกลับ ฟังดูซับซ้อนแค่บอกว่า: $this
เป็นปลั๊กอิน สามารถนำมาใช้ในการเรียกกลับเบ็ดเปรียบเทียบวิธีการลงทะเบียนชั้นเป็นเรียกกลับเบ็ด
รูปแบบนี้ช่วยให้สามารถเชื่อมต่อกับ wordpress ได้ง่ายขึ้น: การฉีดลดลงไปยังชื่อ hooks และข้อมูลที่ให้ จากนั้นคุณสามารถเริ่มนำไปใช้โดยตรงในคลาสปลั๊กอินนี้หรือเพื่อปรับโครงสร้างการใช้งานของคุณอีกครั้งดังนั้นการใส่โค้ดลงในคลาสปลั๊กอินที่น้อยที่สุดในการกำหนดอินเทอร์เฟซปลั๊กอินของคุณกับเวิร์ดเพรส นี่คือที่ที่ความสนุกเริ่มต้นและส่วนใหญ่อาจเป็นสิ่งที่ผู้เขียนปลั๊กอินแต่ละคนต้องการที่จะประสบความสำเร็จในระยะยาว
ดังนั้นอย่าตั้งโปรแกรมด้วย worpdress แต่ขัดกับมัน เนื่องจาก worpdress นั้นค่อนข้างยืดหยุ่นจึงไม่มีคำอธิบายทั่วไปหรืออินเตอร์เฟสที่ใช้อธิบายโปรแกรมได้ง่ายนัก คลาสปลั๊กอินพื้นฐานสามารถทำหน้าที่นี้ช่วยให้คุณมีความยืดหยุ่นมากขึ้นสำหรับโค้ดของคุณเองซึ่งจะนำไปสู่โค้ดที่ง่ายขึ้นและประสิทธิภาพที่ดีขึ้น
ดังนั้นมีมากกว่าประโยชน์สำหรับการเว้นวรรคชื่อ ข้อเสนอแนะที่ดีที่สุดที่ฉันสามารถให้คือลองตัวคุณเอง มีไม่มากที่คุณจะสูญเสียเพียงสิ่งใหม่ที่จะค้นพบ
คุณอาจสังเกตเห็นความแตกต่างหลังจากที่คุณผ่านการอัปเดตที่สำคัญมากขึ้นของ wordpress ในขณะที่ทำให้ปลั๊กอินของคุณเข้ากันได้
Caveat : หากปลั๊กอินของคุณทำงานร่วมกับ wordpress โดยตรงเพื่อให้งานสำเร็จการใช้ฟังก์ชันสาธารณะหนึ่งหรือสองฟังก์ชั่นอาจเหมาะกับคุณมากกว่า ใช้เครื่องมือที่เหมาะสมสำหรับงาน