วิธีตรวจสอบว่าตัวแปรว่างเปล่าหรือไม่ใน php ฝึกใช้ฟังก์ชัน PHP Empty() PHP ว่างเปล่า() สำหรับวัตถุและอาร์เรย์

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

แนวคิดนี้ได้กลายเป็นศูนย์กลางของกระบวนทัศน์การเขียนโปรแกรมทั่วไป ในช่วงเริ่มต้นของยุคการเขียนโปรแกรม ภาษาที่มีความมั่นใจเหมือนกันนั้นต้องการให้โปรแกรมเมอร์กำหนดตัวแปรล่วงหน้าและรับรองอย่างเคร่งครัดว่าไม่มีการกำหนดสิ่งผิดกฎหมาย ทั้งโปรแกรมและภาษาโปรแกรมไม่มีแนวคิดใด ๆ มาก่อนว่าตัวแปรจะเปลี่ยนประเภทของมัน

เกี่ยวกับ ความว่างเปล่า และไม่มีอยู่จริง

ฟังก์ชัน PHP Empty() เป็นสิ่งที่ตรงกันข้ามกับฟังก์ชัน isset() และมีคุณสมบัติการใช้งานพิเศษบางอย่าง หากไม่มีตัวแปร ฟังก์ชันแรกจะตอบสนองในทางบวกและผลลัพธ์จะเป็นจริง และฟังก์ชันที่สองจะตอบสนองในทางลบ นั่นคือค่าของมันจะเป็นเท็จ

ตามคำจำกัดความ isset() ได้รับการออกแบบมาเพื่อตรวจสอบการมีอยู่ของตัวแปร ไม่สำคัญว่าจะกำหนดตัวแปรอะไรและอย่างไร สิ่งสำคัญคือตัวแปรนั้นมีอยู่จริงและไม่ถูกทำลายโดยฟังก์ชัน unset() ผลลัพธ์ของฟังก์ชัน isset() จะเป็นค่าบวก - จริง สิ่งสำคัญคือต้องจำไว้ว่าถ้า $iVar = 0; จากนั้น isset($iVar) จะเป็นจริง แต่ว่าง($iVar) ก็จะเป็นจริงเช่นกัน

ในกรณีแรก ผลลัพธ์หมายความว่ามีตัวแปรอยู่ ในกรณีที่สองตัวแปรว่างเปล่า นั่นคือค่า “0” ในรูปแบบใดๆ ไม่ว่าจะเป็นสตริง (“0”) หรือตัวเลข (เศษส่วน - 0.0 หรือจำนวนเต็ม - 0) เหมือนกัน: Empty($iVar) จะเป็นจริง

เกี่ยวกับความปลอดภัยและการควบคุม

การปฏิบัติแสดงให้เห็นว่าภาษาที่ไม่ได้พิมพ์ให้อิสระแก่โปรแกรมเมอร์มากขึ้น แต่ถือว่าทัศนคติของเขาในการทำงานกับอัลกอริทึมนั้นมีความรับผิดชอบมากกว่า

PHP มีไวยากรณ์สมัยใหม่ที่รองรับความหมายที่กำหนดไว้ มีข้อผิดพลาดเล็กน้อย แต่ต้องได้รับการดูแลอย่างระมัดระวัง ตัวอย่างเช่น การเรียกใช้ฟังก์ชันใดๆ ต้องใช้พารามิเตอร์จำนวนหนึ่ง

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

ในบริบทนี้ ฟังก์ชัน PHP Empty() ถือเป็นสิ่งสำคัญ การแสดงออก:

$a = "1;2" + 20

จะกำหนดตัวแปร $a เป็นค่า 21 เนื่องจากส่วนแรกของนิพจน์จะแสดงเป็น 1 และส่วนที่สองจะเป็น 20

ผลลัพธ์จะเป็นหมายเลขประเภทและฟังก์ชัน PHP ว่างเปล่า($a) จะให้ผลลัพธ์เป็นเท็จ นั่นคือตัวแปร $a ไม่ว่างเปล่า

ในบริบทนี้ การมีฟังก์ชัน:

funcTest($a ​​= 0, $b = 20)

เมื่อโทร:

$res = funcTest($aVal, $bVal)

จะได้สิ่งที่ต้องการนั่นคือผลลัพธ์ของฟังก์ชัน และเมื่อถูกเรียก:

  • $res = funcTest($aVal. $bVal)

เนื้อความของฟังก์ชันมีพารามิเตอร์เพียงตัวเดียวที่มีค่า "$aVal . $bVal" และเป็นไปได้มากว่าพารามิเตอร์นี้จะถูกตีความว่าเป็นสตริงอักขระ

PHP ว่างเปล่า() สำหรับวัตถุและอาร์เรย์

ไวยากรณ์ของภาษามีจำนวนโครงสร้างและฟังก์ชันเพียงพอสำหรับการทำงานกับวัตถุและอาร์เรย์ แต่จากมุมมองของการตรวจสอบการมีอยู่และการมีอยู่ของค่า ไม่มีความแตกต่างพิเศษจากตัวแปร

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

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

วัตถุและฟังก์ชันของมันว่างเปล่า()

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

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

ขึ้นอยู่กับสไตล์การเขียนโปรแกรมของคุณ ฟังก์ชัน PHP Empty() และ isset() มีความสำคัญมากสำหรับการสร้างอัลกอริธึมที่ปลอดภัยและเชื่อถือได้ แต่สำหรับอ็อบเจ็กต์ ยังดีกว่าที่จะมีตัวแปรของ Empty() ที่กำหนดโดยเนื้อหา

สตริงตัวแปร (12)

ฉันมีฟังก์ชัน isNotEmpty ที่คืนค่าเป็นจริงหากสตริงไม่ว่างเปล่า และคืนค่าเป็นเท็จหากสตริงว่างเปล่า ฉันพบว่ามันใช้งานไม่ได้หากฉันผ่านบรรทัดว่างผ่านมัน

ฟังก์ชั่น isNotEmpty($input) ( $strTemp = $input; $strTemp = trim($strTemp); if(strTemp != "") //Also try this "if(strlen($strTemp) > 0)" ( return true ; ) กลับเท็จ ;

ตรวจสอบสตริงโดยใช้ isNotEmpty:

If(isNotEmpty($userinput["phoneNumber"])) ( //ตรวจสอบหมายเลขโทรศัพท์ ) else ( echo "ไม่ได้กรอกหมายเลขโทรศัพท์
"; }

หากบรรทัดว่างเปล่า อย่างอื่นจะไม่ถูกดำเนินการ ฉันไม่เข้าใจว่าทำไม ใครช่วยอธิบายเรื่องนี้ได้บ้าง

คำตอบ

หากคุณมีฟิลด์ชื่อ serial_number และต้องการตรวจสอบพื้นที่ว่าง

$serial_number = ตัด($_POST); $q="select * จากผลิตภัณฑ์โดยที่ user_id="$_SESSION""; $rs=mysql_query($q); ในขณะที่($row=mysql_fetch_assoc($rs))( if(empty($_POST["irons"]))( $irons=$row["product1"]; )

ด้วยวิธีนี้คุณสามารถวนซ้ำลูปทั้งหมดในลูปด้วยฟังก์ชันว่างอื่น

แทนที่จะตอบ (ฉันเชื่อว่าคุณได้แก้ไขปัญหาของคุณแล้ว) ฉันจะให้คำแนะนำแก่คุณ

คนอื่นๆ ฉันไม่รู้ แต่โดยส่วนตัวแล้วฉันรู้สึกรำคาญมากเมื่อเห็นอะไรประมาณนี้:

ถ้า(<>) ( กลับจริง; ) กลับเท็จ;

สิ่งนี้ต้องการผลตอบแทน " อันสง่างาม (<- - โปรดตรวจสอบโค้ดของคุณเสมอและลบตรรกะนี้ออก สำหรับ แต่ละสถานการณ์ที่คุณไม่ต้องการคำสั่ง IF

ฉันแค่เขียนของฉัน ฟังก์ชั่นของตัวเอง is_string สำหรับการตรวจสอบประเภท และ strlen สำหรับการตรวจสอบความยาว

ฟังก์ชั่น EmptyStr($str) ( return is_string($str) && strlen($str) === 0; ) print EmptyStr("") ? "ว่างเปล่า" : "ไม่ว่างเปล่า"; // ว่างเปล่า

แก้ไข: คุณยังสามารถใช้ฟังก์ชันตัดแต่งเพื่อตรวจสอบว่าสตริงไม่มีอยู่หรือไม่

Is_string($str) && strlen(ตัดแต่ง($str)) === 0;

PHP มีฟังก์ชันในตัวที่เรียกว่า Empty() การทดสอบทำได้โดยการพิมพ์ if(empty($string))(...) ลิงก์ php.net: php Empty

คุณมีคำตอบ แต่ในกรณีของคุณคุณสามารถใช้ได้

กลับว่างเปล่า($input);

กลับ is_string($input);

ปัญหาง่ายๆ- เปลี่ยน:

ถ้า(strTemp != "")

ถ้า($strTemp != "")

บางทีคุณอาจเปลี่ยนเป็น:

ถ้า($strTemp !== "")

เนื่องจาก != "" จะส่งคืนค่าจริงหากคุณส่งผ่านตัวเลข 0 และอีกสองสามกรณีเนื่องจากการแปลงประเภทอัตโนมัติของ PHP

โปรดทราบว่า PHP มีฟังก์ชัน Empty() อยู่แล้ว

PHP ประเมินสตริงว่างเป็นเท็จ ดังนั้นคุณสามารถใช้:

If (trim($userinput["phoneNumber"])) ( // ตรวจสอบหมายเลขโทรศัพท์ ) else ( echo "ไม่ได้ป้อนหมายเลขโทรศัพท์
"; }

ฉันใช้เสมอ การแสดงออกปกติสำหรับการตรวจสอบสตริงว่าง ย้อนกลับไปในสมัยของ CGI/Perl รวมถึง Javascript ดังนั้นทำไมไม่ลองใช้ PHP เป็นตัวอย่าง (แม้ว่าจะยังไม่ทดลองก็ตาม)

กลับ preg_match("/\S/", $input);

โดยที่ \S แทนอักขระใดๆ ที่ไม่มีช่องว่าง

เพียงใช้ฟังก์ชัน strlen()

ถ้า (strlen($s)) ( // ไม่ว่างเปล่า )

ฉันเพิ่งถามตัวเองด้วยคำถามเดียวกัน
มีหลายอย่าง แนวทางแก้ไขที่เป็นไปได้มี 3 รายการที่ถูกต้อง:

  • s.indexOf(เริ่มต้น) === 0
  • s.substr(0,starter.length) === สตาร์ทเตอร์
  • s.lastIndexOf(starter, 0) === 0 (เพิ่มหลังจากดูคำตอบของ Mark Bayer)
  • ใช้ลูป:

    ฟังก์ชั่น startWith(s,starter) ( for (var i = 0,cur_c; i< starter.length; i++) { cur_c = starter[i]; if (s[i] !== starter[i]) { return false; } } return true; }

ฉันไม่พบวิธีแก้ปัญหาหลังที่เกี่ยวข้องกับการใช้ลูป
น่าแปลกที่โซลูชันนี้เหนือกว่า 3 ตัวแรกอย่างมาก
นี่คือการทดสอบ jsperf ที่ฉันใช้เพื่อให้ได้ข้อสรุปนี้: http://jsperf.com/startswith2/2

PS: ecmascript 6 (ความสามัคคี) แนะนำวิธีการเริ่มต้นด้วยสตริงของตัวเอง
ลองนึกดูว่าจะประหยัดเวลาได้มากเพียงใดหากพวกเขาคิดที่จะรวมวิธีการที่จำเป็นมากนี้ไว้ในเวอร์ชันแรก

อัปเดต

โปรดทราบว่ามีการเพิ่มประสิทธิภาพลูป 2 แบบที่ Steve รวมไว้ โดยแบบแรกจากทั้งสองแบบมีประสิทธิภาพที่ดีกว่า ดังนั้นฉันจะโพสต์โค้ดนั้นด้านล่าง:

ฟังก์ชั่น startWith2(str, คำนำหน้า) ( if (str.length< prefix.length) return false; for (var i = prefix.length - 1; (i >= 0) && (str[i] === คำนำหน้า[i]); --i) ดำเนินการต่อ;< 0; }

กลับมาฉัน ในความหมายของ PHP
FALSE และ NULL และค่าที่เกี่ยวข้องนั้นแตกต่างจากที่มักใช้ในภาษาอื่นและมีคุณสมบัติที่ไม่ชัดเจนในตัวเอง
บทความนี้กล่าวถึงคุณลักษณะเหล่านี้

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

FALSE ในคำสั่ง If
  • ตามเอกสาร PHP ค่าต่อไปนี้เป็น FALSE หลังจากส่งไปที่บูลีน:
  • ค่าบูลีนนั้นเป็น FALSE
  • สตริงว่าง ("") และสตริง "0"
  • อาร์เรย์ว่าง (อาร์เรย์) – อาร์เรย์()
  • ออบเจ็กต์ที่มีตัวแปรสมาชิกเป็นศูนย์ (PHP 4 เท่านั้น ไม่ครอบคลุมในบทความนี้)
  • ค่า NULL พิเศษ (รวมถึงตัวแปรที่ไม่ได้ตั้งค่า)
ออบเจ็กต์ SimpleXML (ไม่ครอบคลุมในบทความนี้)
ซึ่งหมายความว่าหากค่าดังกล่าวถูกส่งไปยังเงื่อนไข:
ถ้า (…) สะท้อน “1”; อย่างอื่นสะท้อน “0”;

จากนั้นสตริง "0" จะถูกพิมพ์

หากไม่ได้ตั้งค่าของตัวแปร (ไม่ได้ตั้งค่า) อาจมีการออกคำเตือนด้วย เราขอเตือนคุณว่าคำเตือนในเงื่อนไขสามารถลบออกได้โดยการเขียน @ หน้าตัวแปร

ตัวอย่างเช่น:
ถ้า (@$undefVar) ( …)

แต่คุณควรใช้ @ เฉพาะในกรณีที่รุนแรงเท่านั้น เมื่อคุณคิดอย่างรอบคอบแล้วและไม่มีตัวเลือกอื่นที่เหมาะสม ดูฟังก์ชัน isset()

is_null() ส่งคืน TRUE สำหรับตัวแปรที่ไม่ได้กำหนดค่าใด ๆ หรือกำหนดค่า NULL เท่านั้น
isset() ส่งคืนค่าบูลีนแบบหนึ่งต่อหนึ่งเมื่อเปรียบเทียบกับ is_null()
หากตัวแปรไม่ได้รับการกำหนดค่า ดังนั้น is_null() จะแสดงคำเตือน "ตัวแปรที่ไม่ได้กำหนด" เช่นกัน ซึ่งแตกต่างจาก isset() ซึ่งจะไม่แสดงคำเตือนใดๆ
โปรดทราบว่าหากต้องการลบค่าของตัวแปร คุณสามารถใช้ฟังก์ชัน unset() ได้ คุณยังสามารถกำหนดค่า NULL เพื่อจุดประสงค์นี้เพื่อหลีกเลี่ยงคำเตือนของคอมไพเลอร์เมื่อพยายามอ่านค่าของตัวแปร

โปรดทราบว่าในการทำงานกับค่าคงที่นั้นต่างจากตัวแปรตรงที่คุณต้องใช้โครงสร้างที่กำหนด ()

การแสดงสตริง

ลองดูการแสดงสตริงของค่าคงที่เท็จ
ตัวอย่างเช่น การต่อข้อมูลจะแปลงค่าเป็นสตริงต่อไปนี้ ดังแสดงในตารางด้านล่าง:

หัวข้อของการแปลงเป็นสตริงได้อธิบายไว้ในรายละเอียดเพิ่มเติมบนเว็บไซต์อย่างเป็นทางการในย่อหน้าการแปลงเป็นสตริง

ตัวดำเนินการเปรียบเทียบ

มาดูตัวดำเนินการเปรียบเทียบกันดีกว่า
ค่าเท็จทั้งหมดจะคืนค่าเป็นจริงตามที่คาดไว้ เมื่อเปรียบเทียบกับ FALSE โดยใช้ตัวดำเนินการ " == "
แต่คุณไม่ควรพึ่งพาการเปลี่ยนแปลงในที่นี้เมื่อเปรียบเทียบค่าคงที่สตริงเท็จระหว่างกัน
นี่คือตารางที่สมบูรณ์สำหรับการเปรียบเทียบค่าเท็จ (บวกหมายถึงองค์ประกอบของตารางที่เมื่อเปรียบเทียบโดยใช้ตัวดำเนินการ " != " จะส่งกลับค่าจริง:

$undef – ตัวแปรที่ยังไม่ได้กำหนดค่า

สามารถสรุปข้อสรุปที่น่าพอใจได้จากตาราง:
1. หากเรารู้ว่าเราใช้เฉพาะสตริง เราก็สามารถเปรียบเทียบได้อย่างปลอดภัย และไม่ต้องกังวลว่า "" (สตริงว่าง) จะเท่ากับ "0"
2. อาร์เรย์ไม่เท่ากับสตริง จำนวนเต็ม หรือจำนวนจริง

เนื่องจากประเภทของค่าคงที่เท็จที่แตกต่างกันจะแตกต่างกัน สามารถใช้ตัวดำเนินการคู่ === และ !== เพื่อแยกแยะความแตกต่างได้
ตัวดำเนินการ === ส่งคืนค่าเท็จสำหรับคู่ค่าเท็จทั้งหมด
ส่งกลับค่าจริงเฉพาะสำหรับอาร์กิวเมนต์หนึ่งซึ่งกำหนดค่าเป็น NULL และอาร์กิวเมนต์ตัวที่สองไม่ได้กำหนดค่าใดๆ

ความแตกต่างระหว่างตัวแปรที่มีค่า NULL และตัวแปรที่ไม่ได้กำหนด

ตัวดำเนินการ === ช่วยให้คุณสามารถแยกแยะค่าเท็จทั้งหมดได้ ยกเว้นตัวแปรที่มีค่า NULL จากตัวแปรที่ยังไม่ได้กำหนดค่า

ตัวแปรดังกล่าวสามารถแยกแยะได้โดยใช้ฟังก์ชัน get_defin_vars()

หากคุณต้องการตรวจสอบว่าได้กำหนดค่าให้กับตัวแปร $var หรือไม่ คุณสามารถใช้ข้อมูลโค้ดต่อไปนี้เพื่อทำสิ่งนี้:
if (array_key_exists("var", get_defin_vars())) ( echo "var is Defined"; // $var ถูกกำหนดให้เป็น NULL ) else ( echo "var is NOT Defed"; // $var ไม่ได้ถูกกำหนดไว้หรือไม่ได้ตั้งค่า($ var) ถูกเรียก)

ข้อสรุป

คุณควรจำไว้เสมอว่าใน PHP ค่าเท็จสองค่าอาจไม่เท่ากันและตัวแปรที่ดูเหมือนจะแตกต่างกันตั้งแต่แรกเห็นอาจกลายเป็นค่าเดียวกันเมื่อเปรียบเทียบ เพื่อหลีกเลี่ยงเหตุการณ์ไม่คาดคิด คุณสามารถใช้ตัวดำเนินการ === และ !==

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

การทดสอบดำเนินการบน PHP 5.3.1

ลิงค์เพิ่มเติม

1. ตารางเปรียบเทียบประเภท PHP
2. MySQl Null และสตริงว่างในบริบทของ PHP

แท็ก: เพิ่มแท็ก

ใน PHP ค่า FALSE และ NULL และค่าที่เกี่ยวข้องจะแตกต่างจากค่าปกติในภาษาอื่นและมีคุณสมบัติที่ไม่ชัดเจนในตัวเอง
FALSE และ NULL และค่าที่เกี่ยวข้องนั้นแตกต่างจากที่มักใช้ในภาษาอื่นและมีคุณสมบัติที่ไม่ชัดเจนในตัวเอง
บทความนี้กล่าวถึงคุณลักษณะเหล่านี้

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

FALSE ในคำสั่ง If
  • ตามเอกสาร PHP ค่าต่อไปนี้เป็น FALSE หลังจากส่งไปที่บูลีน:
  • ค่าบูลีนนั้นเป็น FALSE
  • สตริงว่าง ("") และสตริง "0"
  • อาร์เรย์ว่าง (อาร์เรย์) – อาร์เรย์()
  • ออบเจ็กต์ที่มีตัวแปรสมาชิกเป็นศูนย์ (PHP 4 เท่านั้น ไม่ครอบคลุมในบทความนี้)
  • ค่า NULL พิเศษ (รวมถึงตัวแปรที่ไม่ได้ตั้งค่า)
ออบเจ็กต์ SimpleXML (ไม่ครอบคลุมในบทความนี้)
ซึ่งหมายความว่าหากค่าดังกล่าวถูกส่งไปยังเงื่อนไข:
ถ้า (…) สะท้อน “1”; อย่างอื่นสะท้อน “0”;

จากนั้นสตริง "0" จะถูกพิมพ์

หากไม่ได้ตั้งค่าของตัวแปร (ไม่ได้ตั้งค่า) อาจมีการออกคำเตือนด้วย เราขอเตือนคุณว่าคำเตือนในเงื่อนไขสามารถลบออกได้โดยการเขียน @ หน้าตัวแปร

ตัวอย่างเช่น:
ถ้า (@$undefVar) ( …)

แต่คุณควรใช้ @ เฉพาะในกรณีที่รุนแรงเท่านั้น เมื่อคุณคิดอย่างรอบคอบแล้วและไม่มีตัวเลือกอื่นที่เหมาะสม ดูฟังก์ชัน isset()

is_null() ส่งคืน TRUE สำหรับตัวแปรที่ไม่ได้กำหนดค่าใด ๆ หรือกำหนดค่า NULL เท่านั้น
isset() ส่งคืนค่าบูลีนแบบหนึ่งต่อหนึ่งเมื่อเปรียบเทียบกับ is_null()
หากตัวแปรไม่ได้รับการกำหนดค่า ดังนั้น is_null() จะแสดงคำเตือน "ตัวแปรที่ไม่ได้กำหนด" เช่นกัน ซึ่งแตกต่างจาก isset() ซึ่งจะไม่แสดงคำเตือนใดๆ
โปรดทราบว่าหากต้องการลบค่าของตัวแปร คุณสามารถใช้ฟังก์ชัน unset() ได้ คุณยังสามารถกำหนดค่า NULL เพื่อจุดประสงค์นี้เพื่อหลีกเลี่ยงคำเตือนของคอมไพเลอร์เมื่อพยายามอ่านค่าของตัวแปร

โปรดทราบว่าในการทำงานกับค่าคงที่นั้นต่างจากตัวแปรตรงที่คุณต้องใช้โครงสร้างที่กำหนด ()

การแสดงสตริง

ลองดูการแสดงสตริงของค่าคงที่เท็จ
ตัวอย่างเช่น การต่อข้อมูลจะแปลงค่าเป็นสตริงต่อไปนี้ ดังแสดงในตารางด้านล่าง:

หัวข้อของการแปลงเป็นสตริงได้อธิบายไว้ในรายละเอียดเพิ่มเติมบนเว็บไซต์อย่างเป็นทางการในย่อหน้าการแปลงเป็นสตริง

ตัวดำเนินการเปรียบเทียบ

มาดูตัวดำเนินการเปรียบเทียบกันดีกว่า
ค่าเท็จทั้งหมดจะคืนค่าเป็นจริงตามที่คาดไว้ เมื่อเปรียบเทียบกับ FALSE โดยใช้ตัวดำเนินการ " == "
แต่คุณไม่ควรพึ่งพาการเปลี่ยนแปลงในที่นี้เมื่อเปรียบเทียบค่าคงที่สตริงเท็จระหว่างกัน
นี่คือตารางที่สมบูรณ์สำหรับการเปรียบเทียบค่าเท็จ (บวกหมายถึงองค์ประกอบของตารางที่เมื่อเปรียบเทียบโดยใช้ตัวดำเนินการ " != " จะส่งกลับค่าจริง:

$undef – ตัวแปรที่ยังไม่ได้กำหนดค่า

สามารถสรุปข้อสรุปที่น่าพอใจได้จากตาราง:
1. หากเรารู้ว่าเราใช้เฉพาะสตริง เราก็สามารถเปรียบเทียบได้อย่างปลอดภัย และไม่ต้องกังวลว่า "" (สตริงว่าง) จะเท่ากับ "0"
2. อาร์เรย์ไม่เท่ากับสตริง จำนวนเต็ม หรือจำนวนจริง

เนื่องจากประเภทของค่าคงที่เท็จที่แตกต่างกันจะแตกต่างกัน สามารถใช้ตัวดำเนินการคู่ === และ !== เพื่อแยกแยะความแตกต่างได้
ตัวดำเนินการ === ส่งคืนค่าเท็จสำหรับคู่ค่าเท็จทั้งหมด
ส่งกลับค่าจริงเฉพาะสำหรับอาร์กิวเมนต์หนึ่งซึ่งกำหนดค่าเป็น NULL และอาร์กิวเมนต์ตัวที่สองไม่ได้กำหนดค่าใดๆ

ความแตกต่างระหว่างตัวแปรที่มีค่า NULL และตัวแปรที่ไม่ได้กำหนด

ตัวดำเนินการ === ช่วยให้คุณสามารถแยกแยะค่าเท็จทั้งหมดได้ ยกเว้นตัวแปรที่มีค่า NULL จากตัวแปรที่ยังไม่ได้กำหนดค่า

ตัวแปรดังกล่าวสามารถแยกแยะได้โดยใช้ฟังก์ชัน get_defin_vars()

หากคุณต้องการตรวจสอบว่าได้กำหนดค่าให้กับตัวแปร $var หรือไม่ คุณสามารถใช้ข้อมูลโค้ดต่อไปนี้เพื่อทำสิ่งนี้:
if (array_key_exists("var", get_defin_vars())) ( echo "var is Defined"; // $var ถูกกำหนดให้เป็น NULL ) else ( echo "var is NOT Defed"; // $var ไม่ได้ถูกกำหนดไว้หรือไม่ได้ตั้งค่า($ var) ถูกเรียก)

ข้อสรุป

คุณควรจำไว้เสมอว่าใน PHP ค่าเท็จสองค่าอาจไม่เท่ากันและตัวแปรที่ดูเหมือนจะแตกต่างกันตั้งแต่แรกเห็นอาจกลายเป็นค่าเดียวกันเมื่อเปรียบเทียบ เพื่อหลีกเลี่ยงเหตุการณ์ไม่คาดคิด คุณสามารถใช้ตัวดำเนินการ === และ !==

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

เมื่อทำงานกับสตริง หากจำเป็นต้องตรวจสอบว่าสตริงว่างหรือไม่ โปรแกรมเมอร์มือใหม่มักจะใช้ฟังก์ชันนี้ สเตรน()- ฟังก์ชันนี้ค่อนข้างเร็วเนื่องจากไม่ได้ทำการคำนวณใดๆ แต่เพียงส่งคืนค่าที่ทราบอยู่แล้วของความยาวสตริงซึ่งมีอยู่ในรูปแบบ zval (PHP ใช้โครงสร้าง C เพื่อจัดเก็บตัวแปร) แต่ถึงอย่างนั้นก็เพราะว่า สเตรน()- นี่คือฟังก์ชัน มันช้านิดหน่อยเพราะเมื่อถูกเรียกต้องมีการดำเนินการหลายอย่าง เช่น การแปลงเป็นตัวพิมพ์เล็กและการค้นหาตารางแฮช ในบางกรณี คุณสามารถเพิ่มความเร็วในการดำเนินการโค้ดของคุณได้โดยใช้ ว่างเปล่า()...แต่ก็เช่นกัน ว่างเปล่า()คุณยังคงสามารถเพิ่มประสิทธิภาพได้เล็กน้อย

ลองมาตัวอย่างตัวอย่างเช่น ตรวจสอบเส้นทางของภาพฟังก์ชันจะตรวจสอบว่าเส้นทางว่างเปล่าหรือไม่ จากนั้นแทนที่ด้วยเส้นทางอื่น เช่น “images/noimage.jpg”

ดังนั้นงานทั้งหมดจึงต้องตรวจสอบว่าตัวแปรประเภทสตริงว่างเปล่าหรือไม่ ลอง 4 วิธี:

  • ถ้า(strlen($img_path)>0)
  • ถ้า($img_path(0))
  • ถ้า(ว่าง($img_path))
  • และอีกวิธีหนึ่งสุดท้าย

ดังนั้นเราจะเขียนในลักษณะแรก:

ฟังก์ชั่น check_image_path($img_path ) ( if (strlen ($img_path ) >0 ) ( $img_path = "images/noimage.jpg" ; ) ส่งคืน $img_path ; )

เรามาทำการทดสอบกัน โดยใช้เวลาทดสอบโดยเฉลี่ย 1.43795800209 วินาที

ลองคิดดูอีกหน่อย... คุณสามารถเข้าถึงอักขระตัวแรกของบรรทัดได้ในคราวเดียว แทนที่จะเข้าถึงทั้งบรรทัด หากมีอักขระตัวแรก แสดงว่าสตริงนั้นไม่ว่างเปล่า อักขระตัวแรกในบรรทัดมีหมายเลข "0"

ฟังก์ชั่น check_image_path($img_path) ( if ($img_path ( 0 ) ) ( $img_path = "images/noimage.jpg" ; ) ส่งคืน $img_path ; )

ใช้เวลาทดสอบโดยเฉลี่ย 1.19431300163 วินาที 17% ของเวลาที่เล่น

มาลองเขียนโดยใช้ Empty() กัน:

ฟังก์ชั่น check_image_path($img_path) ( if (empty ($img_path) ) ( $img_path = "images/noimage.jpg" ; ) return $img_path ; )

ใช้เวลาทดสอบโดยเฉลี่ย 1.1341319084 วินาที 5% ของเวลาที่เล่นจากตัวอย่างก่อนหน้า

ตอนนี้เรามาดูตัวอย่างสุดท้ายและตัวอย่างสุดท้ายด้านบนเรากัน มาดูกันว่าสิ่งนี้สามารถรวมกันได้อย่างไร คิดว่า... คุณจะเพิ่มประสิทธิภาพได้อย่างไร?

ฟังก์ชั่น check_image_path($img_path) ( if (empty ($img_path ( 0 ) ) ) ( $img_path = "images/noimage.jpg" ; ) return $img_path ; )

ใช้เวลาทดสอบโดยเฉลี่ย 1.07465314865 วินาที และอีกครั้งที่เราชนะ 5% ของเวลา...

มันทำงานอย่างไรและทำไมมันถึงเร็วกว่า? แต่ $img_path(0)ส่งคืนอักขระตัวแรก... จากนั้นฟังก์ชัน ว่างเปล่า()ตรวจสอบสตริงว่าง... ความแตกต่างจากตัวอย่างก่อนหน้านี้คือมีเพียงอักขระเดียวเท่านั้นที่ถูกส่งไปยังฟังก์ชัน ไม่ใช่ทั้งสตริง ดังนั้นตั้งแต่ตัวอย่างแรกจนถึงตัวอย่างสุดท้ายที่เราชนะ 25% เวลา.



2024 wisemotors.ru. วิธีนี้ทำงานอย่างไร. เหล็ก. การทำเหมืองแร่ สกุลเงินดิจิทัล