Static Properties
สุภารักษ์ เมธศาสตร์ 640710583
Static Properties in PHP
การประกาศ Properties ของคลาสเป็นแบบ “static” จะทำให้สามารถเข้าถึงได้โดยไม่ต้องสร้าง instance ของคลาส นอกจากนี้ยังสามารถเข้าถึงได้จากภายใน object ของคลาสที่ถูกสร้างขึ้นแล้ว
Static Properties คือ คุณสมบัติของคลาส (Class Properties) ที่สามารถเข้าถึงได้โดยตรงจากตัวคลาสเอง โดยไม่จำเป็นต้องสร้าง instance (object) ของคลาสนั้นก่อน โดยทั่วไปเมื่อเราต้องการเข้าถึงคุณสมบัติหรือเมธอดของคลาส เราต้องสร้างวัตถุขึ้นมาก่อน แล้วจึงใช้ $object->property แต่สำหรับ Static Properties เราสามารถเข้าถึงได้ทันทีโดยใช้ class_name::$property ผ่าน Scope Resolution Operator (::) ซึ่งมีประโยชน์ในกรณีที่ต้องการเก็บข้อมูลหรือค่าที่ใช้ร่วมกันระหว่างวัตถุทั้งหมดของคลาส
การเข้าถึง Static Properties
class_name::$propertyเป็นการเรียกใช้งานภายนอก Classself::$propertyเป็นการเรียกใช้งานภายใน Classparent::$propertyเป็นการเรียกใช้งานภายใน Child Class หรือ Class Inheritance
ข้อดี
เหมาะกับการเก็บข้อมูลที่ต้องการแชร์ระหว่างทุก object ของคลาส เช่น การนับจำนวนครั้งที่มีการสร้างวัตถุ
สามารถเข้าถึงค่าหรือเมธอดบางอย่างได้ทันทีจากคลาส โดยไม่ต้องสร้างวัตถุ เช่น การเข้าถึงค่า configuration ของระบบ
ช่วยลดการเก็บข้อมูลซ้ำในแต่ละ object เมื่อไม่จำเป็นต้องสร้างวัตถุหลายตัว
ข้อเสีย
ถ้าแก้ไขค่าในที่ใดที่หนึ่ง จะมีผลกระทบต่อทุกวัตถุที่ใช้งานคลาสนั้น
ไม่สามารถใช้
$thisเนื่องจาก$thisหมายถึง object แต่ Static Properties เป็นของคลาสโดยตรง
ตัวอย่าง Code PHP
คำอธิาย Code
Class Foo: ประกาศคลาสชื่อ
Fooเป็นที่เก็บข้อมูลและฟังก์ชันที่เกี่ยวข้องStatic Property:
public static $my_staticเป็น Static Property สามารถเข้าถึงได้โดยตรงจากคลาส โดยมีค่าเริ่มต้นเป็น'foo'Method staticValue(): เมธอดนี้ใช้เพื่อเข้าถึง Static Property โดยใช้
self::$my_staticหมายถึงการเข้าถึง Static Property จากภายในคลาสตัวเองClass Bar: ประกาศคลาสชื่อ
BarสืบทอดมาจากคลาสFooMethod fooStatic(): เมธอดนี้ใช้
parent::$my_staticเพื่อเข้าถึง Static Property จากคลาสแม่ (Foo) ทำให้คลาสลูกสามารถใช้ Static Property ของคลาสแม่ได้ใช้
Foo::$my_staticเพื่อแสดงค่า Static Property โดยตรงจากคลาสFooสร้าง instance ของ
FooและเรียกเมธอดstaticValue()เพื่อแสดงค่า Static Propertyแสดงค่า Static Property จากคลาส
BarและเรียกเมธอดfooStatic()เพื่อคืนค่าจากคลาสแม่
Output
การเรียกใช้งาน static จะทำผ่าน Foo::$my_static ตามที่กล่าวไปข้างต้น
เปรียบเทียบกับภาษา Java/C/Python
เปรียบเทียบกับภาษา Java
Static Properties ใน Java จะเรียกว่า Static Fields หรือ Static Variable โดยใช้ Keyword คำว่า "static" เช่นเดียวกับ PHP ซึ่งเป็นคุณสมบัติของคลาสที่แชร์โดยทุก instance (object) ของคลาสนั้น มักใช้สำหรับค่าคงที่หรือตัวนับที่ทุก instance (object) ต้องใช้ร่วมกัน
ตัวอย่าง Code Java
คำอธิาย Code
Class Bicycle: ประกาศคลาสชื่อ
Bicycleที่เก็บข้อมูลเกี่ยวกับจักรยานStatic Variable:
private static int numberOfBicyclesใช้เพื่อเก็บจำนวนจักรยานที่สร้างขึ้น โดยมีค่าเริ่มต้นเป็น 0Constructor: เมื่อมีการสร้าง instance ของ
Bicycleตัวนับจำนวนจักรยานจะเพิ่มขึ้น และ ID จะถูกกำหนดให้กับจักรยานใหม่Method getID(): คืนค่า ID ของจักรยาน
Main Method: สร้างจักรยานหนึ่งคันและแสดงจำนวนจักรยานทั้งหมดที่ถูกสร้าง
Output
การเรียกใช้งาน static จะทำผ่าน class_name.staticVariable ซึ่งเป็นเรื่องปกติในการใช้งานสำหรับสิ่งที่ต้องการแชร์ข้อมูลระหว่าง object
ความเหมือน: ทั้ง PHP และ Java สามารถเข้าถึง Static Properties หรือ Static Fields ได้ผ่านคลาสโดยตรงโดยไม่ต้องสร้าง object
ความแตกต่าง: Java อาจมีกฎและความเข้มงวดมากกว่าในการจัดการเรื่อง encapsulation และการใช้งาน static ในระดับโปรแกรมที่ซับซ้อน
เปรียบเทียบกับภาษา C
Static Properties ในเชิง OOP ไม่มีใน C เนื่องจาก C เป็นภาษาเชิงโครงสร้าง แต่ใน C มี Static Variables ที่ใช้งานในระดับฟังก์ชันหรือไฟล์ โดยจะเริ่มต้นค่าเพียงครั้งเดียวและเก็บรักษาค่าไว้จนกว่าจะสิ้นสุดโปรแกรม ใช้ Keyword คำว่า "static" ในการประกาศตัวแปรคงที่
ตัวอย่าง Code C
คำอธิาย Code
Function fun(): มีตัวแปร
static int countที่จะคงค่าระหว่างการเรียกใช้งานของฟังก์ชันStatic Variable: ตัวแปรนี้จะไม่ถูกรีเซ็ตทุกครั้งที่ฟังก์ชันถูกเรียก ใช้เพื่อเก็บค่าที่ต้องการคงอยู่
Main Function: เมื่อเรียกใช้
fun()จะคืนค่าจำนวนครั้งที่ถูกเรียก (1 ครั้งแรก และ 2 ครั้งที่สอง)
Output
ตัวแปรที่ใช้ Keyword static สามารถคงค่าไว้ได้ระหว่างการเรียกใช้ฟังก์ชันหลายครั้งในโปรแกรม ไม่เหมือนตัวแปรทั่วไปที่จะถูกรีเซ็ตทุกครั้งที่เรียกฟังก์ชัน
ความเหมือน: C มี Static Variables ที่คงค่าระหว่างการเรียกฟังก์ชัน เหมือนกับการคงค่าของ Static Properties ใน PHP
ความแตกต่าง: C จะเน้นที่การควบคุมขอบเขตการมองเห็นของตัวแปร ไม่มีการใช้งาน Static Properties ในเชิง OOP เพราะมันไม่ใช่ภาษา OOP
เปรียบเทียบกับภาษา Python
Static Properties ไม่มีใน Python แต่มีสิ่งที่คล้ายคลึงกันคือ Class Variables ซึ่งเป็นตัวแปรที่แชร์ระหว่าง object ทั้งหมดในคลาสเดียวกัน โดยไม่ใช้ Keyword คำว่า "static"
ตัวอย่าง Code Python
คำอธิาย Code
Class Dog: ประกาศคลาสชื่อ
Dogที่มี Class Variable ชื่อkindซึ่งแชร์ข้อมูลระหว่างทุก instanceConstructor: ในเมธอด
__init__จะมีself.nameเป็น Instance Variable ที่เก็บชื่อของสุนัขแต่ละตัวการเข้าถึง Class Variable:
d.kindและe.kindจะคืนค่าเดียวกัน เพราะเป็น Class Variableการเข้าถึง Instance Variable:
d.nameและe.nameคืนค่าชื่อที่เฉพาะเจาะจงสำหรับแต่ละ instance
Output
การเข้าถึงทำได้ผ่าน class_name.classVariable ใน Python ซึ่งการทำงานคล้ายกับ PHP และ Java แต่มีความยืดหยุ่นมากกว่า เพราะ Python ไม่บังคับให้ประกาศชนิดของตัวแปรและ Syntax ของ Python ก็ดูเรียบง่ายกว่า
ความเหมือน: Python ใช้ Class Variables แทน Static Properties เพื่อแชร์ข้อมูลระหว่าง object ของคลาส
ความแตกต่าง: Python ยืดหยุ่นกว่ามากในเรื่องของการจัดการ Properties และไม่ต้องประกาศ Static Properties เหมือนภาษาที่เน้น OOP มากกว่า
สรุปการเปรียบเทียบภาษา PHP กับภาษา Java/C/Python
ชื่อที่ใช้
Static Properties
Static Fields/Static Variables
Static Variables
Class Variables
การเข้าถึง
class_name::$property
class_name.staticVariable
ไม่มีการใช้งาน OOP
class_name.classVariable
ความยืดหยุ่น
จำกัด
มีความเข้มงวดสูงในการใช้งาน
ไม่มีการใช้งาน OOP
ยืดหยุ่นมาก
ตัวอย่างการใช้งาน
Foo::$my_static
Bicycle.numberOfBicycles
static int count ในฟังก์ชัน
Dog.kind
ข้อดี
ใช้แชร์ข้อมูลระหว่างวัตถุ
ใช้สำหรับค่าคงที่หรือการนับ
เก็บค่าระหว่างการเรียกใช้ฟังก์ชัน
แชร์ข้อมูลโดยไม่ต้องประกาศ Static
ข้อเสีย
แก้ไขค่าจะมีผลกระทบต่อวัตถุทั้งหมด
ข้อกำหนดเข้มงวดในระดับโปรแกรม
ไม่มี OOP
ไม่มีการบังคับประเภทตัวแปร
สรุป
Code ในแต่ละภาษาสามารถแสดงให้เห็นถึงการใช้ Static Properties, Static Variables และ Class Variables ที่ช่วยในการแชร์ข้อมูลระหว่าง instance ต่าง ๆ โดยไม่ต้องสร้าง instance ใหม่ทุกครั้ง ขึ้นอยู่กับการออกแบบของแต่ละภาษา แต่ละภาษาอาจมีวิธีการและแนวทางในการใช้ที่แตกต่างกัน แต่เป้าหมายหลักยังคงเหมือนเดิมคือการจัดการข้อมูลที่แชร์กันอย่างมีประสิทธิภาพ
Slide
Video
Reference
(n.d.) ย่อมาจาก no date ความหมายว่าไม่มีการระบุวันที่เผยแพร่หรือวันที่อ้างอิงที่ชัดเจนในแหล่งข้อมูล
PHP
เนื้อหา
Static Properties in PHP: Tutorialspoint. (n.d.). PHP static properties [Tutorialspoint]. Tutorialspoint
Static Properties: pankaj_gupta_gfg. (2024, 19 February). What is Static Keyword in PHP? (Static Properties) [geeksforgeeks]. geeksforgeeks
Static Properties in PHP: PHP.net. (n.d.). Static keyword (Static properties) [PHP.net]. PHP.net
การเข้าถึง Static Properties: W3Schools. (n.d.). PHP - Static Properties [W3Schools]. W3Schools
Code
ตัวอย่าง Code PHP: PHP.net. (n.d.). Static keyword (Example #2 Static property example) [PHP.net]. PHP.net
Java
เนื้อหา
เปรียบเทียบกับภาษา Java: Oracle. (n.d.). Understanding Class Members (Class variables) [Oracle Docs]. Oracle
เปรียบเทียบกับภาษา Java: Javatpoint. (n.d.). Java static field initialization [Javatpoint]. Javatpoint
เปรียบเทียบกับภาษา Java: Baeldung. (2024, January 8). A Guide to the Static Keyword in Java (The static Fields (Or Class Variables)) [Baeldung]. baeldung
เปรียบเทียบกับภาษา Java: Gaurav Miglani. (2024, 04 October). Static keyword in Java (Static variables) [geeksforgeeks]. geeksforgeeks
Code
ตัวอย่าง Code Java: Oracle. (n.d.). Understanding Class Members (Class variables) [Oracle Docs]. Oracle
C
เนื้อหา
เปรียบเทียบกับภาษา C: GeeksforGeeks. (2024, 11 October). Static Variables in C [geeksforgeeks]. geeksforgeeks
เปรียบเทียบกับภาษา C: cppreference. (2023, 06 March). C keywords: static [cppreference]. cppreference
เปรียบเทียบกับภาษา C: Tutorialspoint. (n.d.). Static Variables in C [Tutorialspoint]. Tutorialspoint
Code
ตัวอย่าง Code C: GeeksforGeeks. (2024, 11 October). Static Variables in C [geeksforgeeks]. geeksforgeeks
Python
เนื้อหา
เปรียบเทียบกับภาษา Python: GeeksforGeeks. (2024, 30 September). Class or Static Variables in Python [geeksforgeeks]. geeksforgeeks
เปรียบเทียบกับภาษา Python: Tutorialspoint. (n.d.). Python - Class Attributes [Tutorialspoint]. Tutorialspoint
Code
ตัวอย่าง Code Python: Python.org. (2024, 12 October). Class and instance variables [Python Docs]. Python
Slide
เนื้อหา: Suparak Metthasat. (2024, 13 October). PHP-Static Properties [Giftbook]. Suparak Metthasat.gitbook
ตัวอย่าง Code PHP: PHP.net. (n.d.). Static keyword (Example #2 Static property example) [PHP.net]. PHP.net
ตัวอย่าง Code Java: Suparak Metthasat. (2024, 13 October). PHP-Static Properties (ตัวอย่าง Code Java) [Giftbook]. Suparak Metthasat.gitbook
ตัวอย่าง Code C: GeeksforGeeks. (2024, 11 October). Static Variables in C [geeksforgeeks]. geeksforgeeks
ตัวอย่าง Code Python: Python.org. (2024, 12 October). Class and instance variables [Python Docs]. Python
สรุปการเปรียบเทียบกับภาษา Java/C/Python: Suparak Metthasat. (2024, 13 October). PHP-Static Properties (สรุปการเปรียบเทียบภาษา PHP กับภาษา Java/C/Python) [Giftbook]. Suparak Metthasat.gitbook
Last updated