แม้ว่าคุณจะพัฒนาโปรแกรม PHP ขนาดใหญ่ตัวใหม่ คุณจะใช้ข้อมูลทั่วโลกอย่างหลีกเลี่ยงไม่ได้ เนื่องจากข้อมูลบางส่วนจะถูกใช้ในส่วนต่างๆ ของโค้ดของคุณ ข้อมูลส่วนกลางทั่วไปบางส่วนได้แก่: คลาสการตั้งค่าโปรแกรม, คลาสการเชื่อมต่อฐานข้อมูล, ข้อมูลผู้ใช้ ฯลฯ มีหลายวิธีในการทำให้ข้อมูลนี้เป็นข้อมูลทั่วโลก วิธีที่ใช้กันมากที่สุดคือการใช้การประกาศคำหลัก "ทั่วโลก" ซึ่งเราจะอธิบายรายละเอียดในบทความต่อไป
ข้อเสียเพียงอย่างเดียวของการใช้คีย์เวิร์ด "global" เพื่อประกาศข้อมูลทั่วโลกก็คือ จริงๆ แล้วมันเป็นวิธีการเขียนโปรแกรมที่แย่มาก และมักจะนำไปสู่ปัญหาที่ใหญ่กว่าในโปรแกรมในภายหลัง เนื่องจากข้อมูลส่วนกลางจะแยกโค้ดของคุณออกจากกัน ส่วนโค้ดทั้งหมดจะเชื่อมโยงกัน ร่วมกัน ดังนั้นหากเปลี่ยนโค้ดส่วนหนึ่งอาจทำให้ส่วนอื่นผิดพลาดได้ ดังนั้นหากโค้ดของคุณมีตัวแปรส่วนกลางจำนวนมาก โปรแกรมทั้งหมดของคุณก็จะรักษาได้ยาก
บทความนี้จะแสดงวิธีการป้องกันปัญหาตัวแปรทั่วโลกผ่านเทคนิคหรือรูปแบบการออกแบบต่างๆ แน่นอน อันดับแรกเรามาดูวิธีใช้คำหลัก "ทั่วโลก" สำหรับข้อมูลทั่วโลกและวิธีการทำงาน การใช้ตัวแปรโกลบอลและคีย์เวิร์ด "global"
PHP จะกำหนดตัวแปร "Superglobals" บางตัวตามค่าเริ่มต้น ตัวแปรเหล่านี้จะถูกทำให้เป็นโกลบอลไลซ์โดยอัตโนมัติและสามารถเรียกได้ทุกที่ในโปรแกรม เช่น $_GET และ $_REQUEST เป็นต้น โดยปกติจะมาจากข้อมูลหรือข้อมูลภายนอกอื่นๆ และการใช้ตัวแปรเหล่านี้มักจะไม่ทำให้เกิดปัญหาเนื่องจากโดยพื้นฐานแล้วไม่สามารถเขียนได้
แต่คุณสามารถใช้ตัวแปรโกลบอลของคุณเองได้ การใช้คำหลัก "ทั่วโลก" คุณสามารถนำเข้าข้อมูลทั่วโลกเข้าสู่ขอบเขตท้องถิ่นของฟังก์ชันได้ หากคุณไม่เข้าใจ "ขอบเขตการใช้งานตัวแปร" โปรดดูคำแนะนำที่เกี่ยวข้องในคู่มือ PHP
ต่อไปนี้เป็นตัวอย่างสาธิตการใช้คำหลัก "global"
ต่อไปนี้เป็นเนื้อหาที่ยกมา:
<?php
$my_var = 'สวัสดีชาวโลก';
test_global();
ฟังก์ชั่น test_global() {
// ขณะนี้อยู่ในขอบเขตท้องถิ่น
// ไม่มีตัวแปร $my_var
// เกิดข้อผิดพลาด: "ตัวแปรที่ไม่ได้กำหนด: my_var"
เสียงสะท้อน $my_var;
// ทีนี้มาความสำคัญของตัวแปรกันดีกว่า
ทั่วโลก $my_var;
// ทำงาน:
เสียงสะท้อน $my_var;
-
?>
ดังที่คุณเห็นในตัวอย่างข้างต้น คีย์เวิร์ด "global" ใช้เพื่อนำเข้าตัวแปรส่วนกลาง ดูเหมือนว่าจะทำงานได้ดีและเรียบง่าย แล้วเหตุใดเราจึงต้องกังวลเกี่ยวกับการใช้คำหลัก "ทั่วโลก" เพื่อกำหนดข้อมูลทั่วโลก
นี่คือเหตุผลที่ดีสามประการ:
1. การนำโค้ดกลับมาใช้ใหม่แทบจะเป็นไปไม่ได้เลย
หากฟังก์ชันนั้นขึ้นอยู่กับตัวแปรส่วนกลาง ก็แทบจะเป็นไปไม่ได้เลยที่จะใช้ฟังก์ชันนี้ในสภาพแวดล้อมที่แตกต่างกัน ปัญหาอีกประการหนึ่งคือคุณไม่สามารถแตกฟังก์ชันนี้และนำไปใช้ในโค้ดอื่นได้
2. การดีบักและการแก้ปัญหาเป็นเรื่องยากมาก
การติดตามตัวแปรร่วมนั้นยากกว่าการติดตามตัวแปรที่ไม่ใช่ทั่วโลกมาก ตัวแปรส่วนกลางอาจมีการกำหนดใหม่ในไฟล์รวมที่ไม่ชัดเจน และแม้ว่าคุณจะมีโปรแกรมแก้ไขโปรแกรม (หรือ IDE) ที่ดีมากที่จะช่วยคุณ ก็อาจต้องใช้เวลาหลายชั่วโมงในการค้นหาปัญหา
3. เป็นเรื่องยากมากที่จะเข้าใจโค้ดเหล่านี้
เป็นการยากสำหรับคุณที่จะทราบว่าตัวแปรส่วนกลางมาจากไหนและใช้เพื่ออะไร ในระหว่างกระบวนการพัฒนา คุณอาจรู้ตัวแปรทั่วโลกทุกตัว แต่หลังจากผ่านไปประมาณหนึ่งปี คุณอาจลืมตัวแปรบางตัวไปอย่างน้อย ในเวลานี้ คุณจะเสียใจที่คุณใช้ตัวแปรทั่วโลกมากมาย
แล้วถ้าเราไม่ใช้ตัวแปรโกลบอล เราจะใช้อะไร? มาดูวิธีแก้ปัญหาด้านล่างกัน
การใช้พารามิเตอร์ฟังก์ชัน
วิธีหนึ่งในการหยุดใช้ตัวแปรร่วมคือเพียงส่งตัวแปรเป็นพารามิเตอร์ไปยังฟังก์ชัน ดังที่แสดงด้านล่าง ต่อ
ไปนี้เป็นเนื้อหาของเครื่องหมายคำพูด:
<?php
$var = 'สวัสดีชาวโลก';
ทดสอบ ($var);
การทดสอบฟังก์ชัน ($var) {
เสียงสะท้อน $var;
-
?>
หากคุณต้องการส่งผ่านตัวแปรร่วมเท่านั้น นี่เป็นวิธีแก้ปัญหาที่ดีมากหรือโดดเด่น แต่ถ้าคุณต้องการส่งผ่านค่าหลายค่าล่ะ
ตัวอย่างเช่น สมมติว่าเราต้องการใช้คลาสฐานข้อมูล คลาสการตั้งค่าโปรแกรม และคลาสผู้ใช้ ในโค้ดของเรา คลาสทั้งสามนี้ถูกใช้ในทุกส่วนประกอบ ดังนั้นจึงต้องส่งคลาสเหล่านี้ไปยังแต่ละส่วนประกอบ ถ้าเราใช้วิธีการพารามิเตอร์ฟังก์ชัน เราจะต้องทำเช่นนี้:
ต่อไปนี้เป็นเนื้อหาที่ยกมา:
<?php
$db = การเชื่อมต่อฐานข้อมูลใหม่;
$settings = การตั้งค่าใหม่_XML;
$user = ผู้ใช้ใหม่;
ทดสอบ($db, $การตั้งค่า, $ผู้ใช้);
การทดสอบฟังก์ชัน(&$db, &$settings, &$user) {
//ทำอะไรสักอย่าง
-
?>
แน่นอนว่ามันไม่คุ้มค่า และเมื่อเรามีอ็อบเจ็กต์ใหม่ที่จะเพิ่ม เราจะต้องเพิ่มพารามิเตอร์ฟังก์ชันอีกหนึ่งรายการให้กับแต่ละฟังก์ชัน เราจึงต้องใช้วิธีอื่นในการแก้ปัญหา