NOVINKA: Získej 40 hodin praktických dovedností s AI – ZDARMA ke každému akreditovanému kurzu!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze – Pole - Český PHP manuál

Zpět

Upozorňujeme, že diskuze pod našimi online kurzy jsou nemoderované a primárně slouží k získávání zpětné vazby pro budoucí vylepšení kurzů. Pro studenty našich rekvalifikačních kurzů nabízíme možnost přímého kontaktu s lektory a studijním referentem pro osobní konzultace a podporu v rámci jejich studia. Toto je exkluzivní služba, která zajišťuje kvalitní a cílenou pomoc v případě jakýchkoli dotazů nebo projektů.

Komentáře
Avatar
Kit
Tvůrce
Avatar
Kit:16.9.2012 17:10

ad Iterace: Doplním, že pro výpis pole je místo cyklu foreach často výhodnější použití funkce implode():

<?php
$barvy = Array('červená', 'zelená', 'žlutá', 'fialová');
echo implode(' ',$barvy);

ad Reference: S tím kopírováním to není tak žhavé. Ve skutečnosti se kopie dělá až při pokusu o přepsání hodnoty. Je využito líné kopírování, které je rychlejší. K naplnění pole hodnotami se obvykle používají jiné techniky než foreach.

Používání referencí považuji za škodlivé, jsou zdrojem nesprávných programátorských návyků. Některé jazyky u funkcí reference nepřipouští, např. Fortran. Je lepší se jim úplně vyhnout, ale někdy to jinak nejde. Výkonnostně lepší než přepisování pole je zpravidla vytvoření nového pole a vrácení přes return.

Řídké pole na konci článku je ukázkovým příkladem, na kterém by si asi vylámal zuby klasický for, ale foreach funguje bez potíží.

Odpovědět
16.9.2012 17:10
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Kit
David Hartinger:16.9.2012 17:14

Funkcím jsem se zde schválně vyhýbal, tento díl je jen o struktuře pole, funkce právě sepisuji :)

Pole se předává referencí v každém normálním jazyce (C#, Java, Ruby...), tohle jsem viděl jen v Delphi a PHP, oba jazyky jsou minimálně kontroverzní :)

Odpovědět
16.9.2012 17:14
New kid back on the block with a R.I.P
Avatar
Kit
Tvůrce
Avatar
Odpovídá na David Hartinger
Kit:16.9.2012 17:34

ad funkce: OK.

Otázkou je, co je to "normální jazyk". V C se čísla předávají hodnotou, ale stringy a pole odkazem. To není normální a musí se na to myslet.

Funkce by měla mít co nejméně postranních efektů. Nejlépe žádný. To znamená, že vstupem jsou parametry, výsledek se předává přes return a nikde se nic neuchovává. Taková funkce se dá spouštět i paralelně na více jádrech.

Tím chci říct, že Delphi a PHP to mají de facto správně a ostatní to mají špatně. Jenže v C#, Javě a Ruby to vlastně nejsou pole, ale objekty. Objekty se předávají referencí vždy. Pokud bys to chtěl v PHP také tak, stačí nadefinovat místo pole objekt a bude se to chovat dle tvého očekávání.

Odpovědět
16.9.2012 17:34
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Kit
David Hartinger:16.9.2012 17:38

Jo, ale dle objektového přístupu by to mělo takhle fungovat. To PHP pole může díky své funkcionalitě nahradit objekty, které bych jinak musel v kompilovaných jazycích definovat (btw. už dlouho mi vrtá hlavou, jak se může PHP kompilovat, když je takto dynamické). S těmito "objekty" se ale potom bude pracovat jako s hodnotovými typy, což je nepřirozené. Jestli jsem viděl někdy dobře navržený jazyk, tak to bylo Ruby. Sice se mi nelíbilo syntakticky, ale vše tam bylo jako objekt, čísla na sobě měla metody atd. Tento přístup mi připadá velmi pokrokový.

Odpovědět
16.9.2012 17:38
New kid back on the block with a R.I.P
Avatar
Kit
Tvůrce
Avatar
Odpovídá na David Hartinger
Kit:16.9.2012 17:51

Jestli jsem viděl někdy dobře navržený jazyk, tak to byl Python. I když bych našel jisté výtky, spoustu věcí má vychytaných. V PHP je například hromada různých ošetření běhových chyb. V Pythonu jsou na všechno výjimky.

Pole v PHP se nechová jako objekt, ale jako běžná proměnná. Je na polemice, které chování je normální. Pokud chci, aby se něco chovalo jako objekt, tak i kdyby měl být uvnitř jen jeden integer, nadefinuji ho jako objekt.

Odpovědět
16.9.2012 17:51
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Kit
David Hartinger:16.9.2012 17:55

Jo, určitě to záleží na úhlu pohledu.

Python jsem nikdy nezkoumal, ale Ruby vznikl na popud, že je Python málo objektový :)

Víš prosím, jak funguje ten HipHop for PHP? Já nechápu, jak se může zkompilovat dynamicky typovaný jazyk, ještě s těmi věcmi jako extract atd.

Odpovědět
16.9.2012 17:55
New kid back on the block with a R.I.P
Avatar
Kit
Tvůrce
Avatar
Odpovídá na David Hartinger
Kit:16.9.2012 18:12

HipHop sice neznám, ale princip není složitý. Ze zdrojáku se místo překladu jen vytvoří derivační strom, který se pak interpretuje. K tomu je přibalený slovník, který vyřeší problémy s dynamickými názvy.

Python se mi jeví dostatečně objektový. Pro změnu jsem moc nezkoumal Ruby, i když občas používám některé programy v něm napsané, např. Haml. Na Pythonu se mi hlavně líbí velmi stručný zápis. A také interaktivnost. Napíšu příkaz a hned se provede. Napíšu funkci a pokud je syntakticky v pořádku, je k dispozici. Pokud není, vyhodí výjimku a stále platí ta původní. Můžu tak upravovat živý pythonský server přímo za chodu.

Odpovědět
16.9.2012 18:12
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
HAPPY DAY
Člen
Avatar
HAPPY DAY:16.9.2012 18:27

ahoj je mi trochu líto, že jsi neukázal příklad pro další index v poli:
$jazyky[1] = "čeština";
$jazyky[] = "angličtina";
$jazyky[] = "bulharština";
...

Editováno 16.9.2012 18:28
Odpovědět
16.9.2012 18:27
Kdo pozdě chodí, sám sobě škodí (AUTOR: já)
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na HAPPY DAY
David Hartinger:16.9.2012 18:55

Cituji článek:

$barvy[] = 'bílá';

"Prázdné závorky odkazují na další index do pole, který v něm ještě není. Takto do něj můžeme zapsat další prvek."

Je dobré komentovat jen pod to, co jsi četl, jinak nemá komentář žádnou váhu.

Odpovědět
16.9.2012 18:55
New kid back on the block with a R.I.P
Avatar
Kit
Tvůrce
Avatar
Odpovídá na David Hartinger
Kit:16.9.2012 19:03

Neaktivní uživatel to zřejmě myslel jinak:

$barvy[5] = 'bílá';
$barvy[] = 'modrá';

Výsledek:

Array
(
    [5] => bílá
    [6] => modrá
)
Odpovědět
16.9.2012 19:03
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 10 zpráv z 16.