Diskuze: Načtení náhodné třídy

PHP PHP Načtení náhodné třídy American English version English version

Avatar
Jenkings
Redaktor
Avatar
Jenkings:

Ahoj.
Potřeboval bych poradit s problémem ohledně vytvoření instance od náhodné třídy, bez toho abych někde uchovával jejich seznam.

Modelová situace:
Budu mít třeba rozhraní ISouteze, a následně několik tříd které vytvářejí konkrétní soutěže a implementují toto rozhraní (například aby všechny z nich obsahovaly metody Vygeneruj() a Vyhodnot() apod.). Pak bych například CRONem každou hodinu vytvořil novou soutěž a vyhodnotil tu předchozí.

Je tedy možné, nějak vybrat náhodnou soutěž bez toho, abych někde musel uchovávat kompletní seznam jednotlivých soutěží ? tzn. že když vytvořím novou a nakopíruji na server, tak se automaticky zařadí do výběru náhodných, aniž bych ji musel někam zvlášť zapisovat ?

Editováno 10. března 11:59
Odpovědět 10. března 11:56
Největší časovou náročnost má výpočet časové náročnosti..
Avatar
Odpovídá na Jenkings
Dominik Klapuch:

Pokud si pojmenováváš třídy stejně jako soubory, tak stačí projít složku se soubory, odstranit .php a vytvořit objekt ze stringu.

Nahoru Odpovědět  +1 10. března 12:16
Kód a data patří k sobě.
Avatar
Odpovídá na Jenkings
Dominik Klapuch:

Potom bys mohl použít něco takového:

<?php
$files = array_filter(
        scandir(__DIR__ . '/souteze'),
        function($file) {
                return $file != '.' && $file != '..';
        }
);

$class = new $files[mt_rand(0, count($files) - 1)];

Mohl bys třeba i nastavit čím mají ty tvé třídy/soubory začínat.

Editováno 10. března 12:34
Nahoru Odpovědět  +2 10. března 12:31
Kód a data patří k sobě.
Avatar
Jenkings
Redaktor
Avatar
Odpovídá na Dominik Klapuch
Jenkings:

Díky za tip :) tohle řešení mne taky napadlo, jen jsem doufal že na to je i nějaká úspornější možnost než prolistovat celou složku.

Nahoru Odpovědět 10. března 12:39
Největší časovou náročnost má výpočet časové náročnosti..
Avatar
Pavel Parma
Člen
Avatar
Pavel Parma:

Kvůli OOD principům by všechny soutěže měli být uvnitř jednoho balíčku, takže přece není problém projet všechny soubory ve složce reprezentující tento balíček. Pokud to chceš jinak, další varianta je jedině mít někde statické pole|funkci, které ti bude obsahovat seznam fully qulified name danych trid a ty si random vyberes index z range. V takovém příípadě ale při přidání nové třídy musíš i třídu registrovat do toho pole|funkce.

Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
 
Nahoru Odpovědět  +1 10. března 23:03
Avatar
Jenkings
Redaktor
Avatar
Odpovídá na Pavel Parma
Jenkings:

Jasně, všechny třídy sice mám v jedné složce, jen mi to nepřipadalo jako úplně správný přístup. Proto jsem se raději ptal. A ohledně toho pole/fce, přesně tak jsem to měl doteď, a jak jsem psal v úvodním příspěvku tak jsem hledal řešení "bez toho abych někde uchovával jejich seznam.".

Každopádně děkuji za objasnění. Nakonec tedy zvolím tu metodu kdy projedu složku s těmi soubory.

Nahoru Odpovědět 11. března 6:43
Největší časovou náročnost má výpočet časové náročnosti..
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 6 zpráv z 6.