Чат Telegram
Группа ВКонтакте
Новый комментарий


Kirill.K 24.11.2018 в 20:50

bin/cli.php

if (get_parent_class($className) != 'MyProject\Cli\AbstractCommand' ) {
        throw new \MyProject\Exceptions\CliException('Class "' . $className . '" not a subclass of AbstractCommand');
    }
ivashkevich 24.11.2018 в 21:59

Хорошо, а если он является наследником через несколько классов? Подумайте в сторону PHP Reflection API.

Kirill.K 25.11.2018 в 14:34

Я думал над этим, долго) Но не мог понять как решить эту проблему, а с этой наводкой сделал моментально, мало ещё опыта, не все инструменты держатся в голове)
bin/cli.php

...
    $reflectionOfClassName = new ReflectionClass($className);

    if (!$reflectionOfClassName->isSubclassOf('MyProject\Cli\AbstractCommand')) {
        throw new \MyProject\Exceptions\CliException('Class "' . $className . '" not a subclass of AbstractCommand');
    }
...
ivashkevich 25.11.2018 в 17:25

Супер! Вместо строки 'MyProject\Cli\AbstractCommand' лучше использовать MyProject\Cli\AbstractCommand::class

Kirill.K 25.11.2018 в 18:14

Хорошо, буду знать и использовать)

dnldcode 25.03.2019 в 19:31
    if (in_array(\MyProject\Cli\AbstractCommand::class, class_parents($className))){
        throw new \MyProject\Exceptions\CliException('Class AbstractCommand is not a parent of class ' . $className);
    }
ivashkevich 27.03.2019 в 11:29

Исключение будет бросаться для всех наследников этого класса, а нужно наоборот.

Iliusha99 09.08.2019 в 18:21

$classReflector = new ReflectionClass($className);

if (!$classReflector->isSubclassOf(AbstractCommand::class)){
    throw new CliException("Некорректный класс");
}
Iliusha99 09.08.2019 в 18:24

Такой вопрос, можно как то вызвать методы класса ReflectionClass статически, без создания объекта?

ivashkevich 10.08.2019 в 07:23

Не знаю, почитайте документацию. Но непонятно для чего вам это.

ivashkevich 10.08.2019 в 07:22

Отлично

Metey 17.08.2019 в 15:03
$checkClassAbstract = new ReflectionClass($className);
    if (!$checkClassAbstract->isSubclassOf(MyProject\Cli\AbstractCommand::class)) {
        throw new \MyProject\Exceptions\CliException('Class "' . $className . '"is not subclass of AbstractCommand');
    }
ivashkevich 18.08.2019 в 06:52

Отлично

Moskva 17.08.2019 в 22:50
    $obj = new ReflectionClass($className);

    if(!$obj->isSubclassOf(MyProject\Cli\AbstractCommand::class)){
        throw new MyProject\Exceptions\CliException('Сlass '. $className . ' is not a descendant of the AbstractCommand class ');
    }
ivashkevich 18.08.2019 в 06:52

Отлично

Логические задачи с собеседований