property_exists (), чтобы проверить, существует ли свойство stati c внутри метода класса - PullRequest
1 голос
/ 14 июля 2020

У меня есть класс со свойствами и методами c stati. Один из моих методов - захват свойств Dynami c. Я хочу сделать это динамически, чтобы не было метода для каждого свойства, которое я хочу вернуть. Единственный метод был бы лучше.

Моя проблема в том, что метод возвращает «Неопределенное свойство». Я пробовал различные решения для inte rnet, но ничего не подходит и не работает.

Пример класса:

class Generic
{
    public static $propA = "A";
    private static $propB = "B";
    protected static $propC = "C";

    public static function getProperty(string $property): string
    {
        if (!property_exists('Generic', $property)) :
            return "Undefined Property";
        endif;

        return self::$$property;
    }
}

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

print_r(Generic::getProperty('propA'));

Это возвращается, как если бы свойство не существует. Фактически, видимость не имеет значения, поскольку все они возвращаются, как будто их не существует. Кроме того, я знаю, что это работает, когда не используются переменные stati c. Я бы предпочел продолжать использовать переменные stati c.

1 Ответ

1 голос
/ 14 июля 2020

Обновление моего кода сверху, чтобы включить пространства имен. Это была проблема, из-за которой метод возвращал undefined.

Обновленный код выглядит следующим образом:

class Generic
{
    public static $propA = "A";
    private static $propB = "B";
    protected static $propC = "C";

    public static function getProperty(string $property): string
    {
        if (!property_exists('JLDN\Generic', $property)) :
            return "Undefined Property";
        endif;

        return self::$$property;
    }
}

foreach (['propA', 'propB', 'propC', 'nonProperty'] as $prop) :
    printf("<p>Property: %s::%s - %s</p>\n", 'Generic', $prop, print_r(Generic::getProperty($prop), true));
endforeach;

Вывод:

Property: Generic::propA - A

Property: Generic::propB - B

Property: Generic::propC - C

Property: Generic::nonProp - Undefined Property
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...