Avatar
Jenkings
Redaktor
Avatar
Jenkings:10.3.2016 11:56

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.3.2016 11:59
Odpovědět 10.3.2016 11:56
Největší časovou náročnost má výpočet časové náročnosti..
Avatar
Odpovídá na Jenkings
Dominik Klapuch:10.3.2016 12:16

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.3.2016 12:16
Kód a data patří k sobě.
Avatar
Odpovídá na Jenkings
Dominik Klapuch:10.3.2016 12:31

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.3.2016 12:34
Nahoru Odpovědět  +2 10.3.2016 12:31
Kód a data patří k sobě.
Avatar
Jenkings
Redaktor
Avatar
Odpovídá na Dominik Klapuch
Jenkings:10.3.2016 12:39

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.3.2016 12:39
Největší časovou náročnost má výpočet časové náročnosti..
Avatar
Pavel Parma
Člen
Avatar
Pavel Parma:10.3.2016 23:03

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.3.2016 23:03
Avatar
Jenkings
Redaktor
Avatar
Odpovídá na Pavel Parma
Jenkings:11.3.2016 6:43

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.3.2016 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.