<?php
interface Creator
{
public function creator(): void;
}
class EchoCreator implements Creator
{
public function creator(): void
{
echo 'Hello world!';
}
}
trait CreatorAble
{
abstract protected function creator(): Creator;
public function useCreator(): void
{
$this->creator()->create();
}
}
final class SomeClass
{
private $creator;
use CreatorAble;
public function __construct(Creator $creator)
{
$this->creator = $creator;
}
private function creator(): Creator
{
return $this->creator;
}
}
(new SomeClass(new EchoCreator))->useCreator();
Fatal error: Uncaught Error: Call to undefined method EchoCreator::create() in /in/YesW7:23
Stack trace:
#0 /in/YesW7(46): SomeClass->useCreator()
#1 {main}
thrown in /in/YesW7 on line 23
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 Error: Call to undefined method EchoCreator::create() in /in/YesW7:23
Stack trace:
#0 /in/YesW7(46): SomeClass->useCreator()
#1 {main}
thrown in /in/YesW7 on line 23
Process exited with code 255.