Register Register Member Login Member Login Member Login Forgot Password ??
PHP , ASP , ASP.NET, VB.NET, C#, Java , jQuery , Android , iOS , Windows Phone
 

Registered : 107,382

HOME > บทความจากสมาชิก > มาทำความเข้าใจ isset() และ empty() ว่ามันมีการทำงานและประโยชน์อย่างไร





 
Clound SSD Virtual Server

มาทำความเข้าใจ isset() และ empty() ว่ามันมีการทำงานและประโยชน์อย่างไร



ติดตามบทความล่าสุดของผู้เขียนได้ที่ phpinfo() Facebook Page




มาทำความเข้าใจ isset() และ empty() ว่ามันมีการทำงานและประโยชน์อย่างไร

isset() ใช้เพื่อตรวจสอบว่า "ตัวแปรนั้นๆ ได้ถูกกำหนดขึ้น และมีค่าที่ไม่ใช่ null หรือไม่"


$a = 'Hello World'; $c = null; $d = false; isset($a); // true เพราะมีค่าที่ไม่ใช่ null isset($b); // false เพราะไม่มีตัวแปร $b อยู่ isset($c); // false เพราะมีค่าเป็น null isset($d); // true เพราะมีค่าที่ไม่ใช่ null


ซึ่งใช้ตรวจสอบเฉพาะตัวแปรเท่านั้น หากใส่อย่างอื่นลงไป จะเกิด Parse error

isset($a); // ตัวแปรเดี่ยวๆ OK isset($a[0][1][2]); // ตัวแปร array ที่มีการเข้าถึงสมาชิก OK isset($a + 1); // อันนี้ไม่ใช่ตัวแปร แต่เป็น expression จะทำให้เกิด Parse error isset(htmlspecialchars($a)); // อันนี้ไม่ใช่ตัวแปร แต่เป็น function call จะทำให้เกิด Parse error isset($a[1 + 1]); // ตัวแปร array ที่มีการเข้าถึงสมาชิกด้วย expression OK isset($a[floor(5.5)]); // ตัวแปร array ที่มีการเข้าถึงสมาชิกด้วย function call OK




ส่วน empty() ใช้เพื่อตรวจสอบว่า "ตัวแปรนั้นๆ ยังไม่ได้ถูกกำหนดขึ้น หรือมีค่าที่ว่างเปล่า หรือไม่"
พูดง่ายๆ คือตรวจว่า มีค่าอยู่หรือไม่

ซึ่งรูปแบบของ "ค่าที่ว่างเปล่า" หรือ "ไม่มีค่า" นี้ได้แก่


null false 0 '' (สตริงว่าง) '0' (สตริง 0) array() (array ที่ไม่มีสมาชิกใดๆ อยู่)


empty() นั้นก็เหมือนกับ isset() ใช้ตรวจสอบเฉพาะตัวแปรเท่านั้น

$a = 'Hello World'; $c = ''; $d = array(); empty($a); // false เพราะมีค่าที่ไม่ใช่ค่าที่ว่างเปล่า empty($b); // true เพราะไม่มีตัวแปร $b อยู่ empty($c); // true เพราะมีค่าเป็นสตริงว่าง empty($d); // true เพราะมีค่าเป็น array ที่ว่างเปล่า






isset() สามารถตรวจสอบตัวแปรได้ทีละหลายๆ ตัว แต่ empty() ไม่
ซึ่งจะให้ผลเป็นจริงก็ต่อเมื่อ ตัวแปรทุกตัวที่ตรวจสอบนั้นได้ถูกกำหนดขึ้น และมีค่าที่ไม่ใช่ null


$a = 1; $b = 2; $c = 3; isset($a, $b, $c); // true เพราะทุกตัวมีค่าที่ไม่ใช่ null isset($a, $b, $c, $d); // false เพราะ $d ยังไม่ถูกกำหนดขึ้น $c = null; isset($a, $b, $c); // false เพราะ $c เป็น null empty($a, $b, $c); // Parse error เพราะ empty() ตรวจตัวแปรได้ทีละตัว






นอกจากการใช้เพื่อประโยชน์ข้างต้นแล้ว จะใช้เพื่ออะไรได้อีก และทำไมถึงควรใช้?

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

ประกาศตัวแปรขึ้นมา 1 ตัว เพื่อเก็บสถานะนั้น

$done = false;



และในส่วนของโปรแกรม อาจจะมีการทำงานที่กำหนดให้ตัวแปรนี้มีค่าที่ให้ผลเป็นจริงเมื่อตรวจสอบ

$done = true;



และหลังจากนั้นเราก็จะตรวจสอบค่าของตัวแปรนี้ และทำอะไรบางอย่างหากเงื่อนไขเป็นจริง


if ($done) { // do something }



ซึ่งหากมีเงื่อนไขหรือสถานะหลายอย่าง ก็ต้องประกาศตัวแปรหลายตัว

$sent = false; $saved = false; $cancelled = false;



ในกรณีนี้เราสามารถใช้ isset() เพื่อทำให้ทุกอย่างง่ายขึ้น

เพราะ isset() ตรวจสอบการมีอยู่ของตัวแปร ดังนั้นจึงไม่จำเป็นต้องประกาศตัวแปรก่อนที่จะตรวจสอบ

เราจึงสามารถใช้ isset() ในการตรวจสอบสถานะอะไรบางอย่างได้โดยที่ไม่ต้องประกาศตัวแปรไว้ก่อน


if (isset($sent)) { // do something } if (isset($saved)) { // do something } if (isset($cancelled)) { // do something } // ก่อนหน้านี้จะมีการสร้างตัวแปร $sent, $saved, $cancelled หรือไม่นั้น ไม่สำคัญ // แต่หากมีการกำหนดให้ตัวแปรเหล่านี้มีค่าที่ไม่ใช่ null เงื่อนไขก็จะเป็นจริงทันที // ทำให้ประหยัดหน่วยความจำที่จะต้องใช้ไปกับตัวแปรเหล่านี้






ความเร็วในการทำงานล่ะ เรียกใช้ฟังก์ชั่น isset()/empty() เยอะแยะมากมายในโปรแกรมแบบนี้จะไม่ทำให้ช้าหรือ?

คำตอบคือไม่เลยครับ

เพราะ isset()/empty() เป็นโครงสร้างภาษา (Language Construct) ไม่ใช่ฟังก์ชั่น (ถึงแม้จะมีรูปร่างหน้าตาเหมือนฟังก์ชั่น)

และแม้จะใช้การตรวจสอบตัวแปรแบบปกติ ก็ไม่ได้เร็วไปกว่า isset()/empty() เท่าไหร่เลย


$a = true; $t = microtime(true); for ($i = 0; $i < 1000000; ++$i) { if (!$a) { } } echo microtime(true) - $t . "<br />\n"; $t = microtime(true); for ($i = 0; $i < 1000000; ++$i) { if (empty($a)) { } } echo microtime(true) - $t . "<br />\n";



นอกจากนี้เรายังสามารถใช้ isset() ในการตรวจสอบว่า array หรือสตริงมีขนาดน้อยกว่า หรือมากกว่าที่กำหนดหรือไม่ ซึ่งทำงานได้เร็วกว่าการใช้ฟังก์ชั่นเพื่อตรวจสอบ

// ปกติเราคงจะตรวจสอบความยาวสตริงด้วย strlen() if (strlen($str) > 100) { // ตรวจสอบว่าความยาวมากกว่า 100 หรือไม่ echo "ยาวเกินไป"; } // แต่เราก็สามารถใช้ isset() ตรวจสอบได้เหมือนกัน ซึ่งทำงานได้เร็วกว่า if (isset($str[100])) { // ตรวจสอบว่ามีตัวอักษรที่ 101 ถูกกำหนดไว้แล้วหรือยัง (ตำแหน่งตัวอักษรเริ่มต้นที่ 0) echo "ยาวเกินไป"; }





ศึกษาเพิ่มเติม




ติดตามบทความล่าสุดของผู้เขียนได้ที่ phpinfo() Facebook Page







   
Share
Bookmark.   

  By : phpinfo()
  Article : บทความเป็นการเขียนโดยสมาชิก หากมีปัญหาเรื่องลิขสิทธิ์ กรุณาแจ้งให้ทาง webmaster ทราบด้วยครับ
  Score Rating :
  Create Date : 2013-02-13
  Download : No files
Sponsored Links
ASP.Net ส่ง Line Notify ข้อความเข้า Inbox ส่วนตัวหรือ Group ง่ายๆ ด้วย .Net (VB.Net/C#)
ASP.Net ส่ง Line Notify ข้อความเข้า Inbox ส่วนตัวหรือ Group ง่ายๆ ด้วย .Net (VB.Net/C#)
วิธีการใช้ Line ส่งข้อความเข้า Line ส่วนตัว หรือ ส่งข้อความเข้า Line Group ด้วย ASP.Net (VB.Net/C#) เหมาะสำหรับการแจ้งเตือนกิจกรรมต่างๆ ที่ต้องการทราบ เช่น รายการสมัครสมาชิก, กิจกรรมที่เกิดขั้นบนเว็บ , รายการสั่งซื้อ
Rating : Update : 2019-04-25 10:04:32
C# DataGridView กับ Event  และ Method แบบ บ้านๆ
C# DataGridView กับ Event และ Method แบบ บ้านๆ
C# DataGridView กับ Event และ Method แบบ บ้านๆ
Rating : Update : 2019-07-08 13:53:09
เปลี่ยนจาก MySQL ไปเป็น MySQLi with Prepare Statement
เปลี่ยนจาก MySQL ไปเป็น MySQLi with Prepare Statement
สืบเนื่องมาจากต้องเพิ่มความปลอกภัยของระบบมากยิ่งขึ้นโดยใช้มาตราฐายของ Open Web Application Security Project (OWASP) หนึ่งในปัญหาหลักที่พบนั่นก็คือเรื่องของ (‘SQL Injection’) (CWE-89)
Rating : Update : 2019-03-18 13:58:49
(C#) ASP.NET User Authentication/Login Form แบบ SQL Server + Windows Authentication
(C#) ASP.NET User Authentication/Login Form แบบ SQL Server + Windows Authentication
บทความเรื่อง (C#) ASP.NET User Authentication/Login Form ในรูปแบบ SQL Server + Windows Authentication ครับ
Rating : Update : 2019-05-10 09:59:53
PHP ใช้สำหรับเปลี่ยนรูปแบบของวันตามที่เรากำหนด เช่น 2018-3-10 -> 10 Mar 2018 หรือ 10 March 2
PHP ใช้สำหรับเปลี่ยนรูปแบบของวันตามที่เรากำหนด เช่น 2018-3-10 -> 10 Mar 2018 หรือ 10 March 2
ฟังก์ชั่นนี้ใช้สำหรับเปลี่ยนรูปแบบของวันตามที่เรากำหนด เช่น 2018-3-10 -> 10 Mar 2018 หรือ 10 March 2018
Rating : Update : 2018-03-11 10:49:35
C# เปลี่ยนชื่อ เพลง ด้วย regext
C# เปลี่ยนชื่อ เพลง ด้วย regext
C# เปลี่ยนชื่อ เพลง ด้วย regext หลายคนมักเจอ เวลาโหลดเพลงมาแล้วมักจะมีตัวเลขข้างหน้าติดมาด้วย เรามาลบมันออกกัน
Rating : Update : 2019-05-03 12:54:52
ตรวจสอบความปลอดภัยของระบบ และเว็บไซต์ ตามมาตราฐานของ OWASP
ตรวจสอบความปลอดภัยของระบบ และเว็บไซต์ ตามมาตราฐานของ OWASP
สืบเนื่องมาจากต้องเพิ่มความปลอกภัยของระบบมากยิ่งขึ้นโดยใช้มาตราฐายของ Open Web Application Security Project (OWASP) OWASP_Code_Review
Rating : Update : 2019-02-22 16:05:27
ThaiCreate.Com Forum


Comunity Forum Free Web Script
Jobs Freelance Free Uploads
Free Web Hosting Free Tools

สอน PHP ผ่าน Youtube ฟรี
สอน Android การเขียนโปรแกรม Android
สอน Windows Phone การเขียนโปรแกรม Windows Phone 7 และ 8
สอน iOS การเขียนโปรแกรม iPhone, iPad
สอน Java การเขียนโปรแกรม ภาษา Java
สอน Java GUI การเขียนโปรแกรม ภาษา Java GUI
สอน JSP การเขียนโปรแกรม ภาษา Java
สอน jQuery การเขียนโปรแกรม ภาษา jQuery
สอน .Net การเขียนโปรแกรม ภาษา .Net
Free Tutorial
สอน Google Maps Api
สอน Windows Service
สอน Entity Framework
สอน Android
สอน Java เขียน Java
Java GUI Swing
สอน JSP (Web App)
iOS (iPhone,iPad)
Windows Phone
Windows Azure
Windows Store
Laravel Framework
Yii PHP Framework
สอน jQuery
สอน jQuery กับ Ajax
สอน PHP OOP (Vdo)
Ajax Tutorials
SQL Tutorials
สอน SQL (Part 2)
JavaScript Tutorial
Javascript Tips
VBScript Tutorial
VBScript Validation
Microsoft Access
MySQL Tutorials
-- Stored Procedure
MariaDB Database
SQL Server Tutorial
SQL Server 2005
SQL Server 2008
SQL Server 2012
-- Stored Procedure
Oracle Database
-- Stored Procedure
SVN (Subversion)
แนวทางการทำ SEO
ปรับแต่งเว็บให้โหลดเร็ว


สุดยอด Source Code V2.0
 

แจ้งชำระเงิน/โอนเงิน
 

Hit Link
   







Load balance : Server 02
ThaiCreate.Com Logo
© www.ThaiCreate.Com. 2003-2019 All Rights Reserved.
ไทยครีเอทบริการ จัดทำดูแลแก้ไข Web Application ทุกรูปแบบ (PHP, .Net Application, VB.Net, C#)
[Conditions Privacy Statement] ติดต่อโฆษณา 081-987-6107 , 08-9968-0655 อัตราราคา คลิกที่นี่