Rajapintojen toteuttaminen
Määritelkää sopimuksia interface-avainsanalla ja toteuttakaa ne useissa luokissa.
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
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
- Luokkien laajentaminen perinnällä
- Abstraktit luokat ja metodit
- Rajapintojen toteuttaminen
- Traitit koodin uudelleenkäyttöön