<?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