<?php
interface A
{
public function foo(string $s): string;
public function bar(int $i): int;
}
// Абстрактный класс может реализовывать только часть интерфейса.
// Классы, расширяющие абстрактный класс, должны реализовать все остальные.
abstract class B implements A
{
public function foo(string $s): string
{
return $s . PHP_EOL;
}
}
class C extends B
{
public function bar(int $i): int
{
return $i * 2;
}
}
$c = new C();
echo $c->bar(2); // OK, 4
$b = new B();
$b->foo("123");
4
Fatal error: Uncaught Error: Cannot instantiate abstract class B in /in/nSJIF:31
Stack trace:
#0 {main}
thrown in /in/nSJIF on line 31
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
4
Fatal error: Uncaught Error: Cannot instantiate abstract class B in /in/nSJIF:31
Stack trace:
#0 {main}
thrown in /in/nSJIF on line 31
Process exited with code 255.