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'}
потому что у меня много таких свойств.