PHP Academy · Oppitunti

Rakentajat ja tuhoajat

Alustakaa oliot __construct-metodilla ja vapauttakaa resurssit __destruct-metodilla.

Oppitunti 2/413 vaihetta

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; // Alice

Konstruktorin 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;  // Bob

Validointi 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);   // throws

Destruktori

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 USD

Yliluokan 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 works

Kä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
Aloita maksutta

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

  1. Luokat, ominaisuudet ja metodit
  2. Rakentajat ja tuhoajat
  3. Staattiset ominaisuudet ja metodit
  4. Taikametodien yleiskatsaus
← Takaisin: PHP Academy