| Autor | Zpráva | ||
|---|---|---|---|
| kuba123 Profil * |
#1 · Zasláno: 14. 6. 2013, 12:21:25
Jde dynamicky deklarovat proměnnou uvnitř funkce?
Můj (nefunkční) pokus: function TableRow($arr){
foreach ($arr as $const_name):
global $$const_name, $$const_name.("_VALUE");
die("***". $$const_name);
if ( $$const_name )
echo
'<Tr align=' . C_ALIGN . ' bgcolor="' . COLOR1 . ' ">
<th>' . $$const_name . '<td>' . $$const_name("_VALUE");
endforeach;
}
TableRow(array("BIRTHDAY")); |
||
| Tori Profil |
kuba123:
A co vlastně chcete udělat?? edit: ↓ to není podle věku, vykám automaticky všem, které neznám osobně. |
||
| kuba123 Profil * |
#3 · Zasláno: 14. 6. 2013, 12:34:56 · Upravil/a: kuba123
Deklarovat
global BIRTHDAY, BIRTHDAY_VALUE; uvnitř funkce dynamicky V šabloně je mnoho proměnných jako USERNAME, USERNAME_SHOW, USERNAME_VALUE, FIRST_NAME_SHOW, FIRST_NAME, FIRST_NAME_VALUE, SECOND_NAME_SHOW, SECOND_NAME, SECOND_NAME_VALUE, BIRTHDAY, BIRTHDAY_SHOW, BIRTHDAY_VALUE atd. A chtěl bych udělat funkci na vytvoření řádku tabulky (popřípadě bez tabulky by to byla funkce která jen vypíše řádek textu). A vykat si nemusíte, není mi 60 |
||
| juriad Profil |
kuba123:
Globalním proměnným se vyhni, znepřehledňují kód a zanáší stěží viditelné závislosti. Takový kód se mnohem obtížněji spravuje. Proměnné proměnné patři do stejné kategorie prasáren a vždy je lze nahradit nějakým elegantnějším způsobem. Zkus popsat, čeho se snažíš dosáhnout a ne, jak toho chceš dosáhnout. Pravděpodobně něčeho jako: function tableRows($radky, $i18N) {
foreach($radky as $name => $value) {
echo "<tr><th>" . $i18N.get($name) . "</th>";
echo "<td>" . $value . "</td></tr>\n";
}
}
class I18N {
private $preklady = array(
'BIRTHDAY' => 'narozeniny',
'EYES_COLOR' => 'barva očí');
function get($nazev) {
if(isset($preklady[$nazev])) {
return $preklady[$nazev];
} else {
return '<span class="chybi_preklad">' . $nazev . '</span>';
}
}
}
$i18N = new I18N();
tableRows(array(
'BIRTHDAY' => '1.1.1970',
'EYES_COLOR' => 'modré'), $i18N); |
||
| kuba123 Profil * |
#5 · Zasláno: 14. 6. 2013, 12:59:23
juriad:
To já vím, že globální proměnné znepřehledňují kód. Jenže RS který jsem se rozhodl použít je už na těch GP závislý. Takže s tím už nic nenadělám. Taky bych nejraději použil třídu, jenže vzhledem k tomu jak že ten RS je komplexní a více jazyčný by to bylo příliš náročné. Se třídami bych to mohl možná zkusit později, až se s tím RS seznámím více do hloubky. Takže dá se ten dynamický způsob deklarování použít nebo ne? Vzhledem k tomu, že ty GP už tam jsou. |
||
| peta Profil |
<?php
$USERNAME = 'aaa';
$USERNAME_VALUE = 'bbb';
$const_name = 'USERNAME';
var_dump(array( $$const_name, ${$const_name."_VALUE"} ));
?> |
||
| kuba123 Profil * |
#7 · Zasláno: 14. 6. 2013, 13:09:34 · Upravil/a: kuba123
Tak zkus toto: die() má vypsat datum. Kdyby to vypsalo datum, tak bych smazal die a mělo by fugovat. Leč tam je ještě někde chyba.
function TableRow($arr){
global $COLOR1;
foreach ($arr as $const_name):
$v=$const_name."_VALUE";
$s=$const_name."_SHOW";
global $$const_name, $$s, $$v;
die("s:".$$s);
if ( $$s )
echo '<Tr align=' . C_ALIGN . ' bgcolor="' . COLOR1 . ' ">
<th>' . $$const_name . '<td>' . $$v;
endforeach;
}
$BIRTHDAY="1.1.1990";
TableRow(array("BIRTHDAY"));Aha, tak ono to vlastně funguje, jen jsem spletl název proměnné zdá se ne die("s:".$$s); ale die("datum:".$$const_name); Ještě teda jeden dotaz. Jak zpřístupnit konstantu pomocí proměnné? Tak už jsem to opravil. Takže ne přes proměnné, ale přes konstanty se přistupuje. function TableRow($arr){
global $COLOR1;
foreach ($arr as $const_name):
$name=constant($const_name);
$v=constant($const_name."_VALUE");
$s=constant($const_name."_SHOW");
if ( $s )
echo '<Tr align=' . C_ALIGN . ' bgcolor="' . COLOR1 . ' ">
<th>' . $name . '<td>' . $v;
endforeach;
}
TableRow(array("BIRTHDAY")); |
||
|
Časová prodleva: 12 let
|
|||
0