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.