Staattiset ominaisuudet ja metodit
Käyttäkää staattisia jäseniä ja ymmärtäkää, milloin niitä kutsutaan ilman ilmentymää.
Staattiset ominaisuudet ja metodit on ilmainen PHP Academy-oppitunti CoddyKitissä. Tämä on oppitunti 3/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu PHP Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. PHP Academy-kurssilla on yhteensä 4 oppituntia.
Johdanto: staattiset ominaisuudet ja metodit
Staattiset jäsenet kuuluvat luokalle itselleen eivätkä millekään yksittäiselle oliolle. Niitä käytetään luokan ulkopuolelta muodossa ClassName::member tai luokan sisällä muodossa self::. Ne ovat yhteisiä kaikille olioille.
Keskeiset käsitteet
Staattisten ominaisuuksien ja metodien keskeiset käsitteet:
- Määritellään
static-avainsanalla - Käytetään
::-operaattorilla (nimiavaruuden tarkistusoperaattori) - Luokan sisällä käytetään
self::; luokan ulkopuoleltaClassName:: - Myöhäinen staattinen sidonta tehdään komennolla
static::
Staattinen ominaisuus
Esimerkki:
<?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';Staattinen metodi
Jatkoa:
<?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); // 50Singleton-malli
Harjoitus:
<?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'; // sameStaattinen laskuri
Syventävää:
<?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(); // 3Myöhäinen staattinen sidonta
Edistynyt käyttö:
<?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(); // ChildClassStaattinen tehdas
Käytännön malli:
<?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();Staattisten ja ilmentymäkohtaisten jäsenten kompromissit
Parhaat käytännöt:
<?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 applicationsKäytännön malli
Kootaan kokonaisuus staattisten ominaisuuksien ja metodien käytännöllisen mallin avulla.
Yleiset sudenkuopat
Välttäkää näitä yleisiä virheitä staattisten ominaisuuksien ja metodien käytössä:
- Staattiset jäsenet ovat yhteisiä kaikille olioille
- Suosikaa periytettävissä luokissa myöhäistä staattista sidontaa (static::) self::-rakenteen sijaan
- Singletonit ovat yleinen, mutta joskus liikaa käytetty malli
- Staattisia metodeja on vaikeampi korvata testidoubleilla yksikkötesteissä
Pikatarkistus
Mikä avainsana käsittelee luokan sisällä staattista ominaisuutta perinnän huomioiden (myöhäinen staattinen sidonta)?
Kertaus: staattiset ominaisuudet ja metodit
Olette perehtyneet staattisiin ominaisuuksiin ja metodeihin. Muistakaa seuraavat pääkohdat:
- Staattiset jäsenet ovat yhteisiä kaikille olioille
- Suosikaa periytettävissä luokissa myöhäistä staattista sidontaa (static::) self::-rakenteen sijaan
- Singletonit ovat yleinen, mutta joskus liikaa käytetty malli
- Staattisia metodeja on vaikeampi korvata testidoubleilla yksikkötesteissä
Opi PHP tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 49
- Oppitunnit
- 195
Usein kysytyt kysymykset
Onko oppitunti ”Staattiset ominaisuudet ja metodit” ilmainen?
Kyllä – oppitunnin ”Staattiset ominaisuudet ja metodit” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko PHP Academy-kurssin, päivitä CoddyKit PROhon. PHP Academy-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”Staattiset ominaisuudet ja metodit”?
Käyttäkää staattisia jäseniä ja ymmärtäkää, milloin niitä kutsutaan ilman ilmentymää. Harjoittelet PHP Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni PHP Academy-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin PHP Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 3/4.
Kuinka kauan ”Staattiset ominaisuudet ja metodit”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä PHP Academy-oppitunnilla?
Kyllä. Jokainen PHP Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.
Kaikki tämän kurssin oppitunnit
- Luokat, ominaisuudet ja metodit
- Rakentajat ja tuhoajat
- Staattiset ominaisuudet ja metodit
- Taikametodien yleiskatsaus