| Autor | Zpráva | ||
|---|---|---|---|
| návštěvník Profil * |
#1 · Zasláno: 22. 12. 2013, 11:56:27
Dá se konstanta třídy nastavit dynamicky?
Mám třídu view->ms která by měla obsahovat několik konstant ohledně vzkazů. Původní kód z php 4 definuje konstanty globálně dynamicky, tak že načte soubor lang.php, kde jsou popisky. Ve třídě bych potřeboval přiřadit konstantám hodnoty kderé jsou v těchto prvcích pole $w. define('TOTAL_MESSAGES', $w[226]);
define('TOTAL_MESSAGES_VALUE', $count);
define('NUM', $w[227]);
define('FROM', $w[228]);
define('SUBJECT', $w[168]);
define('DATE', $w[229]);
define('DEL', $w[230]); |
||
| Kcko Profil |
#2 · Zasláno: 22. 12. 2013, 12:19:08
návštěvník:
dá, funkce constant
|
||
| návštěvník Profil * |
#3 · Zasláno: 22. 12. 2013, 12:46:31 · Upravil/a: návštěvník
Kcko:
Jenže jak ji použít? Je toto správné? class View_messages_class{
private $numbers, $from_ids, $names, $ids, $subjects, $reads, $sentTimes, $colors;
const bar=0;
function __construct($w){
$self->bar=constant($w);
}
}Já potřebuju konstantu nastavit, ne ji vrátit |
||
| Alphard Profil |
#4 · Zasláno: 22. 12. 2013, 13:18:21
Jak to chcete použít? Dynamicky vytvářené konstanty už nejsou konstanty v původním slova smyslu. A navíc jich máte docela dost. Nebylo by lepší mít nějaký objekt s konfigurací? Klidně read only.
|
||
| návštěvník Profil * |
#5 · Zasláno: 22. 12. 2013, 13:23:52
Alphard:
Ano ten objekt s konfigurací, právě nad tím uvažuju. |
||
| Alphard Profil |
#6 · Zasláno: 22. 12. 2013, 13:28:05
návštěvník:
Pro konfiguraci klidně private pole/jednotlivé proměnné, podle situace. Hodnota se zpřístupní pomocí __get(). Když tam nebudou set metody, půjde to nastavit jen přes konstruktor. Možností je hromada, použijte, co vám vyhovuje. |
||
| návštěvník Profil * |
#7 · Zasláno: 22. 12. 2013, 14:08:36
Není to konfigurační pole, je to pole s popisky v příslušném jazyce. Spíš mě vadí na tom ten fakt, že pole je rozsáhlé a při iniciaci každé z devíti set položek se musí dohledávat klíč v takto širokém poli. To máte 500500x posunout ukazatel v poli na místo dotyčné. Takže mě napadlo rozdělit to pole do vícerozměrného pole např. o počtu deseti elementů obsahující každý po jedné stovce. Tím by se to snížilo na 50500 posunů. V případě 3 úrovní na 5500 jestli dobře počítám.
|
||
| Tori Profil |
#8 · Zasláno: 22. 12. 2013, 15:09:25
návštěvník:
„pole je rozsáhlé a při iniciaci každé z devíti set položek se musí dohledávat klíč v takto širokém poli.“ Můžu se zeptat, jakým způsobem se s těmi lokalizovanými řetězci pracuje, že se dohledávají takto složitě? Myslela jsem, že to bude něco na způsob: public function preloz($text)
{
return isset($this->polePrekladu[$text]) ? $this->polePrekladu[$text] : $text;
// případně $this->polePrekladu[md5($text)]
} |
||
| návštěvník Profil * |
#9 · Zasláno: 22. 12. 2013, 15:20:28
Tori:
Oni se nedohledávají složitě, jen uvažuji nad tím jak funguje struktura Array. |
||
| Kcko Profil |
#10 · Zasláno: 22. 12. 2013, 19:28:29
návštěvník:
Tak jak napsala Tori. Klíčem je unikátní výraz a hodnotou je jeho přeložený název. Pomocí isset to bude rychlé. Mám to podobně a taky mám na webu stovky překladů... |
||
| honky tonk Profil * |
#11 · Zasláno: 24. 12. 2013, 22:07:01
Kcko:
Akorád lituji že autor původních stránek dedal zvlášť chybové hlášky a zvlášť ty ostatní zprávy. Je to takové všechno do kupy a to snižuje přehlednost. Zkoušel jsem jestli stránka bude pracovat rychleji, když bych to rozdělil na dvoúrovňové pole stovce nebo na tří úrovňové po desítkách. Vyšel jsem nakonec s dvounásobně velkou časovou prodlevou :-) A to bylo načítání ze souboru. Nejefektivnější se tedy zdá styl array( 'word1' =>'translation1', 'word2' =>'translation2', ... ). Myslel jsem že to bude pomalejší protože php to musí kompilovat. Ale není to tak. Je to nejspíš ta nejrychlejší cesta. |
||
|
Časová prodleva: 12 let
|
|||
0