Autor Zpráva
Joker
Profil
Autor: Joker
Odkaz na aktuální verzi textu: Základní kurz 14: Rozsah platnosti proměnných
zveřejněno
Odkud se vede diskuse k aktuálnímu stavu textu:
První příspěvek po poslední revizi textu

Sloučil jsem s kapitolou o superglobálních proměnných.
Jan Tvrdík
Profil
Zase jenom stručně:
$_REQUEST obsahuje i cookies
Camo
Profil
Neviem či mi niečo uniklo, ale nevidím tam nijakú zmienku o predávaní premenným do funkcie odkazom. Dokumentácia tento zápis dosť často používa, tak by to asi bolo dobré vysvetliť. A ešte ma napadá jedna vec. Neviem či ide o obor premennej ale príde mi že áno a síce vlastnosť static $x (vo funkciách), ktorá udržiava hodnotu premennej aj po ukončení funkcie. Pri následnom volaní ju človek môže zistiť. Napríklad ako alternatívu k iteráciám(ešte som to nepoužil, tak presne neviem. Objavil som to len nedávno.).
Jan Tvrdík
Profil
Camo:
Dokumentácia tento zápis dosť často používa
Teď mě napadá akorát sort. Neřekl bych, že je to často používaná věc.
Camo
Profil
Práve funkcie pre prácu s poľom sú pekný príklad a je ich tam dosť, nie len sort. Ale napríklad aj taká preg_match a iné, na ktoré každý určite narazí...
Joker
Profil
Camo:
Ohledně předávání odkazem jsem opačného názoru, podle mě to začátečník nepoužije prakticky nikdy (a když ho to naučíme, je dost riziko, že to bude používat špatně, podobně jako globální proměnné).
Navíc reference jsou trochu složitější problematika, tak nevím, jestli se do toho v základním kurzu pouštět.

Statické proměnné mi taky připadají, že do toho vnesou spíš chaos, než aby začátečníkovi byly k něčemu dobré.
Camo
Profil
Joker:
Ide ale aj o to, že na to tak či tak narazia v nejakom kóde. A ide tu snáď o to, aby sa to naučili, nie o to kto má aký názor na ich použitie. Proste sa to používa a každý by to mal chápať. Inak ak to správne chápem, tak aj slovo global vytvára referenciu.

PS: Chaos podľa mňa vyvoláva práve to, že niekto niečo podstatné zatají a chudák začiatočník potom nechápe čo sa to deje(vlastná skúsenosť).
abc
Profil
Joker:
Statické proměnné se podle mě dají krásně použít např. pro názvy dnů v týdnu:
static $denVTydnu = array(
  0 => 'Pondělí',
  1 => 'Úterý',
//atd.
  }
nebo např.
static $dlouhyDenNaKratky = array(
  'po' => 'pondělí',
  'út' => 'úterý',
  //atd.
  }
Joker
Profil
Camo:
Jde o to kdy se to naučí. Reference s rozsahem platnosti proměnných moc nesouvisejí.

abc:
Zrovna tohle by měly být spíš globální proměnné než statické někde uvnitř funkce, navíc jelikož dny v týdnu se za běhu skriptu asi měnit nebudou, měly by to být spíš konstanty.
Camo
Profil
Joker:
"Reference s rozsahem platnosti proměnných moc nesouvisejí."
No ja myslím, že sa mýliš. To že je to riešené cez referencie je len technická záležitosť, ale ide tam práve o to ako rozšíriť platnosť premennej do oboru funkcie. A veď som to už písal, že aj príkaz global vytvára referencie. Ja medzi tými dvoma nevidím žiadny rozdiel. Mne osobne sa viac páči predávanie odkazom.
Jcas
Profil *
Teda, tam je tolikrát slovo kontext, že jsem se v tom zamotal a nakonec jsem se musel podívat, co to "České" slovo znamená.

Přidal bych větičku: Kontext, nebo-li souvislost znamená, s jakou částí scriptu $proměnná souvisí.
Sedím v práci s 20-ti lidmi a všichni jsme u PC. Slovo kontext, jsem snad neslyšel ani jednou za 10 let co tu dělám. Jedna věta obyčejným Českým jazykem by se mi tam opravdu líbila.

ps. Nezlobte se prosím, že jsem Vám řekl svůj názor.

<?php
function mojeFunkce() {
  // zde je kontext funkce mojeFunkce
  $kontext = "Kontext mojeFunkce";   //rozsah platnosti je pouze pro funkci mojeFunkce()
  echo "<p>$kontext</p>";
}
function druhaFunkce() {
  // zde je kontext funkce druhaFunkce
  $kontext = "Kontext druhaFunkce";   //rozsah platnosti je pouze pro funkci druhaFunkce()
  echo "<p>$kontext</p>";
  mojeFunkce(); // přechod do jiného kontextu
  echo "<p>$kontext</p>"; // opět v kontextu druhaFunkce
}
// hlavní skript
$kontext = "Kontext skriptu";   //rozsah platnosti je pouze pro hlavní script. Funkce tuto proměnou nevidí.
echo "<p>$kontext</p>";
druhaFunkce(); // přechod do jiného kontextu
echo "<p>$kontext</p>"; // opět v kontextu hlavního skriptu
?>

<?php
function mojeFunkce() {
  global $kontext; // nastavíme $kontext jako globální proměnnou
  $kontext = "Kontext mojeFunkce";   //rozsah platnosti je pro celý script
  echo "<p>$kontext</p>";
}
function druhaFunkce() {
  global $kontext; // nastavíme $kontext jako globální proměnnou
  $kontext = "Kontext druhaFunkce";   //rozsah platnosti je pro celý script
  echo "<p>$kontext</p>";
  mojeFunkce(); // přechod do jiného kontextu
  echo "<p>$kontext</p>"; // opět v kontextu druhaFunkce
}
// hlavní skript
$kontext = "Kontext skriptu";
echo "<p>$kontext</p>";
druhaFunkce(); // přechod do jiného kontextu
echo "<p>$kontext</p>"; // opět v kontextu hlavního skriptu
?>
Joker
Profil
Jcas:
Zajímavé, mně slovo „kontext“ nijak divné nepřipadá a to bývám na newspeak citlivý.Třeba „vytržené z kontextu“, „zasazené do kontextu“, „v kontextu (něčeho)“ se používá úplně běžně.

Ale díky za podnět, zamyslím se nad lepším vysvětlením toho termínu.

Kontext, nebo-li souvislost znamená, s jakou částí scriptu $proměnná souvisí.
„Souvislost“ není to správné slovo, z téhle věty bych asi nepochopil, o co jde.
Jan Tvrdík
Profil
Wiki slovník definuje kontext jako
1) text, v němž se vyskytuje určité slovo a který určuje význam tohoto slova nebo umožňuje upřesnit jeho význam
2) okolnosti, které určují, upřesňují či objasňují význam události

Nesouhlasím s tím, že je slovo kontext použito v tom článku jako ekvivalent anglického scope. Podle mě scope jde přeložit akorát opisem jako „rozsah platnosti proměnných“.

Kontext má obecnější vyznám, volně bych ho přeložil jako „prostředí, ve kterém se určitá věc nachází“. Z toho taky plyne, že proměnná nemá jeden jasně daný kontext. Kontextem jedné proměnné může být zároveň funkce, soubor i projekt. To, že se proměnná nachází v nějaké funkci přece neznamená, že se nenachází zároveň i v nějakém souboru.

Pak se taky kontext používá i konkrétněji, viz citace z wikipedie:
When discussing scope, there are three basic concepts: scope, extent, and context. "Scope" and "context" in particular are frequently confused: scope is a property of an identifier, and is fixed, while context is a property of a program, which varies by position. More precisely, context is a property of a position in the program, either a position in the source code (lexical context) or a point during run time (execution context, runtime context, or calling context). Execution context consists of lexical context (at the current execution point) plus additional runtime state such as the call stack.[e] Thus, when the execution point of a program is in a variable name's scope, the "variable (name) is in context" (meaning "in the context at this point"), and when the execution point "exits a variable (name)'s scope", such as by returning from a function, "the variable (name) goes out of context".[f] Narrowly speaking, during execution a program enters and exits various scopes, and at a point in execution identifiers are "in context" or "not in context", hence identifiers "come into context" or "go out of context" as the program enters or exits the scope – however in practice usage is much looser.
Joker
Profil
Jan Tvrdík:
Nesouhlasím s tím, že je slovo kontext použito v tom článku jako ekvivalent anglického scope.
Já si ho nevymyslel, používá se i jinde.

Dobře, tak jaký jiný termín by se měl použít?
Podle mě scope jde přeložit akorát opisem jako ‚rozsah platnosti proměnných‘.
No právě.
Jan Tvrdík
Profil
Joker:
Já si ho nevymyslel, používá se i jinde.
Kde jinde? Nevidím problém všude používat opis „rozsah platnosti proměnných“ případně „oblast platnosti proměnných“, je to pro českého čtenáře mnohem výstižnější a jasnější než anglické scope i kontext, které má jiný význam.

Vaše odpověď

Mohlo by se hodit

Ostrá verze učebnice běží na www.pehapko.cz.

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

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

0