#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) ;
}
}
}