Petunjuk:
RUN di dalam editor untuk menjalankan program.<?php
trait BisaDikendarai {
abstract function getIdentitas();
public function bandingkanKecepatan($object) {
return ($object->getIdentitas() < $this->getIdentitas()) ? -1 : 1;
}
}
class Sepeda {
use BisaDikendarai;
private $id;
public function __construct($id) {
$this->id = $id;
}
public function getIdentitas() {
return "Sepeda-{$this->id}";
}
}
// Kesalahan: Class tidak mengimplementasikan method abstract
class Bus {
use BisaDikendarai;
}
$sepeda = new Sepeda(101);
$bus = new Bus(); // Akan menyebabkan error karena `Bus` tidak mengimplementasikan `getIdentitas()`
$hasilPerbandingan = $sepeda->bandingkanKecepatan($bus);
?>
Trait BisaDikendarai mendeklarasikan abstract method getIdentitas(). Class Sepeda menggunakan trait ini dan mengimplementasikan method getIdentitas() sesuai kontrak. Namun, class Bus juga menggunakan trait tetapi tidak mengimplementasikan getIdentitas(), sehingga akan menyebabkan error. Hal ini menegaskan bahwa setiap class yang menggunakan trait dengan method abstract wajib mendefinisikan method tersebut secara eksplisit.