В PHP 5.x, как я могу обнаружить, если класс абстрактен или не во время выполнения?

В настоящий момент нет официального способа сделать это, но вы можете использовать небольшой трюк, чтобы достичь этого! Помните, что это экспериментально, и у него есть некоторые ограничения ... (проверьте эту ссылку , если вы беспокоитесь о совместимости с навигатором)

Что вы можете сделать, это использовать селектор CSS3: псевдо classe nth-child()

#list>* {
  display: inline-block;
  padding: 20px 28px;
  margin-right: 5px;
  border: 1px solid #bbb;
  background: #ddd;
  color: #444;
  margin: 0.4em 0;
}

#list :nth-child(-n+4) {
  color: #600b90;
  border: 1px dashed red;
  background: orange;
}

The oranges elements are the previous sibling li selected using li:nth-child(-n+4)

1

2

3

4
5

6

7

8

9

Ограничения

  • Вы не можете выбрать предыдущие элементы основанный на классах следующих элементов
  • Это то же самое для псевдо классов

21
задан vartec 20 March 2009 в 15:51
поделиться

4 ответа

Используйте отражение. ReflectionClass ->isAbstract()

Использование это как это:

$class = new ReflectionClass('NameOfTheClass');
$abstract = $class->isAbstract();
38
ответ дан 29 November 2019 в 04:26
поделиться

Если бы необходимо проверить это во время выполнения, я предложил бы, чтобы Вы переоценили свою архитектуру приложения.

Вы никогда не должны пытаться сделать это, если Вы не создаете чрезвычайно сложное приложение для осмотра другого кода, Вы не можете измениться.

-1
ответ дан 17 October 2019 в 00:28
поделиться

Можно использовать Отражение на классе.

4
ответ дан 29 November 2019 в 04:26
поделиться
<?php 

abstract class Picasso
{
    public function __construct()
    {

    }
} 

$class = new ReflectionClass('Picasso');

if($class->isAbstract())
{
    echo "Im abstract";
}
else
{
    echo "Im not abstract";
}

?>

См. руководство: www.php.net/oop5.reflection

4
ответ дан 29 November 2019 в 04:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: