Rakentajat ja tuhoajat
Alustakaa oliot __construct-metodilla ja vapauttakaa resurssit __destruct-metodilla.
Rakentajat ja tuhoajat on ilmainen PHP Academy-oppitunti CoddyKitissä. Tämä on oppitunti 2/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: konstruktorit ja destruktorit
__construct()-metodi suoritetaan automaattisesti, kun uusi olio luodaan. __destruct()-metodi suoritetaan, kun roskienkeruu poistaa olion. PHP 8 toi käyttöön konstruktorin property promotion -ominaisuuden.
Keskeiset käsitteet
Konstruktoreiden ja destruktoreiden keskeiset käsitteet:
__construct()alustaa olion- Konstruktorin property promotion lyhentää koodia
__destruct()resurssien vapauttamiseen (tiedostokahvat, yhteydet)- Yliluokan konstruktori kutsutaan komennolla
parent::__construct()
Peruskonstruktori
Esimerkki:
<?php
class User {
public string $name;
public string $email;
public function __construct(string $name, string $email) {
$this->name = $name;
$this->email = $email;
}
}
$user = new User('Alice', 'alice@example.com');
echo $user->name; // AliceKonstruktorin property promotion (PHP 8)
Jatkoa:
<?php
class User {
// Shorthand: declare and assign in one go
public function __construct(
public readonly string $name,
public readonly string $email,
private int $loginCount = 0,
) {}
}
$u = new User('Bob', 'bob@test.com');
echo $u->name; // BobValidointi konstruktorissa
Harjoitus:
<?php
class PositiveInt {
public function __construct(private int $value) {
if ($value <= 0) {
throw new InvalidArgumentException(
"Value must be positive, got $value"
);
}
}
public function get(): int { return $this->value; }
}
$n = new PositiveInt(5); // OK
// new PositiveInt(-1); // throwsDestruktori
Syventävää:
<?php
class FileLogger {
private mixed $handle;
public function __construct(string $path) {
$this->handle = fopen($path, 'a');
}
public function log(string $msg): void {
fwrite($this->handle, date('c') . ' ' . $msg . PHP_EOL);
}
public function __destruct() {
if ($this->handle) fclose($this->handle);
echo 'File handle released';
}
}Nimetyn konstruktorin malli
Edistynyt käyttö:
<?php
class Money {
private function __construct(
private float $amount,
private string $currency
) {}
public static function usd(float $a): self { return new self($a, 'USD'); }
public static function eur(float $a): self { return new self($a, 'EUR'); }
public function format(): string {
return number_format($this->amount, 2) . ' ' . $this->currency;
}
}
echo Money::usd(9.99)->format(); // 9.99 USDYliluokan konstruktori
Käytännön malli:
<?php
class Animal {
public function __construct(
protected string $name,
protected string $sound
) {}
}
class Dog extends Animal {
public function __construct(string $name) {
parent::__construct($name, 'Woof');
}
public function speak(): string {
return "{$this->name} says {$this->sound}!";
}
}
echo (new Dog('Rex'))->speak(); // Rex says Woof!Myöhäinen staattinen sidonta konstruktoreissa
Parhaat käytännöt:
<?php
class Base {
public static function create(): static {
return new static(); // 'static' resolves to calling class
}
}
class Child extends Base {}
$base = Base::create(); // Base object
$child = Child::create(); // Child object — static binding worksKäytännön malli
Kootaan kokonaisuus käytännöllisen konstruktori- ja destruktorimallin avulla.
Yleiset sudenkuopat
Välttäkää näitä yleisiä virheitä konstruktoreiden ja destruktoreiden käytössä:
- Kutsukaa aina parent::__construct(), kun laajennatte luokkaa
- Käyttäkää PHP 8:ssa ja uudemmissa versioissa konstruktorin property promotion -ominaisuutta tarpeettoman toistuvan koodin vähentämiseen
- Destruktorin suoritus tiettynä ajankohtana ei ole taattu
- Suosikaa nimettyjä konstruktoreita useiden __construct()-ylikuormitusten sijaan
Pikatarkistus
Mitä konstruktorin property promotion tarkoittaa PHP 8:ssa?
Kertaus: konstruktorit ja destruktorit
Olette perehtyneet konstruktoreihin ja destruktoreihin. Muistakaa seuraavat pääkohdat:
- Kutsukaa aina parent::__construct(), kun laajennatte luokkaa
- Käyttäkää PHP 8:ssa ja uudemmissa versioissa konstruktorin property promotion -ominaisuutta tarpeettoman toistuvan koodin vähentämiseen
- Destruktorin suoritus tiettynä ajankohtana ei ole taattu
- Suosikaa nimettyjä konstruktoreita useiden __construct()-ylikuormitusten sijaan
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 ”Rakentajat ja tuhoajat” ilmainen?
Kyllä – oppitunnin ”Rakentajat ja tuhoajat” 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 ”Rakentajat ja tuhoajat”?
Alustakaa oliot __construct-metodilla ja vapauttakaa resurssit __destruct-metodilla. 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 2/4.
Kuinka kauan ”Rakentajat ja tuhoajat”-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