abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    dnes 11:55 | Upozornění

    V neděli 11. října proběhne rotace klíče kořenové zóny. Podruhé v historii. Ondřej Filip na blogu CZ.NIC: "Pokud je pro Vás DNS protokol spíše výzva, ale přesto spravujete nějakou síť či DNS resolver, zkuste si jednoduchý test, který připravila firma Cloudflare na této adrese. Obzvláště zbystřit byste měli, pokud uvidíte nějaká červená políčka."

    Ladislav Hagara | Komentářů: 3
    dnes 09:55 | IT novinky

    Vláda Spojených států se rozhodla vyřadit americkou softwarovou společnost Microsoft a několik dalších velkých technologických podniků z programu, který umožňuje kvalifikovaným zahraničním pracovníkům získat povolení k trvalému pobytu. Oznámila to včera administrativa amerického prezidenta Donalda Trumpa. Opatření zdůvodnila rozsáhlým zneužíváním programu, který je dlouhodobě terčem kritiky ze strany Trumpových příznivců, neboť prý znevýhodňuje americké pracovníky.

    Ladislav Hagara | Komentářů: 11
    dnes 09:44 | IT novinky

    Datové centrum největší ruské technologické společnosti Jandex v Rjazaňské oblasti se stalo cílem dronového útoku a zastavilo provoz. Jandexu se někdy přezdívá „ruský Google“. Provozuje nejoblíbenější internetový vyhledávač v Rusku nebo aplikace pro objednávky jídla a taxi. Využívají jej desítky milionů lidí v rusky mluvících zemích.

    Ladislav Hagara | Komentářů: 8
    dnes 09:33 | Nová verze

    Francouzská společnost Mistral AI představila Mistral Large 4 (interně přezdívaný 'le Chonk', volně přeloženo 'pořádný macek'), 'open-weight multimodální hybridní instruct-and-reasoning model s architekturou granulárního MoE, nativně podporující více jak 160 jazyků'. Model má přes jeden bilión parametrů, z nichž při práci využívá 49 miliard, kontextové okno o délce milion tokenů a obrazový enkodér o 1,6 miliardách parametrů.

    … více »
    ❗Červivý Hřib krade❗ | Komentářů: 0
    dnes 03:22 | Nová verze

    Svobodný multiplatformní herní engine Bevy napsaný v Rustu byl vydán ve verzi 0.20. Díky 227 přispěvatelům.

    Ladislav Hagara | Komentářů: 1
    dnes 03:11 | Komunita

    Simon Long oznámil Raspberry Pi Desktop pro PC a Mac s Intelem postavený na aktualizovaném Debianu 13 Trixie. S klientem Raspberry Pi Connect pro vzdálenou správu. Ke stažení je vedle Raspberry Pi OS pro Raspberry Pi.

    Ladislav Hagara | Komentářů: 0
    včera 21:33 | Zajímavý projekt

    ESP32-C3 adblock přemění lacinou vývojovou desku ESP32‑C3 na samostatný DNS blokovač nejenom reklamních domén, minimalistickou alternativu k populárnímu Pi-hole. ESP32-C3 adblock místo objemných názvů domén ukládá jejich 40-bitové FNV-1a hashe do flash paměti, které pak binárně prohledává, kontrola jedné domény trvá přibližně 10 milisekund. Blocklist pojme až 537 tisíc domén a lze jej spravovat přes webové rozhraní. Projekt zatím

    … více »
    ❗Červivý Hřib krade❗ | Komentářů: 0
    včera 21:00 | Zajímavý software

    ArtCraft je sada open source aplikací pro práci s obrázky a videi "inspirovaných" aplikacemi od Adobe. Napsaných v Rustu. Pro MacOS, Windows i Linux. Běží také ve webovém prohlížeči. Aktuálně se jedná o 7 aplikací: PhotoCraft (Photoshop), VectorCraft (Illustrator), FilmCraft (Premiere Pro), LightCraft (Lightroom), PdfCraft (Acrobat), EffectCraft (After Effects) a DesignCraft (InDesign). Zdrojové kódy jsou k dispozici na GitHubu.

    Ladislav Hagara | Komentářů: 8
    včera 16:33 | Zajímavý software

    Strands Decider 2B je malý open-source model s 2 miliardami parametrů, určený k rychlé klasifikaci vstupů a rozhodování mezi možnostmi, generující odpovědi ve stylu modelu Jev. Strands dosáhl přibližně 72% shody s Jevem na veřejné testovací sadě JevBench (tento benchmark pochopitleně nepředstavuje přímé srovnání s modelem Jev). Zdrojové kódy jsou k dispozici na GitHubu pod licencí Apache-2.0, váhy modelu na Hugging Face.

    ❗Červivý Hřib krade❗ | Komentářů: 4
    včera 16:22 | Upozornění

    Ve věku 90 let zemřela americká softwarová inženýrka Margaret Hamiltonová, která vedla tým, jenž vyvíjel letový software pro program Apollo amerického Národního úřadu pro letectví a vesmír (NASA).

    Ladislav Hagara | Komentářů: 9
    Které desktopové prostředí na Linuxu používáte?
     (9%)
     (7%)
     (4%)
     (21%)
     (29%)
     (8%)
     (5%)
     (2%)
     (14%)
     (20%)
    Celkem 2818 hlasů
     Komentářů: 31, poslední 13.8. 00:27
    Rozcestník

    Dotaz: Jak na autoload při více adresářů v php

    6.8.2013 11:42 Falko
    Jak na autoload při více adresářů v php
    Přečteno: 936×
    Ahoj, poradí někdo, jak tuto funkci opravit, když mám třídy ve více adresářích? Děkuji
         function __autoload($class_name)
         {
              include_once(ABS_PATH.'/class1/'.$class_name.'.php');
         }

    Řešení dotazu:


    Odpovědi

    6.8.2013 12:17 chrono
    Rozbalit Rozbalit vše Re: Jak na autoload při více adresářů v php
    Z čoho sa má zistiť, v ktorom adresári sa ten súbor nachádza?
    6.8.2013 12:28 Falko
    Rozbalit Rozbalit vše Re: Jak na autoload při více adresářů v php
    No budu je mít v adresářích: class1, class2, pages a system
    6.8.2013 13:20 bossqone
    Rozbalit Rozbalit vše Re: Jak na autoload při více adresářů v php

    Toto by malo fungovat :)

    function __autoload($class_name)
    {
    	if (file_exists(ABS_PATH . '/class1/' . $class_name . '.php'))
    	{
    		require_once(ABS_PATH . '/class1/' . $class_name . '.php');
    	}
    	elseif (file_exists(ABS_PATH . '/class2/' . $class_name . '.php'))
    	{
    		require_once(ABS_PATH . '/class2/' . $class_name . '.php');
    	}
    	elseif (file_exists(ABS_PATH . '/pages/' . $class_name . '.php'))
    	{
    		require_once(ABS_PATH . '/pages/' . $class_name . '.php');
    	}
    	elseif (file_exists(ABS_PATH . '/system/' . $class_name . '.php'))
    	{
    		require_once(ABS_PATH . '/system/' . $class_name . '.php');
    	}
    	else
    	{
    		echo "Called class doesn't exists!";
    		exit;
    	}
    }
    
    6.8.2013 15:49 Dědek
    Rozbalit Rozbalit vše Re: Jak na autoload při více adresářů v php
    Nemá to být spíše takto? Když soubor najde aby dál již nehledal? ;-)
    function __autoload($class_name)
    {
    	if (file_exists(ABS_PATH . '/class1/' . $class_name . '.php'))
    	{
    		require_once(ABS_PATH . '/class1/' . $class_name . '.php');
                    return;
    	}
    	elseif (file_exists(ABS_PATH . '/class2/' . $class_name . '.php'))
    	{
    		require_once(ABS_PATH . '/class2/' . $class_name . '.php');
                    return;
    	}
    	elseif (file_exists(ABS_PATH . '/pages/' . $class_name . '.php'))
    	{
    		require_once(ABS_PATH . '/pages/' . $class_name . '.php');
                    return;
    	}
    	elseif (file_exists(ABS_PATH . '/system/' . $class_name . '.php'))
    	{
    		require_once(ABS_PATH . '/system/' . $class_name . '.php');
                    return;
    	}
    	else
    	{
    		echo "Called class doesn't exists!";
    		exit;
    	}
    }
    Tarmaq avatar 6.8.2013 15:57 Tarmaq | skóre: 39
    Rozbalit Rozbalit vše Re: Jak na autoload při více adresářů v php
    V tom prikladu od bossqone prece ale taky uz dal nic nehleda pokud najde..
    Don't panic!
    6.8.2013 17:52 Karlos
    Rozbalit Rozbalit vše Re: Jak na autoload při více adresářů v php
    V tom prikladu od bossqone prece ale taky uz dal nic nehleda pokud najde..
    To nemáš pravdu ;)
    6.8.2013 17:57 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
    Rozbalit Rozbalit vše Re: Jak na autoload při více adresářů v php
    Opravdu?
    To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
    6.8.2013 17:51 Karlos
    Rozbalit Rozbalit vše Re: Jak na autoload při více adresářů v php
    Dědku, dědku :-) return; v podmínce? :-D
    6.8.2013 17:53 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
    Rozbalit Rozbalit vše Re: Jak na autoload při více adresářů v php
    return tam může být a není špatný, jen uváděný důvod je zcela špatně. ;-)
    To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
    6.8.2013 17:56 Karlos
    Rozbalit Rozbalit vše Re: Jak na autoload při více adresářů v php
    A co v tom konkrétním příkladu ten return plní? ;-)
    6.8.2013 17:59 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
    Rozbalit Rozbalit vše Re: Jak na autoload při více adresářů v php
    Ukončí vykonávání fce __autoload()…
    To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
    6.8.2013 18:04 Karlos
    Rozbalit Rozbalit vše Re: Jak na autoload při více adresářů v php
    Ano, to return dělá.... :-D ale myslel jsem to tak, že v tomto případě je tam return zcela k ničemu, fce __autoload() stejně v tomto případě pojede až do konce a to bez ohledu jestli načte nebo nenačte existující files ;-)
    6.8.2013 18:16 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
    Rozbalit Rozbalit vše Re: Jak na autoload při více adresářů v php
    Není k ničemu, zabrání prováděná případného následného kódu.
    To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
    6.8.2013 18:46 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
    Rozbalit Rozbalit vše Re: Jak na autoload při více adresářů v php
    …stejně v tomto případě pojede až do konce a to bez ohledu jestli načte nebo nenačte existující files ;-)
    Proč?
    To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
    6.8.2013 17:50 Karlos
    Rozbalit Rozbalit vše Re: Jak na autoload při více adresářů v php
    Co to je za rada? echo "Called class doesn't exists!"; se zavolá vždy!! Nepoužitelné řešení...
    6.8.2013 18:00 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
    Rozbalit Rozbalit vše Re: Jak na autoload při více adresářů v php
    Tedy jedeš…, nezavolá (jestli tedy nebudeme debatovat o termínu „zavolá“).
    To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
    6.8.2013 18:09 Karlos
    Rozbalit Rozbalit vše Re: Jak na autoload při více adresářů v php
    Tedy jedeš…, nezavolá (jestli tedy nebudeme debatovat o termínu „zavolá“).
    Tedy jedeš…, nezavolá (jestli tedy nebudeme debatovat o termínu „zavolá“).
    OK, tak ještě jednou ;) V uvedeném kódu se vždy spustí jazykový konstrukt echo. A neříkej, že nee :)
    6.8.2013 18:22 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
    Rozbalit Rozbalit vše Re: Jak na autoload při více adresářů v php
    Tak jo, „nee“.
    To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
    Tarmaq avatar 7.8.2013 11:00 Tarmaq | skóre: 39
    Rozbalit Rozbalit vše Re: Jak na autoload při více adresářů v php
    z tvych prispevku mam pocit, ze moc nerozumis jak funguje if/else/elseif.
    Prece to echo se spusti jen v pripade, ze to tu tridu nenajde.. Jakmile ji najde, tak to do zadne dalsi else/if vetve nepoleze..
    Don't panic!
    6.8.2013 16:02 Kit
    Rozbalit Rozbalit vše Re: Jak na autoload při více adresářů v php
    Používám tohle jednoduché řešení:
    function __autoload($class_name) {
        include_once(strtr($class_name, "_\\", "//") . '.php');
    }
    
    Poradí si i s namespace.
    6.8.2013 16:10 Falko
    Rozbalit Rozbalit vše Re: Jak na autoload při více adresářů v php
    No a v jakých adresářích to ty soubory pak hledá?
    6.8.2013 16:17 Kit
    Rozbalit Rozbalit vše Re: Jak na autoload při více adresářů v php
    Název adresáře je součástí jména třídy, používá se to takhle:
    $objekt = new class1_Trida();
    $objekt = new pages_Trida();
    
    nebo pokud používáš namespace
    $objekt = new class1\Trida();
    $objekt = new pages\Trida();
    
    Doporučuji ty adresáře přejmenovat tak, aby ty názvy dávaly smysl.
    6.8.2013 16:24 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
    Rozbalit Rozbalit vše Re: Jak na autoload při více adresářů v php
    První je takové logcké členění bez namespace a to druhé sice smysl to dává jasný, nicméně je to humus daný zápisem namespace v PHP (je to chce myslet u use ... as ..., jinak se nechťa člověk dostane kam nechtěl).
    To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
    7.8.2013 12:47 Kit
    Rozbalit Rozbalit vše Re: Jak na autoload při více adresářů v php
    use ... as ... funguje spíš jako definice makra, takže toho bych se nebál.
    8.8.2013 08:55 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
    Rozbalit Rozbalit vše Re: Jak na autoload při více adresářů v php
    Popřemýšlel a zkusil si. Ony jsou ty dvě věci __autoload() a use ... as ... jsou „nejisté“ každá svým způsobem a jejich kombinace na to nemá vliv.
    To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
    6.8.2013 16:25 Falko
    Rozbalit Rozbalit vše Re: Jak na autoload při více adresářů v php
    Jo takhle, jdu to zkusit...

    PS: To řešení co jsi vymyslel můžu použít ve svém kódu? Je to Open source? Díky
    6.8.2013 16:28 Kit
    Rozbalit Rozbalit vše Re: Jak na autoload při více adresářů v php
    Má to licenci Public Domain.
    6.8.2013 16:53 Falko
    Rozbalit Rozbalit vše Re: Jak na autoload při více adresářů v php
    Stejně mi to nefunguje :-(

    mám soubor index.php a v něm mám

    <?php
    function __autoload($class_name) {
        include_once(strtr($class_name, "_\\", "//") . '.php');
    }
    $seznam = new class_Seznam();
    ?>
    
    pak mám soubor /class/Seznam.php a v něm mám
    <?php
    class Seznam{
         public function __construct(){
              ...
         }
    }
    ?>>
    ale dostanu: Fatal Error - Class 'class_Seznam' not found. CO dělám špatně? Díky
    6.8.2013 17:54 Karlos
    Rozbalit Rozbalit vše Re: Jak na autoload při více adresářů v php
    Názec třídy se musí jmenovat class_Seznam, cesta a název souboru pak /class/Seznam.php
    6.8.2013 18:28 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
    Rozbalit Rozbalit vše Re: Jak na autoload při více adresářů v php

    Jak ti napsal Kit:

    soubor: class1/Trida.php obsahuje třídu class class1_Trida{…
    $objekt = new class1_Trida();

    nebo pokud používáš namespace

    soubor: class1/Trida.php obsahuje definici namespace class1; a (v něm) třídu class Trida{…;
    $objekt = new class1\Trida();
    PS: úmyslně se vyhnul slovu/adresáři class, bo to je klíčové slovo.
    To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
    6.8.2013 20:44 Falko
    Rozbalit Rozbalit vše Re: Jak na autoload při více adresářů v php
    Je to takto dobře?
    <?php
    #Soubor: /var/www/class/Trida.php
    namespace class/Trida{
         class Trida{}
    }
    
    #Soubor: /var/www/index.php
    function __autoload($class_name){
        include_once(strtr($class_name, "_\\", "//") . '.php');
    }
    
    $obj = new class\Trida();
    ?>
    6.8.2013 21:36 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
    Rozbalit Rozbalit vše Re: Jak na autoload při více adresářů v php
    Nemyslím, zkus to takto:
    Soubor: /var/www/class1/Trida.php
    <?php
    namespace class1;
    
    class Trida{
      public function __construct(){
        echo 'An instance of Trida created';
      }
    };
    
    Soubor: /var/www/index.php
    <?php
    function __autoload($class_name){
      include_once(strtr($class_name, "_\\", "//") . '.php');
    }
    
    $obj = new class1\Trida();
    
    A teď se já vyhýbám použití class jako název namespace či adresáře - doporučuji to samé!
    To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
    6.8.2013 21:48 Falko
    Rozbalit Rozbalit vše Re: Jak na autoload při více adresářů v php
    Tohle funguje, díky moc a můžu poprosit o vysvětlení, co přesně dělá "namespace class1;" ? Odstraní z názvu volané class text class1? Díky
    6.8.2013 22:14 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
    Rozbalit Rozbalit vše Re: Jak na autoload při více adresářů v php
    Děkuj Kit-ovi ;)

    namespace = jmenný prostor. Třídu MojeTrida můžeš mít jednu stejného jména v namespace nmsp1 a druhou v nmsp2.
    Dle mého rozumná praktika je, že každý jmenný prostor je de-facto i adresář (PHP toto nijak nevynucuje, jsou to dvě nesouvisející věci).
    Jakmile přidáte namespace, tak plný identifikátor třídy je včetně jména namespace.
    Zápis s lomítkem j sice úděsný, ale PHP vlastní, k namespace tak trochu patří i use kde spolu s tímto typem __autoload vidím určitou nejistotou pokud by se použilo včetně as.

    Tedy zápisem namespace class1; začíná jmenný prostor class1.
    To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
    6.8.2013 18:22 Karlos
    Rozbalit Rozbalit vše Re: Jak na autoload při více adresářů v php
    Když už tak bych použil (já) něco jako...
    function __autoload($class_name)
    {
         $array = array('class1', 'class2', 'pages', 'pages2/pages3', 'pages2/pages3/pages4');
    
         foreach($array as $dir)
         {
              $file = ABS_PATH.'/system/'.$dir.'/'.$class_name.'.php';
    
              if(file_exists($file))
              {
                   include_once($file);
                   return;
              }
         }
    }
    a class pak volal
    $obj = new Trida();
    Název souboru je pak zcela shodný s názvem volané class ;) Tady jsem použil return, jelikož tady opravdu plní to co má, pokud najde požadovanou class, ukončí cyklus a dál již v cyklu nepokračuje ;) Tak, že můžeš ušetřit spoustu času 0.000000005 sec. :-D:-D:-D
    6.8.2013 18:35 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
    Rozbalit Rozbalit vše Re: Jak na autoload při více adresářů v php

    Dle mého…, Kit-ove řešení je mnohem elegantnější umožňuje mít stejné třídy v různých adresářích a jmenných prostorech.

    PS: V duchu diskuze výše: Podmínky jsou určitě rychlejší než cyklus.

    To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
    6.8.2013 18:44 Karlos
    Rozbalit Rozbalit vše Re: Jak na autoload při více adresářů v php

    Dle mého…, Kit-ove řešení je mnohem elegantnější umožňuje mít stejné třídy v různých adresářích a jmenných prostorech.

    Já neřel ani půl slova, že Kit-ovo řešení je špatné, jinak ano, pokud máš na webu 5 adresářů ve kterých máš uloženy class a navíc mají stejný název, je mé řešení nevyhovující, ale ruku na srdce, dělá to snad někdo?

    PS: V duchu diskuze výše: Podmínky jsou určitě rychlejší než cyklus.

    Tak to bezpochyb souhlasím... před pár lety to mělo nějaký význam (vliv na výkon železa).. dneska je to "šumák", "buřt" jak chceš ;)
    6.8.2013 19:01 Kit
    Rozbalit Rozbalit vše Re: Jak na autoload při více adresářů v php
    Je docela obvyklé mít různé třídy se stejným názvem v různých namespace. Umožňuje to importovat cizí knihovny bez kolizí a volit mnohem jednodušší názvy tříd.
    6.8.2013 19:05 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
    Rozbalit Rozbalit vše Re: Jak na autoload při více adresářů v php

    Já neřel ani půl slova, že Kit-ovo řešení je špatné
    Jen jsem měl potřebu vyjádřit své preference… ;-)

    pokud máš na webu 5 adresářů ve kterých máš uloženy class a navíc mají stejný název, je mé řešení nevyhovující, ale ruku na srdce, dělá to snad někdo

    Pokud se používají namespace, tak si myslím, že je to normální (,i když ne třeba častá,) programátorská praktika a i pokud se nepoužívají, tak v tom nevidím nijak špatný postup.

    „PS:“ se vztahuje k:

    „Tady jsem použil return, jelikož tady opravdu plní to co má, pokud najde požadovanou class, ukončí cyklus a dál již v cyklu nepokračuje ;) Tak, že můžeš ušetřit spoustu času 0.000000005 sec.“

    return v obou případech plní stejnou funkci, v tvém kódu je de-facto nutný (jinak by kód nestál za moc :) ), v kódu (od Dědek), zabezpečí, že se fce po patřičném include vždy ukončí, tedy je to obraný mechanismus před nesprávným rozšiřováním dané fce.

    Takže jak píšeš, ano ušetří čas, ale jen oproti zapomenutému return v cyklu v tvém kódu, ale ne oproti kódu od Dědek či bossqone . Proto jsem to napsal.

    To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
    7.8.2013 23:38 Falko
    Rozbalit Rozbalit vše Re: Jak na autoload při více adresářů v php
    Narazil jsem na probém se kterým nedokážu hnout :( Když v nějaké klas za pomocí namespace zavolam jinou class která je v jinéem adresáři, hledá to v system\adddir\Aaa jak to můžu ošetřit? Díky za pomoc
    namespace system;
    
    class Gen {
     public function __construct($site) {
     new adddir\Prints();
     }
    }
    
    new system\Gen();
    8.8.2013 07:51 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
    Rozbalit Rozbalit vše Re: Jak na autoload při více adresářů v php
    To bude problém, ale ne technický :).
    Například následující provede include s absolutní cestou odpichnutou od cesty souboru, ve kterém se definuje konstanta APP_ROOT_DIR.
    define( 'APP_ROOT_DIR', dirname(__FILE__) );
    function __autoload($class_name) {
        include_once(APP_ROOT_DIR.'/'.strtr($class_name, "_\\", "//") . '.php');
    }
    
    To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†

    Založit nové vlákno • Nahoru

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

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.