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,784

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
วิธีการ Convert String ไปเป็น Date Time ของ SQL Server ในรูปแบบต่างๆ
วิธีการ Convert String ไปเป็น Date Time ของ SQL Server ในรูปแบบต่างๆ
Execute the following T-SQL scripts in Microsoft SQL Server Management Studio (SSMS) Query Editor to demonstrate T-SQL CONVERT and CAST functions in transforming string SQL date formats, string time & string datetime data to datetime data type. Practical examples for T-SQL DATE / DATETIME functions.
Rating : Update : 2018-08-10 13:01:19
แก้ปัญหา Facebook Like หายเมื่อเปลี่ยนจาก HTTP เป็น HTTPS
แก้ปัญหา Facebook Like หายเมื่อเปลี่ยนจาก HTTP เป็น HTTPS
ในช่วงนี้หลายๆ เว็บกำลังเปลี่ยน เว็บจาก HTTP เป็น HTTPS และถ้ามีการใช้ Plugin Facebook Like / Shared คงจะเจอปัยหา Line หายกัน
Rating : Update : 2018-09-18 15:14:43
#share บันทึกบันทึก: คำสั่งที่ใช้จัดการ package ใน alpine linux
#share บันทึกบันทึก: คำสั่งที่ใช้จัดการ package ใน alpine linux
#share บันทึกบันทึก: คำสั่งที่ใช้จัดการ package ใน alpine linux
Rating : Update : 2018-01-16 09:21:40
7 เหตุผล ที่ไม่ควรใช้ SELECT * เพื่อ Query ข้อมูล
7 เหตุผล ที่ไม่ควรใช้ SELECT * เพื่อ Query ข้อมูล
เชื่อว่า Programmer ทุกคน คงเคยใช้คำสั่ง SQL กันมาบ้างแล้ว และคำสั่งพื้นฐานที่ทุกคนถนัดและมักจะใช้กันบ่อยก็คือ SELECT * แต่วันนี้เรามาดูกันว่า คำสั่งที่เรามักใช้งานกันบ่อยๆ นี้ อาจจะไม่ค่อยเหมาะที่จะใช้เท่าไรนัก แต่จะมีเหตุผลอะไรบ้าง เราไปดูกันเลยครับ
Rating : Update : 2019-03-18 13:57:30
เปลี่ยนจาก 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# มา โหลด โน่น โหลดนี่กันเถอะ (โปรแกรมดาวน์โหลดด้วย C#)
C# มา โหลด โน่น โหลดนี่กันเถอะ (โปรแกรมดาวน์โหลดด้วย C#)
ผมเองเป็นคนชอบโหลบ ทั้ง หนัง เพลง การ์ตูนต่างๆ ดังนั้น ผมจึงมักที่จะเขียนโค้ดสำหรับไว้โหลด โน่น โหลดนี่เสมอ โดยใช้หลักการของ System.Text.RegularExpressions
Rating : Update : 2019-05-16 20:29:51
(C#) ASP.NET SQL Server Connect to Database แบบ Windows Authentication
(C#) ASP.NET SQL Server Connect to Database แบบ Windows Authentication
บทความเรื่อง (C#) ASP.NET SQL Server Connect to Database ด้วยการติดต่อ ASP.NET กับ SQL Server ในรูปแบบ Windows Authentication ครับ
Rating : Update : 2019-05-10 10:00:28
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 อัตราราคา คลิกที่นี่