Autor Zpráva
ShiraNai7
Profil
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
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
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
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
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
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
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
pmg
No je jich pořád docela dost. Hlavně freehostingy.
pmg
Profil
Mimochodem, ten systém vypadá moc pěkně. Přeju hodně štěstí!
ShiraNai7
Profil
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

Vaše odpověď

Mohlo by se hodit

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0