แนะนำตัว
ในคลาส PHP คุณสมบัติและวิธีการที่ประกาศด้วยคำหลักคงที่ไม่สามารถเข้าถึงได้โดยวัตถุด้วยความช่วยเหลือของตัวดำเนินการ -> อันที่จริง วัตถุไม่จำเป็นต้องเข้าถึงอินสแตนซ์ของคลาสใดๆ การมองเห็นเริ่มต้นของไอเท็มคงที่ในคลาสเป็นแบบสาธารณะ
คุณสมบัติคงที่
ในการเข้าถึงคุณสมบัติสแตติกจากคลาสภายนอก เราจำเป็นต้องใช้ตัวดำเนินการแก้ไขขอบเขต (::) พร้อมกับชื่อของคลาส ตัวแปรสตริงที่ประเมินชื่อคลาสยังสามารถระบุคุณสมบัติสแตติกได้
<?php class testclass{ static $name="test"; } echo testclass::$name; $var="testclass"; echo $var::$name; ?>
ในการใช้คุณสมบัติคงที่ภายในวิธีการใด ๆ ของคลาสเดียวกัน ให้ใช้ ตนเอง คีย์เวิร์ดแทน -> โอเปอเรเตอร์ที่ใช้สำหรับเข้าถึงคุณสมบัติของอินสแตนซ์
<?php class testclass{ static $name="test"; public function test(){ echo self::$name; } } $obj=new testclass(); $obj->test(); ?>
คุณสมบัติสแตติกใดๆ ที่ประกาศในคลาสพาเรนต์สามารถอ้างถึงภายในเมธอดคลาสย่อยได้โดยใช้ พาเรนต์ คำหลักพร้อมกับตัวดำเนินการความละเอียดขอบเขต
<?php class testclass{ static $name="test"; public function test(){ echo self::$name; } } class myclass extends testclass{ public function mytest(){ echo parent::$name; } } $obj=new myclass(); $obj->mytest(); ?>
วิธีการคงที่
เมื่อเมธอดถูกประกาศเป็นสแตติก ตัวแปรหลอก $this ไม่สามารถใช้ได้ ดังนั้น แอ็ตทริบิวต์อินสแตนซ์ของคลาสไม่สามารถเข้าถึงได้ในนั้น วิธีสแตติกถูกเรียกตามชื่อของคลาสพร้อมกับตัวดำเนินการความละเอียดขอบเขต
ในตัวอย่างต่อไปนี้ คลาสมีคุณสมบัติคงที่ $count ซึ่งเพิ่มขึ้นทุกครั้งที่คอนสตรัคเตอร์ถูกดำเนินการ (เช่น สำหรับแต่ละอ็อบเจ็กต์) ภายในคลาสมีฟังก์ชันสแตติกที่ดึงค่าของคุณสมบัติสแตติก
ตัวอย่าง
<?php class testclass{ static $count=0; function __construct(){ self::$count++; } static function showcount(){ echo "count = " . self::$count; } } $a=new testclass(); $b=new testclass(); $c=new testclass(); testclass::showcount(); ?>
ผลลัพธ์
สิ่งนี้จะสร้างผลลัพธ์ต่อไปนี้ -
count = 3