PHP StdClass - поля доступа как → поле или → {'поле'}

Я работаю над этим совместным использованием кода PHP, и кажется, что некоторые люди получают доступ к полям PHP StdClass, таким как

$body->head

и другие, такие как

$body->{'head'}

Насколько я могу судить, они эквивалентны. Они? Имеет ли значение, что используется? Каким образом вы бы предпочли? Какие-нибудь причуды, чтобы посмотреть здесь?

Ответы

Ответ 1

Они эквивалентны. Вам нужна только вторая версия, если вы хотите использовать имена атрибутов abhorrent, например:

$data->{'what * the ! thing'}

Это иногда происходит, если вы преобразовываете чистые массивы данных в объекты.

Но есть также версия с двойными кавычками, которая имеет немного больше смысла, когда вам действительно нужны имена переменных атрибутов (в основном переменные переменные для объектов):

$data->{"attr$index"}

Ответ 2

Мне нужно создать класс с аномальными именами свойств, подобными этому {'field-name'}.

class myclass
{
    public {'field-name-with-minus-sign'} = "something";
}

Id не работает. Зачем? Я не хочу использовать что-то вроде этого:

$myclass = new stdClass();
$myclass->{'dumb-property-name'}

потому что у меня много таких свойств.