Portál AbcLinuxu, 10. května 2025 05:39

Dotaz: PHP stejný název dvou funkcí

15.5.2014 14:37 Pavel | skóre: 17
PHP stejný název dvou funkcí
Přečteno: 361×
Odpovědět | Admin
Zdravím, v souboru index.php dělám include $neco.".php". V includovaném souboru mám jednu funkci s několika vstupníma parametrama a tu dále několikrát zavolám a vypíši výstup. Všechny includované soubory mají stejně definovanou funkci. To funguje skvěle, ale v případě že budu chtít dát znova include $necojineho.".php" tak už tám mam dvě funkce se stejným názvem. Dá se nějak udělat abych deklarovanou fukci viděl pouze v určitém bloku a pak již ne? Případně každou funkci pojmenovat proměnnou, něco jako
obsah prvni.php : function prvni_func(){....}
obsah druha.php : function druha_func(){....}
A pak dále zavolat funkci
$volba = 'prvni';
include $volba.".php";
$volba_func();     // zavolání první funkce
$volba = 'druha';
include $volba.".php";
$volba_func();     // zavolání druhé funkce
Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

Tarmaq avatar 15.5.2014 15:39 Tarmaq | skóre: 39
Rozbalit Rozbalit vše Re: PHP stejný název dvou funkcí
Odpovědět | | Sbalit | Link | Blokovat | Admin
Jaky to ma smysl, ze maji stejny nazev? Z tohohle prikladu uplne presne nechapu, co maji ty funkce vykonavat.. Zda se ze by to mohlo byt reseno vytvorenim trid se stejne pojmenovanou metodou (tridy budou mit stejny interface).
Druha moznost je vyuziti namespacu, ale doporucil bych spise vice se rozepsat o problemu ktery resis. Mozna to mas uz v zakladu spatne navrzene
Don't panic!
15.5.2014 16:11 Kit | skóre: 45 | Brno
Rozbalit Rozbalit vše Re: PHP stejný název dvou funkcí
Odpovědět | | Sbalit | Link | Blokovat | Admin
Když použiješ objekty, ve kterých budeš mít metodu func(), tak to může vypadat třeba takto:
$volba = 'prvni';
$prvni = new $volba();
$prvni->func();     // zavolání první metody
$volba = 'druha';
$druha = new $volba();
$druha->func();     // zavolání druhé metody
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
15.5.2014 16:26 Sten
Rozbalit Rozbalit vše Re: PHP stejný název dvou funkcí
Odpovědět | | Sbalit | Link | Blokovat | Admin
Použijte prostory jmen.
15.5.2014 16:47 jos
Rozbalit Rozbalit vše Re: PHP stejný název dvou funkcí
Odpovědět | | Sbalit | Link | Blokovat | Admin
a nebo taky anonymní funkce
x.php:

return function (....)
{
}

main.php:

$fun = require x.php;
$fun();
akorát nebudeš mít tu funkci globálně přístupnou
18.5.2014 01:29 Delaunay | skóre: 17 | blog:
Rozbalit Rozbalit vše Re: PHP stejný název dvou funkcí
Odpovědět | | Sbalit | Link | Blokovat | Admin
Pokud všechny includované soubory mají stejně definovanou funkci some_func() a zároveň je instalované rozšíření runkit:
$volba = 'prvni';
include $volba.".php";
some_func();
runkit_function_remove('some_func');
$volba = 'druha';
include $volba.".php";
some_func();
Josef Kufner avatar 18.5.2014 20:04 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: PHP stejný název dvou funkcí
Odpovědět | | Sbalit | Link | Blokovat | Admin
Jdeš na to špatně. Použij objekty, autoloader a nebudeš to vůbec řešit.

Do jednoho souboru patří definice jedné třídy. Autoloader podle jména třídy odvodí název souboru a includne ho. Takže tvůj kód pak vypadá takto:
$volba = 'Prvni';
$v = new $volba();
$v->delejNeco();

$volba = 'Druha';
$v = new $volba();
$v->delejNeco();
No a aby to celé fungovalo, tak na začátku udeláš:
spl_autoload_register(function($class) {
    $filename = 'class/'.str_replace('\\', DIRECTORY_SEPARATOR, $class).'.php';
    if (file_exists($filename)) {
        require($filename);
    }
});
Pak budeš mít soubory class/Prvni.php a class/Druhy.php, kde bude definice těch dvou tříd.

Jen se ještě zamysli nad tím, co se stane, když ti někdo podstrčí opravdu ošklivou volbu.
Hello world ! Segmentation fault (core dumped)

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.