PHP Academy · Oppitunti

Rajapintojen toteuttaminen

Määritelkää sopimuksia interface-avainsanalla ja toteuttakaa ne useissa luokissa.

Oppitunti 3/413 vaihetta

Rajapintojen toteuttaminen 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: PHP:n rajapinnat

Rajapinta määrittelee sopimuksen: luettelon metodien allekirjoituksista, jotka rajapinnan toteuttavien luokkien on tarjottava. Toisin kuin abstraktista luokasta, luokka voi periä useita rajapintoja.

Keskeiset käsitteet

Keskeiset käsitteet:

  • Määritellään muodossa interface Name {}
  • Metodeilla ei ole runkoa — vain allekirjoitukset
  • Toteutetaan muodossa implements InterfaceName
  • Luokka voi toteuttaa useita rajapintoja

Rajapinnan määrittely

Esimerkki:

<?php
interface Serializable {
    public function serialize(): string;
    public function unserialize(string $data): void;
}

interface Loggable {
    public function toLog(): string;
}

// Implementing both interfaces:
class Event implements Serializable, Loggable {
    public function __construct(private string $type, private string $data) {}
    public function serialize(): string { return json_encode(['type'=>$this->type,'data'=>$this->data]); }
    public function unserialize(string $d): void { $a = json_decode($d,true); $this->type=$a['type']; $this->data=$a['data']; }
    public function toLog(): string { return "[{$this->type}] {$this->data}"; }
}

Rajapinta tyyppinä

Jatkoa:

<?php
interface Cache {
    public function get(string $key): mixed;
    public function set(string $key, mixed $val, int $ttl = 0): void;
    public function delete(string $key): void;
}

// Function accepts any Cache implementation:
function loadUser(int $id, Cache $cache): array {
    $key = "user:$id";
    $user = $cache->get($key);
    if (!$user) {
        $user = fetchFromDb($id);
        $cache->set($key, $user, 3600);
    }
    return $user;
}

Rajapinnan vakiot

Syventävää:

<?php
interface HttpMethods {
    const GET    = 'GET';
    const POST   = 'POST';
    const PUT    = 'PUT';
    const DELETE = 'DELETE';
}

class Router implements HttpMethods {
    public function addRoute(string $method, string $path, callable $handler): void {
        // ...
    }
}

$router = new Router();
$router->addRoute(HttpMethods::GET, '/users', fn() => []);

Rajapinnan laajentaminen toisella rajapinnalla

Käytännön käyttö:

<?php
interface Readable {
    public function read(): string;
}

interface Writable {
    public function write(string $data): void;
}

// Interface can extend multiple interfaces:
interface ReadWrite extends Readable, Writable {
    public function seek(int $position): void;
}

class FileStream implements ReadWrite {
    public function read(): string    { return ''; }
    public function write(string $d): void { }
    public function seek(int $p): void { }
}

Riippuvuuksien injektointi rajapintojen avulla

Edistynyt aihe:

<?php
interface MailerInterface {
    public function send(string $to, string $subject, string $body): bool;
}

class SmtpMailer implements MailerInterface {
    public function send(string $to, string $subject, string $body): bool {
        // real SMTP send
        return true;
    }
}

class UserService {
    public function __construct(private MailerInterface $mailer) {}

    public function register(string $email): void {
        // save user...
        $this->mailer->send($email, 'Welcome!', 'Thanks for joining.');
    }
}

Malli

PHP:n yleisiä rajapintamalleja käytetään toistuvien suunnitteluongelmien ratkaisemiseen selkeästi. Soveltakaa niitä johdonmukaisesti, jotta koodista tulee luettavaa ja ylläpidettävää.

Milloin käyttää

On yhtä tärkeää tietää, milloin PHP:n rajapintoja kannattaa käyttää, kuin tietää, miten niitä käytetään. Liiallinen käyttö lisää monimutkaisuutta, kun taas liian vähäinen käyttö johtaa toistuvaan koodiin.

Käytännön esimerkki

PHP:n rajapintoja käytetään tosielämän sovelluksissa usein viitekehyksissä, ORM-järjestelmissä ja palvelukerroksissa. Niiden ymmärtäminen auttaa Teitä osallistumaan ammattimaisiin PHP-projekteihin.

Yleiset sudenkuopat

Välttäkää näitä virheitä PHP:n rajapintojen käytössä:

  • Luokat voivat toteuttaa useita rajapintoja, mutta periä vain yhden luokan
  • Rajapinnoilla ei voi olla ominaisuuksia tai metodien runkoja (PHP 8:ssa oletustoteutusta lukuun ottamatta)
  • Ohjelmoikaa aina rajapintaa (abstraktia tyyppiä) vasten, älkää toteutusta vasten
  • Käyttäkää rajapintoja riippuvuuksien injektoinnin ja testien imitoinnin mahdollistamiseen

Pikatarkistus

Kuinka monta rajapintaa PHP-luokka voi toteuttaa samanaikaisesti?

Kertaus: PHP:n rajapinnat

Yhteenveto:

  • Luokat voivat toteuttaa useita rajapintoja, mutta periä vain yhden luokan
  • Rajapinnoilla ei voi olla ominaisuuksia tai metodien runkoja (PHP 8:ssa oletustoteutusta lukuun ottamatta)
  • Ohjelmoikaa aina rajapintaa (abstraktia tyyppiä) vasten, älkää toteutusta vasten
  • Käyttäkää rajapintoja riippuvuuksien injektoinnin ja testien imitoinnin mahdollistamiseen
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 ”Rajapintojen toteuttaminen” ilmainen?

Kyllä – oppitunnin ”Rajapintojen toteuttaminen” 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 ”Rajapintojen toteuttaminen”?

Määritelkää sopimuksia interface-avainsanalla ja toteuttakaa ne useissa luokissa. 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 ”Rajapintojen toteuttaminen”-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. Luokkien laajentaminen perinnällä
  2. Abstraktit luokat ja metodit
  3. Rajapintojen toteuttaminen
  4. Traitit koodin uudelleenkäyttöön
← Takaisin: PHP Academy