0Pricing
PHP Academy · บทเรียน

พร็อพเพอร์ตีและเมธอดแบบ 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. คลาส พร็อพเพอร์ตี และเมธอด
  2. คอนสตรักเตอร์และดีสตรักเตอร์
  3. พร็อพเพอร์ตีและเมธอดแบบ static
  4. ภาพรวมเมธอดมหัศจรรย์
← กลับไปที่ PHP Academy