Объект PHP — Правильный способ определения свойства с помощью оператора If

#php

Вопрос:

Минимальный пример:

 class Equipment
{
    public $Temp;

    function __construct($filter) {

        $this->Temp = 100;
        
        if(ContainsStringHelper($filter, "car")) {
            $this->Running = true;
        }
    }
}
 

Вы можете видеть, что я хочу определить $this->Running $filter , содержит ли переменная слово car . Если это не так, мне не нужно свойство объекта.

Это работает, однако PhpStorm выдает проблему с надписью «Свойство объявлено динамически».: введите описание изображения здесь

Я могу избавиться от этого , объявив свойство public $Running , но я не хочу, чтобы оно было свойством объекта, как null если бы логика не присваивала ему значение.

Есть ли правильный способ сделать это?

Комментарии:

1. Я думаю, что PhpStorm оправдан в попытке помешать вам иметь свойство, которое существует только в некоторых экземплярах класса. Я понимаю, что это может показаться не очень полезной обратной связью, но я бы попытался переосмыслить бизнес-логику или обойтись предупреждением.

2. ну, конечно, вы можете подавить сообщение phpstorm с помощью аннотаций, но я не уверен, что это хорошая практика, так как среда разработки не будет знать, существует ли свойство или нет

3. в любом случае , тогда делайте $this->{"Running"} = true то же самое. однако вы не получите предупреждение

4. I don't want it to be a property on the object as null …а почему бы и нет, собственно говоря? Это был бы более объектно-ориентированный и последовательный способ сделать это.

Ответ №1:

Решением может быть объявление собственности и снятие ее с учета во время строительства в вашем состоянии :

 class Equipment
{
    public $Temp;
    public $Running = NULL;
    
    function __construct($filter) {

        $this->Temp = 100;

        if(ContainsStringHelper($filter, "car")) {
            $this->Running = true;
        } else {
            unset($this->Running) ;
        }
    }
}