พร็อพเพอร์ตีและเมธอดแบบ static
ใช้สมาชิกแบบ static และทำความเข้าใจว่าเมื่อใดควรเรียกใช้โดยไม่ต้องมีอินสแตนซ์
พร็อพเพอร์ตีและเมธอดแบบ static เป็นบทเรียน PHP Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน PHP Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส PHP Academy มีบทเรียนทั้งหมด 4 บทเรียน
บทนำ: พร็อพเพอร์ตีและเมธอดแบบสแตติก
สมาชิกแบบสแตติกเป็นของคลาสเอง ไม่ได้เป็นของอินสแตนซ์ใดอินสแตนซ์หนึ่งโดยเฉพาะ เข้าถึงสมาชิกเหล่านี้ด้วย ClassName::member หรือ self:: ภายในคลาส สมาชิกเหล่านี้ใช้ร่วมกันในทุกอินสแตนซ์
แนวคิดหลัก
แนวคิดสำคัญของพร็อพเพอร์ตีและเมธอดแบบสแตติก:
- ประกาศด้วยคีย์เวิร์ด
static - เข้าถึงด้วย
::ซึ่งเป็นตัวดำเนินการระบุขอบเขต - ใช้
self::ภายในคลาส และใช้ClassName::จากภายนอก - ใช้การผูกแบบสแตติกภายหลังด้วย
static::
พร็อพเพอร์ตีแบบสแตติก
ตัวอย่าง:
<?php
class AppConfig {
private static array $settings = [];
public static function set(string $key, mixed $val): void {
self::$settings[$key] = $val;
}
public static function get(string $key, mixed $default = null): mixed {
return self::$settings[$key] ?? $default;
}
}
AppConfig::set('debug', true);
echo AppConfig::get('debug') ? 'debug on' : 'debug off';เมธอดแบบสแตติก
ต่อไป:
<?php
class MathHelper {
public static function clamp(float $v, float $min, float $max): float {
return max($min, min($max, $v));
}
public static function lerp(float $a, float $b, float $t): float {
return $a + ($b - $a) * $t;
}
}
echo MathHelper::clamp(150, 0, 100); // 100
echo MathHelper::lerp(0, 100, 0.5); // 50รูปแบบซิงเกิลตัน
ฝึกปฏิบัติ:
<?php
class Database {
private static ?Database $instance = null;
private function __construct() {
echo 'Connected to DB';
}
public static function getInstance(): self {
if (self::$instance === null) {
self::$instance = new self();
}
return self::$instance;
}
}
$db1 = Database::getInstance(); // 'Connected to DB'
$db2 = Database::getInstance(); // no output — same instance
echo ($db1 === $db2) ? 'same' : 'different'; // sameตัวนับแบบสแตติก
เจาะลึก:
<?php
class EventEmitter {
private static int $instanceCount = 0;
public function __construct() {
self::$instanceCount++;
}
public static function count(): int {
return self::$instanceCount;
}
}
new EventEmitter();
new EventEmitter();
new EventEmitter();
echo EventEmitter::count(); // 3การผูกแบบสแตติกภายหลัง
การใช้งานขั้นสูง:
<?php
class ParentClass {
public static function create(): static {
return new static(); // resolves to calling subclass
}
public function getClass(): string {
return static::class; // late static binding
}
}
class ChildClass extends ParentClass {}
$obj = ChildClass::create();
echo $obj->getClass(); // ChildClassโรงงานแบบสแตติก
รูปแบบที่ใช้ในสถานการณ์จริง:
<?php
class Response {
private function __construct(
private int $status,
private mixed $body
) {}
public static function ok(mixed $data): self {
return new self(200, $data);
}
public static function notFound(): self {
return new self(404, ['error' => 'Not Found']);
}
public function toJson(): string {
return json_encode(['status' => $this->status, 'body' => $this->body]);
}
}
echo Response::ok(['users' => []])->toJson();ข้อแลกเปลี่ยนระหว่างแบบสแตติกกับแบบอินสแตนซ์
แนวทางปฏิบัติที่ดี:
<?php
// Static: no object needed, but harder to test/mock
class Validator {
public static function isEmail(string $s): bool {
return (bool) filter_var($s, FILTER_VALIDATE_EMAIL);
}
}
// Instance: injectable dependency, testable
class ValidatorService {
public function isEmail(string $s): bool {
return (bool) filter_var($s, FILTER_VALIDATE_EMAIL);
}
}
// Prefer instance classes in larger applicationsรูปแบบการใช้งานจริง
รวบรวมเนื้อหาทั้งหมดเข้าด้วยกันด้วยรูปแบบการใช้งานจริงสำหรับพร็อพเพอร์ตีและเมธอดแบบสแตติก
ข้อผิดพลาดที่พบบ่อย
หลีกเลี่ยงข้อผิดพลาดที่พบบ่อยเหล่านี้เมื่อใช้พร็อพเพอร์ตีและเมธอดแบบสแตติก:
- สมาชิกแบบสแตติกใช้ร่วมกันในทุกอินสแตนซ์
- ควรใช้การผูกแบบสแตติกภายหลัง (static::) แทน self:: ในคลาสที่สืบทอดได้
- ซิงเกิลตันเป็นรูปแบบที่ใช้กันทั่วไป แต่บางครั้งก็ถูกใช้มากเกินความจำเป็น
- เมธอดแบบสแตติกจำลองได้ยากกว่าในการทดสอบหน่วย
ตรวจสอบความเข้าใจอย่างรวดเร็ว
คีย์เวิร์ดใดใช้เข้าถึงพร็อพเพอร์ตีแบบสแตติกภายในคลาส โดยคำนึงถึงการสืบทอด (การผูกแบบสแตติกภายหลัง)
สรุป: พร็อพเพอร์ตีและเมธอดแบบสแตติก
คุณได้เรียนรู้เรื่องพร็อพเพอร์ตีและเมธอดแบบสแตติกแล้ว ประเด็นสำคัญที่ควรจำ:
- สมาชิกแบบสแตติกใช้ร่วมกันในทุกอินสแตนซ์
- ควรใช้การผูกแบบสแตติกภายหลัง (static::) แทน self:: ในคลาสที่สืบทอดได้
- ซิงเกิลตันเป็นรูปแบบที่ใช้กันทั่วไป แต่บางครั้งก็ถูกใช้มากเกินความจำเป็น
- เมธอดแบบสแตติกจำลองได้ยากกว่าในการทดสอบหน่วย
คำถามที่พบบ่อย
บทเรียน “พร็อพเพอร์ตีและเมธอดแบบ static” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “พร็อพเพอร์ตีและเมธอดแบบ static” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส PHP Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส PHP Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “พร็อพเพอร์ตีและเมธอดแบบ static”
ใช้สมาชิกแบบ static และทำความเข้าใจว่าเมื่อใดควรเรียกใช้โดยไม่ต้องมีอินสแตนซ์ คุณปฏิบัติ PHP Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน PHP Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน PHP Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน
บทเรียน “พร็อพเพอร์ตีและเมธอดแบบ static” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน PHP Academy นี้ได้ไหม
ได้ บทเรียน PHP Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- คลาส พร็อพเพอร์ตี และเมธอด
- คอนสตรักเตอร์และดีสตรักเตอร์
- พร็อพเพอร์ตีและเมธอดแบบ static
- ภาพรวมเมธอดมหัศจรรย์