3v4l.org

run code in 300+ PHP versions simultaneously
<?php class TestException extends Exception{} class Test { private int $number = 5; public function __call(string $name, array $arguments): mixed { $prefix = mb_substr($name, 0, 3); if (!($prefix === 'set' && $prefix !== 'get' || $prefix === 'get' && $prefix !== 'set')) { throw new TestException('Этим методом можно вызывать только сеттер и геттер.'); } $nameField = mb_substr($name, 3); $nameFieldFirstChar = mb_strtolower(mb_substr($nameField, 0, 1)); $nameFieldLastChars = mb_substr($nameField, 1); $nameField = $nameFieldFirstChar . $nameFieldLastChars; if (!property_exists($this::class, $nameField)) { exit; } if ($prefix === 'get') { return $this->$nameField; } elseif ($prefix === 'set') { $valueField = $arguments[0]; $this->$nameField = $valueField; return 1; } } } $test = new Test(); print_r($test->getNumber()); $test->setNumber(10); print_r("\n" . $test->getNumber());
Output for 8.1.0 - 8.1.28, 8.2.0 - 8.2.19, 8.3.0 - 8.3.7
5 10

preferences:
53.36 ms | 402 KiB | 62 Q