У меня есть объект (сохраненный как $videos), который похож на это
object(stdClass)#19 (3) {
[0]=>
object(stdClass)#20 (22) {
["id"]=>
string(1) "123"
etc...
Я хочу получить идентификатор просто что первый элемент, не имея необходимость циклично выполняться по нему.
Если бы это был массив, то я сделал бы это:
$videos[0]['id']
Это раньше работало этим:
$videos[0]->id
Но теперь я добираюсь, ошибка "Не может использовать объект типа stdClass как массив..." на строке, показанной выше. Возможно из-за обновления PHP.
Таким образом, как я добираюсь до того первого идентификатора без цикличного выполнения? Действительно ли это возможно?
Спасибо!
Обновление 2019
Хождение дальше к лучшим практикам OOPS, ответ @MrTrick должен быть отмечен как корректный, хотя мой ответ предоставляет взломанное решение не лучший метод.
Просто выполняют итерации его использования {}
Пример:
$videos{0}->id
Этот способ, которым не уничтожается Ваш объект и можно легко выполнить итерации через объект.
Для PHP 5.6 и ниже использования это
$videos{0}['id']
К обоим массивам () и объекты stdClass можно получить доступ с помощью current()
key()
next()
prev()
reset()
end()
функции.
Так, если Ваш объект похож
object(stdClass)#19 (3) {
[0]=>
object(stdClass)#20 (22) {
["id"]=>
string(1) "123"
etc...
Затем, можно просто сделать;
$id = reset($obj)->id; //Gets the 'id' attr of the first entry in the object
при необходимости в ключе по некоторым причинам можно сделать;
reset($obj); //Ensure that we're at the first element
$key = key($obj);
Hope, которая работает на Вас.:-) Никакие ошибки, даже в суперстрогом режиме, на PHP 5.4
Корректный:
$videos= (Array)$videos;
$video = $videos[0];
намного легче:
$firstProp = current( (Array)$object );
$videos->{0}->id
работал на меня.
, Так как $videos и {0} оба - объекты, таким образом, мы должны получить доступ к идентификатору с $videos->{0}->id
. Фигурные скобки требуются приблизительно 0, поскольку исключение фигурных скобок произведет синтаксическую ошибку: неожиданный '0', ожидая идентификатор или переменную или '{' или '$'.
я использую PHP 5.4.3 .
В моем случае, никакой $videos{0}->id
и $videos{0}['id']
работал и выставочная ошибка:
не Может использовать объект типа stdClass как массив.
Вы могли циклично выполниться на объекте, возможно, и прервать первый цикл... Что-то как
foreach($obj as $prop) {
$first_prop = $prop;
break; // exits the foreach loop
}
Играя с Php интерактивную оболочку, Php 7:
➜ ~ php -a
Interactive shell
php > $v = (object) ["toto" => "hello"];
php > var_dump($v);
object(stdClass)#1 (1) {
["toto"]=>
string(5) "hello"
}
php > echo $v{0};
PHP Warning: Uncaught Error: Cannot use object of type stdClass as array in php shell code:1
Stack trace:
#0 {main}
thrown in php shell code on line 1
Warning: Uncaught Error: Cannot use object of type stdClass as array in php shell code:1
Stack trace:
#0 {main}
thrown in php shell code on line 1
php > echo $v->{0};
PHP Notice: Undefined property: stdClass::[110] in php shell code on line 1
Notice: Undefined property: stdClass::[110] in php shell code on line 1
php > echo current($v);
hello
Только current
работают с объектом.