Autor | Zpráva | ||
---|---|---|---|
1ight Profil |
#1 · Zasláno: 17. 11. 2008, 01:48:00
Dobrý večer chtěl bych se zeptat mám tu takovou záhadu
potřeboval bych nadefinovat // pravidlo co chci zobrazit $var = $var1 . $var2 //poté nastavit proměnný $var1 = 'Ahoj'; $var2 = 'Jak se máš'; //a vypsat pravidlo echo $var; Vím, že to takhle řešit nejde, tak bych se chtěl zeptat jestli někdo nezná nějaké jednoduché jiné řešení jak předdefinovat $var pravidlo, poté spracovat stránku a nakonci tento $var vypsat. Kamarád mi poradil toto řešení, ale neni úplně dokonalý a dál nevim je to tak na 98% funkční viz.: - nadefinovani pravidla ve funkci a(); - pote nacteni stranky funkce b(); - echo b(); vypsani stranky podle pravidla a function a($var1, $var2) { // zde nadifinuju $var pravidlo co se má zobrazit ve výsledku $var = $var1 . $var2; return $var; } function b() { // nacteni promennych ze stránky $var0 = 'neco'; $var1 = 'ahoj'; $var2 = 'jak se máš?'; $var3 = 'bla bla'; // vypsaní pravidla co se má zobrazit echo a($var1, $var2); } b(); Zde je problém že u předposlední řádky echo a($var1, $var2); bych potřeboval aby zde bylo jen a(); bez tech $var1, $var2 v závorkách Duvod: protože nikdy nevím kolik a v jakým tvaru použiju proměnný $var1, $var2,... potřeboval bych to mít nějak dynamický. Jestli by někdo věděl jak tenhle problém vyřešit prosím odepište s pozdravem. |
||
tiso Profil |
#2 · Zasláno: 17. 11. 2008, 02:00:52
Buď použiješ globálne premenné, alebo zadáš funkcii parametre cez pole a($array_params), kde nebude záležať na ich počte...
|
||
1ight Profil |
#3 · Zasláno: 17. 11. 2008, 03:03:06
Děkuju moc za tipy:
- "Buď použiješ globálne premenné" pokoušel jsem se a nerozběhal jsem to - a($array_params) to jsem se taky pokoušel a nejde to viz rešeni ( ale byl to dobrý nápad ) (šlo by to jen v případě že bych tam dopsal do předposledního řádku print_r(a($var_arr, $var2));) function a($var_arr) { // zde nadifinuju $var pravidlo co se má zobrazit ve výsledku $var_arr = array( 1 => $var2, 2 => 'b' ); return $var_arr; return $var2; } function b() { // nacteni promennych ze stránky $var0 = 'neco'; $var1 = 'ahoj'; $var2 = 'jak se máš?'; $var3 = 'bla bla'; // vypsaní pravidla co se má zobrazit echo '<pre>'; print_r(a($var_arr)); echo '</pre>'; } b(); |
||
jansfabik Profil |
#4 · Zasláno: 17. 11. 2008, 03:19:45
class Variable { private $vars; public function __construct () { $this->vars = func_get_args(); } function __toString () { foreach ($this->vars as $var) { $return.= $GLOBALS[$var]; } return $return; } } $var = new Variable ('var1', 'var2'); global $var1, $var2; $var1 = 'Ahoj'; $var2 = 'Jak se máš'; echo $var; |
||
tiso Profil |
#5 · Zasláno: 17. 11. 2008, 03:25:23 · Upravil/a: tiso
1ight - ale tie funkcie mali vyzerať inak:
function a($var_arr) { return implode(' ', $var_arr);//alebo return $var_arr[2].'b'; a podobne } function b() { $var[] = 'neco'; $var[] = 'ahoj'; $var[] = 'jak se máš?'; $var[] = 'bla bla'; echo a($var); } b(); Alebo som len nepochopil o chceš dosiahnuť? |
||
jansfabik Profil |
#6 · Zasláno: 17. 11. 2008, 03:38:52
nebo takhle:
class Data { private $vars; public function add ($val) { $this->vars[] = $val; } public function __toString () { return implode(' ', $this->vars); } } $vars = new Data(); $vars->add ('neco'); $vars->add ('neco2'); $vars->add ('neco3'); echo $vars; |
||
1ight Profil |
#7 · Zasláno: 17. 11. 2008, 04:06:31 · Upravil/a: 1ight
Zkoušel jsem ty návrhy od pana tiso tenfunguje nepropustí mi proměnný ve smyslu $var[] = $cesta . $span; propustí jen $var[] = 'neco'; Ty další od pana jansfabik ten třetí taky neumí pracovat s $var = $sql['id'] a ten první ten zkouším možná by mohl nejak zafungovat zkouším to přepisovat doufam že se trefím a pujde to.
Ještě napíšu konkrétně co bych potřeboval: Mám po levý straně menu a tam jsou funkce, připojení do sql a tak... Chtěl bych si tam dodělat jednoduchý konfigurační $var v jakým formatu se mi bude zobrazovat menu a odkazy. Nejdřív si nastavím ten $var a pak vyvolám menu aby se mi vypsalo, ale problém je že $var má v sobě i třeba $sql['id'] a další proměnné variable takže to neni jednoduchý protože nastavuju neexistující proměnné. Zjednodušene můj úmysl: // nastavím $var v jakým tvaru se mi bude vypislovat menu function a($sql['menu_id'], $sql3['menu_level'],...) { // zde nadifinuju $var jak se mi bude zobrazovat menu $var = '<div class="menu_blue"><a href="' url . '?page=' . $sql['menu_id'] . '&id=' . $_REQUEST['id'] . '&level=' . $sql3['menu_level'] . '">' . $sql3['title'] . '</a></div>'; return $var; } // tady je napsaný kod menu function menu($var) { $.. = mysql_connect( $.., $.., $.. ) or die ( mysql_error() ); mysql_select_db( $.. ) or die ( mysql_error() ); $sql1 = "SELECT * FROM " . $... . " WHERE level_m = $.... $sql2 = mysql_query($sql1); while ( $... = MySQL_Fetch_Array( $... ) ) { .... ..... echo a($sql['menu_id'], $sql3['menu_level'],...); // tady použiju tu moji předdefinovanou funkci a() kde mam nastavený pravidlo jak by se mi mělo zobrazit menu.. vše funguje jen bych se potřeboval zbavit v téhle funkci kde ji vypisuju echo a($sql['menu_id'], $sql3['menu_level'], $_REQUEST[..., ...,...) tech proměnných a mohl napsat jen a(). U tohoto problému jse se zasekl a neznám zpusob jak to nejak obejit. Duvod proč se o to snažím? Chtěl bych psat funkce ktery jsou jednoduše modifikovatelný a mohl bych je jednoduše měnit jak si to předvolím a nemusel je pořád kopírovat přepisovat a studovat. } } |
||
tiso Profil |
#8 · Zasláno: 17. 11. 2008, 23:17:36
1ight - nechápem na čo môže byť toto dobré... Vysvetlíš?
|
||
1ight Profil |
#9 · Zasláno: 17. 11. 2008, 23:59:06
tiso děkuju moc za příspěvek kouknete na ten muj poslední příspěvek s kodem trošku jsem to přeupravil víc do detailu jaký mám umysl
|
||
Sicario Profil * |
#10 · Zasláno: 18. 11. 2008, 00:41:24
1ight
Co takhle se poohlednout po nejakem sablonovacim systemu? |
||
joe Profil |
#11 · Zasláno: 18. 11. 2008, 00:44:49
1ight
1. Tvůj způsob myšlení na vytvoření tak jednoduché věci poněkud nechápu. Jdeš na to špatně, pokud jsem tedy pochopil tvůj problém a jakým šíleným způsobem ho chceš řešit. 2. Programoval jsi v PHP něco většího? Očividně ne. 3. Nevím co si představuješ pod různým vypsáním menu. Jak to tedy udělat lépe. Nemusíš vytvářet žádnou funkci a(args[]) Stačí poupravit ten kód tak, abys do nějakého pole vypsal data pro menu a zároveň nějaký pomocný index, čím rozlišíš jakým způsobem budeš chtít menu později vypsat. Menu vypíšeš až na místě HTML - není dobré plácat dohromady PHP s HTML. 4. Pokud máš takhle podobně řešenou každou funkci, zbytečně se připojuješ po každém volání takové funkce k databázi. Najdi si něco o "singleton". 5. mysql_fetch_array() nahraď mysql_fetch_assoc(). První vrací asociované pole včetně pole s indexy, které určitě nevyužiješ - alespoň v tomto případě. |
||
BetaCam Profil |
#12 · Zasláno: 18. 11. 2008, 02:15:58
joe
„Pokud máš takhle podobně řešenou každou funkci, zbytečně se připojuješ po každém volání takové funkce k databázi. Najdi si něco o "singleton".“ To, že by měl mysql_connect vyseparovat mimo definici funkce je logické, ale proč by se měl proboha hledat něco o singletonu?? Spojitost mezi těmito problémy mi nějak uniká. |
||
1ight Profil |
#13 · Zasláno: 18. 11. 2008, 02:17:21 · Upravil/a: 1ight
Sicario sablonovaci system - je pravda, je to dobrá alternativa jak delat rychle projekt ale ja mam vlastní platformu a nechci se toho vzád jen bych potřeboval poradit s tímhle mojim problemem.
joe - "Tvůj způsob myšlení na vytvoření tak jednoduché věci poněkud nechápu" pravě sem se chtěl zeptat jak by to šlo řešit . Věřím tomu, že jsou lidi kteří ví jak na to, nebo jak to řešit. Já osobně nemám tak velké zkušenosti jako někteří jiní tady. Když by někdo věděl jak by se to dalo jednoduše řešit kdybych chtěl viz např si předefinovat $a = $b . $c; a až potom nadefinovat $a = 1; $b = 2; a ted udelat echo $a; myslím si že to možná určitě nějak řešit pujde jen já nevím jak na to. - "Programoval jsi v PHP něco většího? Očividně ne." ... - "Nevím co si představuješ pod různým vypsáním menu. - chci si v budoucnu ulehčit práci proto to dělám touhle logikou... Píšete "do nějakého pole vypsal data" o to jsem se pokoušel a nešlo mi to viz příklad nahoře s array - "singleton" koukal jsem na class někde asi na interalu ale bylo to na mě dost těžký pochopit co to dela pokusím se to nejak vyrešit tím Vaším tipem. Pokusím se o tom víc přečíst o jakou ideu jde. - mysql_fetch_array() nahraď mysql_fetch_assoc() děkuji |
||
joe Profil |
#14 · Zasláno: 18. 11. 2008, 03:47:16
BetaCam
Myslel jsem to tak, že databáze je oddělená - uchovává se spojení na databázi - proto je vhodné a logické použít singleton, který uchovává jen jedno spojení - očekávám, že v tomhle případě nebude třeba připojení se na několik různých databází. 1ight Tykat, ještě studuju, ale kdoví jak krátce ještě budu .-) „Já osobně nemám tak velké zkušenosti jako někteří jiní tady.“ Já taky zrovna moc ne, ale něco už umím. Tvůj kód // pravidlo co chci zobrazit $var = $var1 . $var2 Z jakýho důvodu chceš předem definovat to zvýrazněné pravidlo? Podle mě to není potřeba. Pořád mi není moc jasný, k čemu přesně to potřebuješ. //poté nastavit proměnný $var1 = 'Ahoj'; $var2 = 'Jak se máš'; Hodnoty můžeš uložit do pole. $array[] = 'ahoj'; $array[] = 'jak se mas'; A pak vypsat až na místě, kde to chceš zobrazit, tedy mezi html budeš mít jen cyklus foreach, žádný šablonovací systém není potřeba, je celkem zbytečný... |
||
1ight Profil |
#15 · Zasláno: 18. 11. 2008, 05:25:00 · Upravil/a: 1ight
joe mě osobně jde jen o to abych si přednastavil to co mi bude echovat po vyvolání funkce například hlavní_menu() který se pak zobrazí po levý straně. Tím $a = $b. $c . '<a href="? ....id=$sql[id]&kategorie=$sql[kat].... ">' . $sql[kat] . '</a>';
'; si nadefinuju výsledek/pravidlo co mi pak vyechuje ta funkce až ji vyvolám a nechám ji načíst. tiso mi před chvilkou poradil at zkusím function link($sql3) { return '<a href="'.sql3['href'].'">'.sql3['text'].'</a>'; } a ono to funguje ( generuje mi to tam aspon ty sql dotazy $sql3 který si předurčím do toho $var ) moc mu děkuju... Funkční alternativa: function links($sql3) { $var = '<a href="www.neco.cz/index.php?id=' . $sql3['id'] . '&druh=' . $sql3['level'] . '&filter=' . $_REQUEST['filter'] . '">' . $sql3['name_m'] . '</a>'; return $var; } //function menu() { // sql connect // sql dotaz //while ( $sql3 = mysql_fetch_assoc( $sql2 ) ) { echo links($sql3); //} //} apson že to takhle nějak tak funguje ten zbytek už se taky nějak spracuje. |
||
BetaCam Profil |
#16 · Zasláno: 18. 11. 2008, 14:21:47
joe
„Myslel jsem to tak, že databáze je oddělená - uchovává se spojení na databázi - proto je vhodné a logické použít singleton, který uchovává jen jedno spojení“ Promiň, ale to je kardinální blbost. Není to ani vhodné ani logické. Proti vhodnosti je: Nikdy nevíš kdy budeš potřebovat navázat více spojení. Proti logice je : Spojení s databází není jedinečné. Můžu se přeci připojovat k různým DB či na úplně jiné DB servery v rámci jednoho scriptu. Je tedy nelogické užívat singleton. :) |
||
joe Profil |
#17 · Zasláno: 18. 11. 2008, 17:20:05
BetaCam
... a to za pomlčkou jsi nečetl, že jsi to vynechal v citaci? ;-) Samozřejmě, že pokud je se používá připojování k různým databázím, tak singleton asi moc dobře použít nepůjde... |
||
joe Profil |
#18 · Zasláno: 18. 11. 2008, 17:22:23
1ight
To samé přece můžeš udělat víc způsoby, třeba tím polem, jau už tu někdo skoro na začátku zmiňoval. Navíc tam máš neošetřené vypisování dat, tak aspoň to si oprav ;) |
||
BetaCam Profil |
#19 · Zasláno: 18. 11. 2008, 18:31:59
joe
„... a to za pomlčkou jsi nečetl, že jsi to vynechal v citaci?“ Četl, ale odporuje to mému přesvědčení o tom, že pokud se dělá nějaká knihovna měla by být schopna se přispůsobyt potřebě aplikace bez nutnosti zásahu do implementace. Proč to dělat jako singleton když třeba za měsíc se může stát, že bude potřebovat 2 spojení na DB a bude to muset přepsat. Pokud to udělá rovnou nemusí se už o nic starat. |
||
Časová prodleva: 3 dny
|
|||
1ight Profil |
#20 · Zasláno: 21. 11. 2008, 21:54:56
joe
děkuju moc za tip psal jsem navrhy jednoduše aby se to rychle pochopilo. |
||
joe Profil |
#21 · Zasláno: 21. 11. 2008, 22:05:42
BetaCam
„Proč to dělat jako singleton když třeba za měsíc se může stát“ Nemusí... A jak teda píšeš třídu k databázi? Pro každý dotaz na db vytváříš novou instanci? 1ight Nemáš za co :) |
||
Časová prodleva: 1 měsíc
|
|||
1ight Profil |
#22 · Zasláno: 24. 12. 2008, 09:26:12
final funkcni verze děkuji všem třeba to nekdo taky využije 1) $return_sql = je array pro sql dotaz který se mění a 2) $return_var = je pro var hodnoty který si natvrdo nastavíte.
$return_var[0] = $loading_var; $return_var[1] = $loading_prefiles; function _return( $return_sql, $return_var ) { $return_var = $return_var[0] . $return_var[1] . $return_sql['category'] . $return_sql['id_m'] . $return_sql['id_00']; return $return_var; } hezky vanoce |
||
Mastodont Profil |
#23 · Zasláno: 24. 12. 2008, 10:22:00 · Upravil/a: Mastodont
joe
U singletonu se vytváří instance objektu, můžeš ale klidně vracet jen statickou vlastnost bez instance: class DB { private static $instance; private function __construct() {} public static function Connect() { if (!isset(self::$instance) || !is_resource(self::$instance)) self::$instance = @mysqli_connect( .... ); if (!self::$instance) throw new Exception('Připojení k databázi MySQL se nezdařilo.'); if (!mysqli_set_charset(self::$instance, 'utf8')) throw new Exception('Nepodařilo se přepnout na znakovou sadu utf8.'); } return self::$instance; } Tam pak můžeš mít připojení kolik chceš. |
||
joe Profil |
#24 · Zasláno: 24. 12. 2008, 13:32:41
Mastodont
Můžu. Možná říkám Singleton tomu, co skutečně singleton není :) Každopádně takhle nějak jsem to myslel. Navíc teď, když jsem se podíval jak vypadá skutečný singleton, nevidím problém v tom, rozšířit ho, aby fungoval nad více databázema... |
||
Časová prodleva: 16 let
|
0