<?php
# The blueprint for designing creatures for your game
interface LivingBeing {
public function dealDamage( $idamage);
public function takeDamage( $idamage);
}
interface Race {
public function raceName(): string;
}
class Human implements LivingBeing, Race {
private $hp = 150;
public function dealDamage( $damage) {
}
public function takeDamage( $damage) {
}
public function raceName(): string {
return 'Human';
}
}
class Elf implements LivingBeing, Race {
private $hp = 100;
public function dealDamage($damage) {
}
public function takeDamage($damage) {
}
public function raceName(): string {
return 'Elf';
}
}
class Dwarf implements LivingBeing, Race {
private $hp = 300;
public function dealDamage($damage) {
}
public function takeDamage($damage) {
}
public function raceName(): string {
return 'Dwarf';
}
}
# I am a junior dev, I am just going to write this code
class Centaur {
private $hp = 300;
public function dealDamage($opponent) {
// $opponent->takeDamage(4);
}
public function takeDamage($damage) {
}
public function raceName(): string {
return 'Centaur';
}
}
class Orc {
private $hp = 300;
public function dealDamage($damage) {
}
public function raceName(): string {
return 'Centaur';
}
}
function listTheirRace (Race ...$list) {
$string = '';
foreach ($list as $being) {
$string .= $being->raceName() . "\n";
}
return $string;
}
$Adam = new Human;
$Lucas = new Elf;
$Jack = new Dwarf;
# Let's fight!
$Gabrielle = new Centaur;
$Guthakug = new Orc;
echo listTheirRace(...[$Adam, $Lucas, $Jack, $Gabrielle, $Guthakug]);
Fatal error: Uncaught TypeError: listTheirRace(): Argument #4 must be of type Race, Centaur given, called in /in/YkLgg on line 106 and defined in /in/YkLgg:85
Stack trace:
#0 /in/YkLgg(106): listTheirRace(Object(Human), Object(Elf), Object(Dwarf), Object(Centaur), Object(Orc))
#1 {main}
thrown in /in/YkLgg on line 85
Process exited with code 255.
Output for 8.3.5
Warning: PHP Startup: Unable to load dynamic library 'sodium.so' (tried: /usr/lib/php/8.3.5/modules/sodium.so (libsodium.so.23: cannot open shared object file: No such file or directory), /usr/lib/php/8.3.5/modules/sodium.so.so (/usr/lib/php/8.3.5/modules/sodium.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0
Fatal error: Uncaught TypeError: listTheirRace(): Argument #4 must be of type Race, Centaur given, called in /in/YkLgg on line 106 and defined in /in/YkLgg:85
Stack trace:
#0 /in/YkLgg(106): listTheirRace(Object(Human), Object(Elf), Object(Dwarf), Object(Centaur), Object(Orc))
#1 {main}
thrown in /in/YkLgg on line 85
Process exited with code 255.
Output for 7.4.0 - 7.4.33
Fatal error: Uncaught TypeError: Argument 4 passed to listTheirRace() must implement interface Race, instance of Centaur given, called in /in/YkLgg on line 106 and defined in /in/YkLgg:85
Stack trace:
#0 /in/YkLgg(106): listTheirRace(Object(Human), Object(Elf), Object(Dwarf), Object(Centaur), Object(Orc))
#1 {main}
thrown in /in/YkLgg on line 85
Process exited with code 255.
Fatal error: Uncaught TypeError: Argument 4 passed to listTheirRace() must implement interface Race, instance of Centaur given, called in /in/YkLgg on line 106 and defined in /in/YkLgg:85
Stack trace:
#0 /in/YkLgg(106): listTheirRace(Object(Human), Object(Elf), Object(Dwarf), Object(Centaur), Object(Orc))
#1 {main}
Next TypeError: Argument 5 passed to listTheirRace() must implement interface Race, instance of Orc given, called in /in/YkLgg on line 106 and defined in /in/YkLgg:85
Stack trace:
#0 /in/YkLgg(106): listTheirRace(Object(Human), Object(Elf), Object(Dwarf), Object(Centaur), Object(Orc))
#1 {main}
thrown in /in/YkLgg on line 85
Process exited with code 255.