วันนี้ฉันเห็นว่า Caterpillar สร้างความแตกต่างระหว่างสตริงว่างและ NULL สำหรับทุกคน ( http://bbs.phpchina.com/thread-99574-1-2.html ) ฉันรู้สึกว่าฉันไม่มีความเข้าใจพื้นฐานที่ชัดเจน ความรู้ (เช่นฉัน) มีประโยชน์มาก เป็นเวลาดึกแล้ว ฉันตรวจสอบ "ข้อมูลที่เชื่อถือได้" มากมายและเขียนบทความและโพสต์ไว้ที่นี่เพื่อช่วยให้ทุกคนเรียนรู้พื้นฐาน ไม่เข้มงวดและเนื้อหาเป็นเพียงการสรุปส่วนบุคคล หากมีข้อบกพร่อง โปรดเพิ่มผู้เชี่ยวชาญเพิ่มเติม โดยไม่ต้องกังวลใจอีกต่อไป ข้อความหลักจะเป็นดังนี้:
1. ความแตกต่างระหว่างเสียงสะท้อนและการพิมพ์
ใน PHP คือ โดยพื้นฐานแล้วเหมือนกัน (เอาต์พุต) แต่ยังคงมีความแตกต่างเล็กน้อยระหว่างทั้งสอง ไม่มีค่าส่งคืนหลังจากเอาต์พุต echo แต่การพิมพ์มีค่าส่งคืน และส่งกลับค่าเท็จเมื่อการดำเนินการล้มเหลว ดังนั้นจึงสามารถใช้เป็นฟังก์ชันปกติได้ ตัวอย่างเช่น หลังจากรันโค้ดต่อไปนี้ ค่าของตัวแปร $r จะเป็น 1
รหัส:
$r = พิมพ์ "Hello World";
ซึ่งหมายความว่า print สามารถใช้ในนิพจน์ที่ซับซ้อนบางอย่างได้ แต่ echo ไม่สามารถทำได้ อย่างไรก็ตาม เนื่องจากคำสั่ง echo ไม่ต้องการค่าใดๆ ที่ส่งคืน คำสั่ง echo ในโค้ดจึงทำงานเร็วกว่าคำสั่ง print เล็กน้อย
2. ความแตกต่างระหว่าง include และ need
ฟังก์ชันของ include() และ need() โดยพื้นฐานแล้วจะเหมือนกัน (include) แต่มีความแตกต่างบางประการในการใช้งาน include() เป็นฟังก์ชันการรวมแบบมีเงื่อนไข ในขณะที่ need() คือ an ฟังก์ชันการรวมแบบไม่มีเงื่อนไข ตัวอย่างเช่น ในโค้ดต่อไปนี้ หากตัวแปร $a เป็นจริง ไฟล์ a.php จะถูกรวมไว้ด้วย:
รหัส:
if($a){
รวม("a.php");
-
อย่างไรก็ตาม need() แตกต่างจาก include() ไม่ว่าค่า $a จะเป็นเท่าใด โค้ดต่อไปนี้จะรวมไฟล์ a.php ไว้ในไฟล์:
รหัส:
if($a){
ต้องการ("a.php");
-
ในแง่ของการจัดการข้อผิดพลาด ให้ใช้คำสั่ง include หากมีข้อผิดพลาดเกิดขึ้น โปรแกรมจะข้ามคำสั่ง include แม้ว่าข้อความแสดงข้อผิดพลาดจะปรากฏขึ้น แต่โปรแกรมจะยังคงทำงานต่อไป! แต่ need จะทำให้คุณเกิดข้อผิดพลาดร้ายแรง
แน่นอนว่าเราสามารถเข้าใจ Qifen ได้อย่างแท้จริงเช่นกัน: need หมายถึงคำขอหรือคำขอที่รุนแรงมาก
3. คำสั่ง need_once() และ include_once()
ไม่อยู่ในหัวข้อ เนื่องจากมีลักษณะคล้ายกัน คำสั่งอย่างง่าย need_once() และ include_once() สอดคล้องกับคำสั่ง need() และ include() ตามลำดับ คำสั่ง need_once() และ include_once() ส่วนใหญ่จะใช้เมื่อจำเป็นต้องรวมไฟล์หลายไฟล์ ซึ่งสามารถหลีกเลี่ยงข้อผิดพลาดของคำจำกัดความซ้ำของฟังก์ชันหรือตัวแปรที่เกิดจากการรวมโค้ดชิ้นเดียวกันได้อย่างมีประสิทธิภาพ
4. ความแตกต่างระหว่างสตริงว่าง ('') และ NULL
ใน PHP ทั้งสตริงว่างและ NULL จะถูกจัดเก็บด้วยค่า 0 แต่ประเภทต่างกัน คุณสามารถลอง echo gettype(''); NULL) คุณจะพบว่าสิ่งที่พวกเขาพิมพ์คือ string และ NULL ตามลำดับ แน่นอนว่า 0 นั้นง่ายต่อการสับสน คุณสามารถลอง echo gettype(0); พิมพ์ประเภทนั้นแล้วคุณจะพบว่าประเภทของ 0 เป็นจำนวนเต็ม ( จำนวนเต็ม) จะเห็นได้ว่าสตริง (''), NULL และ 0 เป็น "ค่าเท่ากัน" แต่ไม่เท่ากัน
5.! ความแตกต่างระหว่าง isset และความว่างเปล่า
สามารถเข้าใจได้จากความหมายตามตัวอักษร: ว่างเปล่าคือการกำหนดว่าตัวแปร "ว่างเปล่า" หรือไม่ ในขณะที่ isset ใช้เพื่อกำหนดว่าตัวแปรได้รับการตั้งค่าหรือไม่ แต่มีสิ่งหนึ่งที่คุณต้องใส่ใจตรงนี้: เมื่อค่าของตัวแปรเป็น 0 ค่าว่างจะถือว่าตัวแปรมีค่าเท่ากับค่าว่าง นั่นคือ เทียบเท่ากับการไม่มีการตั้งค่า ตัวอย่างเช่น เมื่อเราตรวจพบตัวแปร $id เมื่อ $id=0 เราจะใช้ค่าว่างและ isset เพื่อตรวจสอบว่าตัวแปร $id ได้รับการกำหนดค่าหรือไม่ ทั้งสองค่าจะส่งกลับค่าที่แตกต่างกัน: ค่าว่างคิดว่าไม่ได้กำหนดค่าไว้ และ isset สามารถรับได้ ค่าของ $id ดูตัวอย่างด้านล่าง:
รหัส? :
$id=0;
ว่างเปล่า($id)?พิมพ์ "ฉันว่างเปล่า":พิมพ์ "ฉันคือ $id"; //ผลลัพธ์: ฉันว่างเปล่า
!isset($id)?print "ฉันว่างเปล่า":พิมพ์ "ฉันคือ $id";//ผลลัพธ์: ฉันเป็น 0
6. ความแตกต่างระหว่าง == (เท่ากับ) และ === (เท่ากับ)
ตรวจสอบความแตกต่างระหว่างสตริงว่างตัวที่สี่ ("") และ NULL ด้านบนแล้วลองดูตัวอย่าง:
รหัส:
'' == NULL;
'' === NULL;
หลังจากรันแล้ว คุณจะพบว่าอันแรกเป็นจริง และอันที่สองเป็นเท็จ! จะเห็นได้ว่า == เปรียบเทียบเฉพาะค่าว่าเท่ากันหรือไม่ ในขณะที่ === ไม่เพียงแต่เปรียบเทียบค่าเท่านั้น แต่ยังเปรียบเทียบประเภทอีกด้วยซึ่งเข้มงวดกว่า