Autor | Zpráva | ||
---|---|---|---|
nejdesemiprihlasit Profil |
#1 · Zasláno: 18. 11. 2017, 16:03:00
Dobrý den, mám ještě malý problém na stránce mi píše chyba s redeklarací funkce.
Problém je v tom že soubor includuju 2x jednou ve funkci menu() a podruhé v sitebar(). Ovšem v obou funkcích je ona chybová funkce potřebná. někde jsem viděl řešení s if(isset(Contact_Labels)) {, ale to mi spůsobí to že se mi importuje jen do jedné funkce, nebo vůbec. Je možné i jiné řešení tohoto problému ? |
||
Kcko Profil |
#2 · Zasláno: 18. 11. 2017, 16:42:13
a proč to includuješ 2x a ne jednou? Uprav logiku, tohle je totiž špatně.
|
||
nejdesemiprihlasit Profil |
v moment kdy to includnu do jedne funkce neprojevi se to v druhe. Bohužel mě nic jiného nenapadá.
a includovat to jednou a posílat 100 proměnných do druhé funkce je blbost |
||
Keeehi Profil |
nejdesemiprihlasit:
„v moment kdy to includnu do jedne funkce neprojevi se to v druhe.“ Ale projeví. I když voláš include ve funkci, definice funkce není importovaná "jen" do té funkce ale je importovaná globálně. Stačí ji tedy jen jednou includnout a pak už jen používat. Zkus si tento test: //inc.php <?php function foo () { echo "foo<br>\n"; } //test.php <?php function bar() { include "inc.php"; foo(); } function baz() { foo(); } bar(); baz(); A když už jsme u toho, proč to vůbec includuješ ve funkci? Prostě to includni jednou na začátku a máš to. Další možností by bylo použít require_once . No a vůbec nejlepší řešení by bylo použít objekty. Protože v takovém případě můžeš použít autoloading a při použití jakékoli dosud neimportované třídy se zavolá funkce, která ji může importovat. Takže se o includy nemusíš už nikdy starat. Jelikož vytváříš vlastní CMS, tak bych ti doporučil si vzít nějaký PHP framework (je jich spousta) a vytvořit to na něm. Spoustu základních věcí budeš mít už vyřešených a hlavně by tě to mělo vést správným směrem.
|
||
nejdesemiprihlasit Profil |
No s objekty zatím nemám moc zkušenosti a nevím ani moc jak classy fungují.
|
||
nejdesemiprihlasit Profil |
U toho příkladu mi pořád nedává smysl jedna věc:
v moment kdy do funkce foo dám definici a pak v bar a baz ji vyvolám tak se nic nestane. //inc.php <?php function foo () { $addons_Contact_name = "Contact"; } //test.php <?php function bar() { include "inc.php"; foo(); echo $addons_Contact_name; } function baz() { foo(); echo $addons_Contact_name; } echo bar(); echo baz(); |
||
ServIT Profil |
#7 · Zasláno: 18. 11. 2017, 20:19:55
nejdesemiprihlasit:
No, asi takto : Chybná je logika sestavení toho tvého programu .. evidentně to takto fungovat nebude. 1) zduplikuj includovaný soubor a zmeň v jednom název funkce, nebude se to hádat a máš to nejjednodušší pro ten svůj postup. Je to ale fakt "programátorská lamárna". 2) Podumej nad jiným rychlým řešením ... vyhoď funkci z funkce, dej ji "ven" a posílej tam 100 argumentů .. nu což .. 3) použij zapouzdření objektu a dědičnost .. ( stejně k tomu nakonec dojdeš ) Ve svých začátcích jsem prožíval podobné vzpírání se objektům, a zuby-nehty se držel funkcí ... no už to mám naštěstí za sebou :-) A mimochodem ... přehlednosti kódu funkce prospěje, pokud je zcela jasné, jaké parametry ji posíláš, a obcházet to vysávaním dostupných parametrů z nadřízené vrstvy povede jen k hromadění chyb Jen můj názor. Ať se ti daří :-) |
||
Keeehi Profil |
#8 · Zasláno: 18. 11. 2017, 21:08:07
nejdesemiprihlasit:
„v moment kdy do funkce foo dám definici a pak v bar a baz ji vyvolám tak se nic nestane.“ To nebude fungovat ani kdyby se ta funkce neincludovala a dal jsi ji přímo do toho souboru. Proměnné definované uvnitř funkcí nejsou z venku vidět. Stejně jako to je u spousty jiných programovacích jazyků. |
||
nejdesemiprihlasit Profil |
ServIT:
„1)“ Této lámárně jsem se právě chctěl vyhnout. „2)“ Právě je problém v tom že nikdy nevím kolik modifikací na webu budu mít takže nemůžu proměnné předem nadefinovat. „3)“ Opět OOP s čímž zatím neumím ani ň. Nejde o to že bych se jim zuby nehty zvpíral stejně mě to v druháku čeká, ale jen nechci používat něco s čím neumím radši momentálně zůstanu u funkcí a postupne se to ve volném čase naučím, pak to předělám a pohoda. Keeehi: „Proměnné definované uvnitř funkcí nejsou z venku vidět.“ Ano to mi došlo ale v ten moment mě nenapadlo nic jiného než do každé funkce importovat úplně všechny soubory s nastavením co existovaly. nakonec jsem to tedy vyřešil tím že jsem addonové funkce dal do speciálního souboru a icluduju ho jen v sekci administrace kde je využíván, jelikož v sekci Maily nepotřebuju funkce z článků a pod. ale kvůli automatizace menu řeším ještě jeden problém. zjištění jména složky z url |
||
Časová prodleva: 7 let
|
0