Autor | Zpráva | ||
---|---|---|---|
RickAndMorty Profil * |
#1 · Zasláno: 17. 9. 2017, 15:17:19
Dobrý den,
již delší dobu se snažím přijít na způsob jak vypsat nějaký prvek, který přetypuji na object. Mám následující kod: $object = (object) [ 0 => '0. hodnota', 1 => '1. hodnota', 2 => '2. hodnota' ]; var_dump($object->{'1'}); // NULL echo $object->{'1'}; echo $object->{"1"}; echo $object->1; A očekávaným výsledkem je vypsat "1. hodnota". Na webu jsem našel tyhle tři řešení, ale ani jedno nefunguje. Vím že mohu objekt změnit na array a z něj data vypsat, ale chtěl bych to udělat nějakým způsobem úhledně bez nutnosti přetypování. Tohle je jednoduchý případ užití. V praxi to samozřejmě využiji jinak. Předem děkuji za jakoukoliv pomoc. |
||
Keeehi Profil |
#2 · Zasláno: 17. 9. 2017, 15:32:53
$object->{1} Dělat z pole objekt jen aby to bylo víc cool je zbytečnost. Co má ten objekt navíc co neumí pole? |
||
RickAndMorty Profil * |
#3 · Zasláno: 17. 9. 2017, 16:44:15
Převáženě to používám u výpisu z databáze, nebo načítání konfigurace z JSON souboru.
$object = (object) [ 0 => '0. hodnota', 1 => '1. hodnota', 2 => '2. hodnota' ]; var_dump( $object->{1} ); echo $object->{1}; var_dump vrací NULL a u echo se nevypíše nic. Asi to s verzí nemá nic společného, ale přeci jen používám PHP 7.1 na Linuxovém serveru. |
||
Radek9 Profil |
RickAndMorty:
Evidentně to v tomto případě nejde. (Snad nevadí angličtina, je to tam vysvětleno hezky.) Pokud opravdu potřebuješ pole přetypovávat na objekt, vyhni se číselným názvům. Případě si můžeš napsat nějaký vlastní wrapper: <?php class ArrayWrapper { private $array; public function __construct(array $array) { $this->array = &$array; } public function __set($name, $value) { $this->array[$name] = $value; } public function &__get($name) { return $this->array[$name]; } } $object = new ArrayWrapper([ 0 => '0. hodnota', 1 => '1. hodnota', 2 => '2. hodnota' ]); var_dump( $object->{1} ); echo $object->{1}; |
||
Keeehi Profil |
#5 · Zasláno: 17. 9. 2017, 18:59:20
RickAndMorty:
„Asi to s verzí nemá nic společného, ale přeci jen používám PHP 7.1“ Ale má. Zapomněl jsem, že bych si měl zkontrolovat kompatibilitu. Testoval jsem to v 7.2. Tam to fungovat bude. Nicméně, je jedno kde to používáš. Já jsem se ptal na výhody objektu oproti poli. Žádné jsi neuvedl. Tak používej pole a buď šťasten. |
||
Časová prodleva: 6 let
|
0