<?php
interface Response {
const POSITIVE = "Да \n";
const NEGATIVE = "Нет \n";
}
interface Girl {}
interface Boy {}
abstract class Bride implements Girl {
public function bePretty() {
echo "I`m pretty \n";
}
}
abstract class Groom implements Boy {
public function alwaysAgree() {
if (static::class === Bride::class) {
echo Response::POSITIVE;
}
}
}
class Nastia extends Bride {
public function responseToPriest(){
if (static::class === Fender::class) {
echo Response::POSITIVE;
}
echo Response::NEGATIVE;
}
}
class Fender extends Groom {
public function responseToPriest(){
if (static::class === Nastia::class) {
echo Response::POSITIVE;
}
echo Response::NEGATIVE;
}
}
class Priest {
public function askIfAgree($human)
{
if ($human instanceof Bride) {
echo "Do you take this man husband? \n";
}
if ($human instanceof Groom) {
echo "Do you take this woman to be your wife? \n";
}
$human->responseToPriest();
}
}
class Wedding {
public static function begin($bride, $groom)
{
$priest = new Priest();
$responseBride = $priest->askIfAgree($bride);
$responseGroom = $priest->askIfAgree($groom);
if ($responseBride === true && $responseGroom === true) {
return new JustMarried;
}
return false;
}
}
class JustMarried {
public function liveHappyEverAfter() {
echo 'And they lived happily ever after';
}
}
$nastia = new Nastia();
$fender = new Fender();
$nastia->bePretty();
$fender->alwaysAgree();
$NastiaAndFenderWeddingJustMarried = Wedding::begin($nastia, $fender);
$NastiaAndFenderWeddingJustMarried->liveHappyEverAfter();
I`m pretty
Do you take this man husband?
Нет
Do you take this woman to be your wife?
Нет
Fatal error: Uncaught Error: Call to a member function liveHappyEverAfter() on false in /in/0VQWv:79
Stack trace:
#0 {main}
thrown in /in/0VQWv on line 79
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
I`m pretty
Do you take this man husband?
Нет
Do you take this woman to be your wife?
Нет
Fatal error: Uncaught Error: Call to a member function liveHappyEverAfter() on false in /in/0VQWv:79
Stack trace:
#0 {main}
thrown in /in/0VQWv on line 79
Process exited with code 255.
I`m pretty
Do you take this man husband?
Нет
Do you take this woman to be your wife?
Нет
Fatal error: Uncaught Error: Call to a member function liveHappyEverAfter() on bool in /in/0VQWv:79
Stack trace:
#0 {main}
thrown in /in/0VQWv on line 79
Process exited with code 255.
I`m pretty
Do you take this man husband?
Нет
Do you take this woman to be your wife?
Нет
Fatal error: Uncaught Error: Call to a member function liveHappyEverAfter() on boolean in /in/0VQWv:79
Stack trace:
#0 {main}
thrown in /in/0VQWv on line 79
Process exited with code 255.