Autor | Zpráva | ||
---|---|---|---|
ShiraNai7 Profil |
#1 · Zasláno: 10. 8. 2008, 22:35:03 · Upravil/a: ShiraNai7
Mám takový problém.. teda vlastně funkci, která vrací nějaká data (to není podstatné). Podstatné je, že chci mít možnost v některých případech z té funkce vytáhnout mimo hlavní výstup ještě další data. Jako elegantní řešení mi přijde předání proměnné, do které by se potom zkrz referenci uložily ty informace. Potíž je s tím, že v PHP4 (v PHP5 lze) nelze určit argument funkce typu reference jako nepovinný (i když zabudované funkce jako je třeba fsockopen se takto chovají). Otázka tedy zní - jde to nějak chytře obejít nebo existuje podobně pohodlné řešení? Vracet na výstup pole nebo něco podobného nechci, protože to potřebuju mít úplně "opticky" oddělené od hlavního výstupu..
edit: ukázka: function dummy($arg1, &$ref){ $ref='treba chybova hlaska'; return $arg1*2; } $b=null; $a=dummy(1, $b); echo $a; //vypise "2" echo $b; //vypise "treba chybova hlaska" //problem nastava zde - toto v php4 nejde: function dummy($arg1, &$ref=''){ $ref='treba chybova hlaska'; return $arg1*2; } |
||
pmg Profil |
#2 · Zasláno: 10. 8. 2008, 22:47:31
Parametry přebírané referencí jsou automaticky nepovinné. Výchozí hodnota je NULL. Nevzpomínám si, že by tomu bylo jinak v PHP 4, když tak mě opravte.
Obecně bych ale doporučil místo předávání více parametrů funkci zabalit do nějaké třídy. Takový postup má větší perspektivu, člověk si pohodlně vytáhne, co potřebuje;-) |
||
Alphard Profil |
#3 · Zasláno: 10. 8. 2008, 22:47:35
není možné dosadit referenci ani při volání funkce? (nevím to a nemám možnost to na PHP 4 zkusit)
myslím tohle: function nejaka_funkce ($normalni_promenna = "Ano") { // tělo, které dělá cokoliv } a při volání: nejaka_funkce (&$odpoved); na PHP 5 to vede k varování: Warning: Call-time pass-by-reference has been deprecated;... jak se to chová na 4, nevím |
||
ShiraNai7 Profil |
#4 · Zasláno: 11. 8. 2008, 13:05:31
Alphard
V PHP4 přimé dosazování reference nevadí, ale jde o to, že v dalších verzích php to snad ani nepůjde. A potlačovat na pozadí nějaký error taky není nic moc. pmg Nejsou automaticky nepovinné. Když nedosadím nic, tak dostanu: Warning: Missing argument 2 for dummy() ... Třídy a objekty používám, ale toto mi přijde jako docela obecná funkce, kterou potřebuju na více místech (třídách, jiných fcích apod.). |
||
pmg Profil |
#5 · Zasláno: 11. 8. 2008, 13:29:45
ShiraNai7
Nejsou automaticky nepovinné. Promiň, už bylo asi pozdě; co jsem popisoval se týká případu, kdy se do funkce referencí předá neinicializovaná proměnná. Nepovinná je ta inicializace. Myslím, že nic dalšího nevymyslíme. Tak alespoň nějaký flame. Jestli už vyhlížíš na další verze PHP, proč se zabývat čtvrtou? Jestli je to kvůli hostingu, je nějaký důvod ho nevyměnit? |
||
ShiraNai7 Profil |
#6 · Zasláno: 11. 8. 2008, 13:41:57 · Upravil/a: ShiraNai7
pmg
Je to kvůli tomu, že to chci použít ve svém CMS. A ten určitě nebude nasazen jen na serverech s PHP5 a výše. Kdyby bylo PHP5 všude, bylo by to super, ale bohužel :( |
||
pmg Profil |
#7 · Zasláno: 11. 8. 2008, 14:54:05
Moc bych se toho nebál. Ani nevím o hostingu, který by dnes pátou verzi nepodporoval. Některé kvalitní frameworky už dokonce pomýšlí na PHP 5.3.
|
||
ShiraNai7 Profil |
#8 · Zasláno: 11. 8. 2008, 22:12:37
pmg
No je jich pořád docela dost. Hlavně freehostingy. |
||
pmg Profil |
#9 · Zasláno: 11. 8. 2008, 22:37:42
Mimochodem, ten systém vypadá moc pěkně. Přeju hodně štěstí!
|
||
ShiraNai7 Profil |
#10 · Zasláno: 12. 8. 2008, 09:29:53
pmg
Díky :) A změna názoru - php 4 mě omezuje, takže na něj házím bobek. Hostingy, které nepodporují php 5 jsou přinejmenším zastaralé a proto mě už vůbec nezajímají xD |
||
Časová prodleva: 16 let
|
0