square-terminalStatic 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 เป็นการเรียกใช้งานภายนอก Class

  • self::$property เป็นการเรียกใช้งานภายใน Class

  • parent::$property เป็นการเรียกใช้งานภายใน Child Class หรือ Class Inheritance

ข้อดี

  • เหมาะกับการเก็บข้อมูลที่ต้องการแชร์ระหว่างทุก object ของคลาส เช่น การนับจำนวนครั้งที่มีการสร้างวัตถุ

  • สามารถเข้าถึงค่าหรือเมธอดบางอย่างได้ทันทีจากคลาส โดยไม่ต้องสร้างวัตถุ เช่น การเข้าถึงค่า configuration ของระบบ

  • ช่วยลดการเก็บข้อมูลซ้ำในแต่ละ object เมื่อไม่จำเป็นต้องสร้างวัตถุหลายตัว

ข้อเสีย

  • ถ้าแก้ไขค่าในที่ใดที่หนึ่ง จะมีผลกระทบต่อทุกวัตถุที่ใช้งานคลาสนั้น

  • ไม่สามารถใช้ $this เนื่องจาก $this หมายถึง object แต่ Static Properties เป็นของคลาสโดยตรง

ตัวอย่าง Code PHP

chevron-rightคำอธิาย Codehashtag
  • Class Foo: ประกาศคลาสชื่อ Foo เป็นที่เก็บข้อมูลและฟังก์ชันที่เกี่ยวข้อง

  • Static Property: public static $my_static เป็น Static Property สามารถเข้าถึงได้โดยตรงจากคลาส โดยมีค่าเริ่มต้นเป็น 'foo'

  • Method staticValue(): เมธอดนี้ใช้เพื่อเข้าถึง Static Property โดยใช้ self::$my_static หมายถึงการเข้าถึง Static Property จากภายในคลาสตัวเอง

  • Class Bar: ประกาศคลาสชื่อ Bar สืบทอดมาจากคลาส Foo

  • Method 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

chevron-rightคำอธิาย Codehashtag
  • Class Bicycle: ประกาศคลาสชื่อ Bicycle ที่เก็บข้อมูลเกี่ยวกับจักรยาน

  • Static Variable: private static int numberOfBicycles ใช้เพื่อเก็บจำนวนจักรยานที่สร้างขึ้น โดยมีค่าเริ่มต้นเป็น 0

  • Constructor: เมื่อมีการสร้าง 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

chevron-rightคำอธิาย Codehashtag
  • 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

chevron-rightคำอธิาย Codehashtag
  • Class Dog: ประกาศคลาสชื่อ Dog ที่มี Class Variable ชื่อ kind ซึ่งแชร์ข้อมูลระหว่างทุก instance

  • Constructor: ในเมธอด __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

คุณสมบัติ
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 ความหมายว่าไม่มีการระบุวันที่เผยแพร่หรือวันที่อ้างอิงที่ชัดเจนในแหล่งข้อมูล

chevron-rightPHPhashtag

เนื้อหา

  • Static Properties in PHP: Tutorialspoint. (n.d.). PHP static properties [Tutorialspoint]. Tutorialspointarrow-up-right

  • Static Properties: pankaj_gupta_gfg. (2024, 19 February). What is Static Keyword in PHP? (Static Properties) [geeksforgeeks]. geeksforgeeksarrow-up-right

  • Static Properties in PHP: PHP.net. (n.d.). Static keyword (Static properties) [PHP.net]. PHP.netarrow-up-right

  • การเข้าถึง Static Properties: W3Schools. (n.d.). PHP - Static Properties [W3Schools]. W3Schoolsarrow-up-right

Code

  • ตัวอย่าง Code PHP: PHP.net. (n.d.). Static keyword (Example #2 Static property example) [PHP.net]. PHP.netarrow-up-right

chevron-rightJavahashtag

เนื้อหา

  • เปรียบเทียบกับภาษา Java: Oracle. (n.d.). Understanding Class Members (Class variables) [Oracle Docs]. Oraclearrow-up-right

  • เปรียบเทียบกับภาษา Java: Javatpoint. (n.d.). Java static field initialization [Javatpoint]. Javatpointarrow-up-right

  • เปรียบเทียบกับภาษา Java: Baeldung. (2024, January 8). A Guide to the Static Keyword in Java (The static Fields (Or Class Variables)) [Baeldung]. baeldungarrow-up-right

  • เปรียบเทียบกับภาษา Java: Gaurav Miglani. (2024, 04 October). Static keyword in Java (Static variables) [geeksforgeeks]. geeksforgeeksarrow-up-right

Code

  • ตัวอย่าง Code Java: Oracle. (n.d.). Understanding Class Members (Class variables) [Oracle Docs]. Oraclearrow-up-right

chevron-rightChashtag

เนื้อหา

  • เปรียบเทียบกับภาษา C: GeeksforGeeks. (2024, 11 October). Static Variables in C [geeksforgeeks]. geeksforgeeksarrow-up-right

  • เปรียบเทียบกับภาษา C: cppreference. (2023, 06 March). C keywords: static [cppreference]. cppreferencearrow-up-right

  • เปรียบเทียบกับภาษา C: Tutorialspoint. (n.d.). Static Variables in C [Tutorialspoint]. Tutorialspointarrow-up-right

Code

chevron-rightPythonhashtag

เนื้อหา

  • เปรียบเทียบกับภาษา Python: GeeksforGeeks. (2024, 30 September). Class or Static Variables in Python [geeksforgeeks]. geeksforgeeksarrow-up-right

  • เปรียบเทียบกับภาษา Python: Tutorialspoint. (n.d.). Python - Class Attributes [Tutorialspoint]. Tutorialspointarrow-up-right

Code

  • ตัวอย่าง Code Python: Python.org. (2024, 12 October). Class and instance variables [Python Docs]. Pythonarrow-up-right

chevron-rightSlidehashtag

Last updated