Как получить доступ к свойству объекта, когда имя свойства содержит - (дефис) - PullRequest
6 голосов
/ 02 апреля 2012

Мне нужна escape-последовательность для - или знак минус для php. У объекта есть пара имя-значение, где имя имеет - между двумя словами.

Я не могу сделать это, используя \ стандартную escape-последовательность (- в любом случае не задокументировано).

Я могу сохранить имя в $myvariable, которое можно использовать, но из любопытства можно ли сделать следующее?

$myobject->myweird-name

Это дает ошибку из-за -

Ответы [ 2 ]

31 голосов
/ 02 апреля 2012

Это то, что вам нужно:

$myobject->{'myweird-name'};
7 голосов
/ 02 апреля 2012

Если вам нужно найти индекс, есть несколько способов сделать это:

// use a variable
$prop = 'my-crazy-property';
$obj->$prop;

// use {}
$obj->{'my-crazy-property'};

// get_object_vars (better with a lot of crazy properties)
$vars = get_object_vars($obj);
$vars['my-crazy-property'];

// you can cast to an array directly
$arr = (array)$obj;
$arr['my-crazy-property'];

Если вам нужно работать со строкой (что не является вашей лучшей идеей, вам следует использовать ручную конкатенацию, где это возможно, поскольку это быстрее и анализируемые строки не нужны), тогда вы должны использовать {}, чтобы в основном экранировать всю последовательность :

$foo = new stdClass();
$foo->{"my-crazy-property"} = 1;
var_dump("my crazy property is {$foo->{"my-crazy-property"}}";

Поскольку вы упомянули, что это API-интерфейс LinkedIn, который, как мне кажется, имеет возможность возвращать XML, может быть быстрее (и, возможно, чище / понятнее) использовать вызовы методов XML, а не сами объекты. Пища для размышлений.

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