Autor Zpráva
nejdesemiprihlasit
Profil
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();
a potřebuji aby to vyvolalo funkci menu_displaysidebar();
Je něco takového možné, příp. je jiný způsob jak to udělat ?
Tomášeek
Profil
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 *
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
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
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
Tomášeek:
Toto není správný přístup
A jak je to tedy správně ?
Keeehi
Profil
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
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
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.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

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