Autor Zpráva
návštěvník
Profil *
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
návštěvník:
dá, funkce constant
návštěvník
Profil *
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
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 *
Alphard:
Ano ten objekt s konfigurací, právě nad tím uvažuju.
Alphard
Profil
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 *
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
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 *
Tori:
Oni se nedohledávají složitě, jen uvažuji nad tím jak funguje struktura Array.
Kcko
Profil
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 *
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.

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: