Autor | Zpráva | ||
---|---|---|---|
nejdesemiprihlasit Profil |
#1 · Zasláno: 19. 11. 2017, 13:01:00
Mám další problém,
jde vyvolat funkci podle proměnné ? Potřebuji vyvolat funkci která má jméno podle proměnné. Neco ve stylu. $system = "menu"; $system._displaysidebar(); Je něco takového možné, příp. je jiný způsob jak to udělat ? |
||
Tomášeek Profil |
#2 · Zasláno: 19. 11. 2017, 13:32:36
nejdesemiprihlasit:
Toto není správný přístup. Někde jsi udělal chybu, potřebuješ-li takto tvořit jména proměnných/funkcí/čehokoliv. |
||
M4n Profil * |
#3 · Zasláno: 19. 11. 2017, 18:31:33
Existuje funkce
call_user_func() , ale obecně by se takto měly volat jen callbacky. Tvořit nějakou logiku skládáním jmen pomocí stringů je bez výjimky chyba.
|
||
Keeehi Profil |
#4 · Zasláno: 19. 11. 2017, 18:39:52
M4n:
„skládáním jmen pomocí stringů je bez výjimky chyba.“ Pro potřeby nejdesemiprihlasit to určitě špatně bude, ovšem reálné použití to má. Spousta frameworků tím například řeší volání controllerů z routeru a tam mi to přijde jako naprosto legitimní. |
||
nejdesemiprihlasit Profil |
#5 · Zasláno: 19. 11. 2017, 20:26:24
Ovšem je nějaký způsob jak vyvolat fukce ?
"Funguje" mi to takto: Script zjistí které addony jsou k dispozici. -> poté naincluduje jejich systémové soubory -> a pak při sestavování menu postupne vyvolá funkci displaysidebar() ovšem displaysidebar() má každý addon jiný a potřebuji aby se postupne všechny možné varianty vypsaly pod sebe. Napadá mě také možnost ukládat to do proměnných pomocí: $sidebar = "<div class="sidebar">"; $sidebar .= "<ul>.........</ul>"; $sidebar .= "<ul>.........</ul>"; $sidebar .= "<ul>.........</ul>";Ale nevím jestli je to zrovna nejlepší řešení. |
||
nejdesemiprihlasit Profil |
#6 · Zasláno: 19. 11. 2017, 22:11:46
Tomášeek:
„Toto není správný přístup“ A jak je to tedy správně ? |
||
Keeehi Profil |
#7 · Zasláno: 19. 11. 2017, 22:11:52
nejdesemiprihlasit:
Každý addon by měl být ve svém vlastním namespacu. Pak se ty funkce jednotlivých addonů mohou jmenovat stejně. Taky se dají vynechat funkce a zneužít k tomu include. // addons/foo/sidebar_links.php return [ 'link 1', 'link 2' ]; // sidebar.php function getAddonsSidebarLinks () { $addons = [ 'foo', 'bar' ]; $links = []; foreach ($addons as $addon) { $addonLinks = include "addons/$addon/sidebar_links.php"; if (is_array($addonLinks)) { $links = array_merge($links, $addonLinks); } } return $links; } |
||
nejdesemiprihlasit Profil |
#8 · Zasláno: 20. 11. 2017, 15:32:14
ano řešit to includama bylo také řešení, ale musel bych mít více souborů. Jelikož potřebuju funkci na "menu", "upozornění" a "maindashboard" nakonec jsem to vyřešil přidávání do proměnných. Takže mám 3 proměnné a postupně do nich připisuju věci pomoci
$addonmenu .= "bla". |
||
Keeehi Profil |
#9 · Zasláno: 20. 11. 2017, 18:53:42
nejdesemiprihlasit:
„ale musel bych mít více souborů“ To už se tak stává. Více souborů většinou přispívá k přehlednosti projektu. |
||
Časová prodleva: 6 let
|
0