Autor Zpráva
Pavel Dumbrovský
Profil
Zdravím,
prosím Vás, jak je možný, že když naincluduju pár souborů v indexu, tak některý si vezmou proměnný a jiný ne??? Př:
 include 'conf.inc';
include "cfunc.php";
//HEADER FILE
include "template/header.php";
include "modules/index_top_bar.php";

Potřebuji proměnné z conf.inc, třeba header.php mi je vypíše v pohodě, ale cfunc mi to nebere ani prd, víte někdo proč?
Děkuji.
AM_
Profil
předpokládám, že v cfunc jsou funkce; funkce klasicky nevidí proměnné z hlavního těla programu,
což je dobře, protože přístup z funkcí ke globálním proměnným by měl být minimální nebo pokud možno žádný
. Správné řešení je předávat funkci data jako parametr.
$hlaska = 'Ahoj';
function vypisHlaska(){
  echo $hlaska; //nebude fungovat
}
function vypisHlaska(){
  global $hlaska;
  echo $hlaska; //bude fungovat, ale neni to ciste; v jinem programu funkce nebude fungovat, napr. kdyz bude mit promennou $hlaska pouzitou na neco jineho
}
function vypis($co){
  echo $co; //ciste reseni, funkce bude delat to, co ma, vzdy, v jakemkoli kontextu a programu.
}

Pravda, hnidopiši řeknou, že mít echo přímo ve funkci taky není nic pěkného, ale to už je jiná kapitola, tady chci demonstrovat, proč tam nemá být global :)
Pavel Dumbrovský
Profil
Děkuji mnohokrát za vyčerpávajicí odpověď!
CooLa
Profil *
Jak na to koukám tak se proměnné ze souboru conf.inc nedají předávat protože nemáš koncovku .php .Jinak jestly můžeš ukázat část kódu.
AM_
Profil
CooLa:
tento problém je vyřešený, alespoň se to dá předpokládat, tazatel poděkoval a na nic se už neptal.
Nic proti, ale inkludovat můžeš soubor s jakýmkoli názvem a vyhodnotí se jako PHP skript.
Majkl578
Profil
AM:
Osobně by mi to echo zas tak nevadilo, ale to global ano. Přecijen jsme už v dobách OOP programování kde by nemělo být třeba (pokud ano, asi jde o nevhodný návrh). :)
AM_
Profil
Majkl578:
Osobně by mi to echo zas tak nevadilo
já jsem zastánce názoru, že funkce by měla data vracet, nikoli rovnou posílat na výstup (vyjma extrémních případů, kdy posílá gigabytová kvanta dat nebo jiné odůvodněné situace), aby se programátor mohl rozhodnout, zda data takto pošle na výstup, nebo je dále zpracuje. Napsat echo přímo do obecné funkce není zas tak velké zjednodušení, spíš to beru jako lenost. Je to ale samozřejmě otázka vkusu, problémy s fungováním to nevyvolá.

Přecijen jsme už v dobách OOP programování kde by nemělo být třeba
S tím to podle mě ani tak nesouvisí, globální proměnná byla "okrajová možnost", jak například ušetřit paměť, aby si rekurzivní funkce nemusela předávat nějaká data (pravda, to zase lze řešit zanořováním funkcí, pokud to jazyk podporuje). PHP ovšem není čistě objektové, patří mezi hybridní jazyky, ve kterých můžeš použít oba přístupy.

V ryzím OOP pokud vím globální proměnné neexistují ani nemohou, jsou de facto nahrazené statickými proměnnými, které mají ale pevnou příslušnost ke třídě, což nevede k nesprávnému použití jako u globálních proměnných v procedurálním programování.

Vaše odpověď

Mohlo by se hodit

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: