Zadejte hledaný výraz...

PHP – Definice proměnných

mcever4
verified
rating uzivatele
20. 11. 2015 18:51:23
Zdravím, převádím starý web na PHP 5.6, upravuji kód, aby byl zas na nějaký čas aktuální pro použití na aktuální verzi PHP.
Potřebuji poradit s hláškou
Undefined index
Use of undefined constant
Undefined variable
Jsou to chybové hlášky, které lze vypnout v php.ini, ale spíše mě zajímá jakým způsobem se definují proměnné aby to pak i při PHP 7 nevypisovalo chybové hlášení.
Jde i o globální proměnné, které jen chci testovat zda obsahují hodnotu.
Je tedy nějaký správný způsob jak definovat proměnné?
20. 11. 2015 18:51:23
https://webtrh.cz/diskuse/php-definice-promennych/#reply1154276
Jan Stejskal
verified
rating uzivatele
(7 hodnocení)
20. 11. 2015 18:56:43
1. lekce php, deklarace proměnných. Třeba zde: http://www.tvorba-webu.cz/php/vars.php
20. 11. 2015 18:56:43
https://webtrh.cz/diskuse/php-definice-promennych/#reply1154275
mcever4
verified
rating uzivatele
20. 11. 2015 19:24:31
ano definice proměnné je přiřazením
ale někdy se proměnná naplní pouze za určitých podmínek, například vyplněním formuláře, nebo vypsáním dat z DB, což se předem neví výsledek. Tak přeci nebudu plnit pole například nulou, jen aby bylo pole předem definované.
Nefunguje něco jako
var $a integer;
20. 11. 2015 19:24:31
https://webtrh.cz/diskuse/php-definice-promennych/#reply1154274
Jan Matoušek
verified
rating uzivatele
20. 11. 2015 19:52:54
PHP není striktně typovaný jazyk, proto se při založení proměnné nedefinuje datový typ.
Co se těch chyb týče, tak je nutné ověřovat existenci dané proměnné např. přes fci isset().
Každopádně správně napsaný program by měl i při přechodu na PHP7 fungovat bez chyb. Tyhle chyby vznikají jen díky lenosti PHP programátorů, kteří píší kód ,,laxně". Přistupují k indexům, u kterých neví, jestli existují, nebo používají proměnné které si předem nevytvoří. Undefined index (u pole) prostě žádný správně napsaný program vyhodit nemůže (tipicky u cyklů - algoritmus by si měl pamatovat jaká data program dostal a podle nich by s nimi měl nakládat ... ne zkoušet volat index ,,jen tak na slepo" - tohle fungovalo dříve, prasárna ale fungovalo, nyní ne)
Pokud jde o rozsáhlejší program, najmi si nějakého programátora ať projde kódy a opraví to. Pokud to dříve psal nějaký patlal, tak to hodně štěstí.
Ještě bych dodal, že vypnutí chyb není řešení.
20. 11. 2015 19:52:54
https://webtrh.cz/diskuse/php-definice-promennych/#reply1154273
Ty chyby, které uvádíte, nesouvisí s verzí PHP. Hlásila by je kterákoliv verze, jen jste to měl předtím vypnuté.
Řešením je buď použití proměnných obalit pomocí testů isset() a empty() nebo definovat proměnnou jako nulovou předtím, než se začne používat - prázdný řetězec, nula, null...
A nový kód samozřejmě psát jen se zapnutými plnými chybovými hláškami.
21. 11. 2015 00:43:07
https://webtrh.cz/diskuse/php-definice-promennych/#reply1154272
hm
verified
rating uzivatele
(20 hodnocení)
22. 11. 2015 19:13:41
tak tak, spravne je to jak rika Martin, kazdou promennou ktera neni pevne definovana v kodu je potreba overovat pres isset nebo podobne funkce, php, co nema striktne nastavene errory sice nic nenapise a bude brat promennou jako null, ale nejen ze to neni spravne programatorsky (je to berlicka vytvorena v php) ale muze to precijen obcas zpusobit problemy...
22. 11. 2015 19:13:41
https://webtrh.cz/diskuse/php-definice-promennych/#reply1154271
crs
verified
rating uzivatele
(1 hodnocení)
2. 12. 2015 19:38:00
Jsou to chybové hlášky, které lze vypnout v php.ini, ale spíše mě zajímá jakým způsobem se definují proměnné aby to pak i při PHP 7 nevypisovalo chybové hlášení.
* používat isset()
* nedefinovat proměnnou v bloku kódu, který se provede jen někdy
* méně přehledné a doporučitelné je (např. při dotazu na potenciálně nedefinovaný index pole) použít @ pro potlačení chyby
* v PHP < 7 lze použít $promenna = $promenna or "defaultní hodnota";
* v PHP >= 7 přibyl operátor ?? (Null coalesce) viz https://wiki.php.net/rfc/isset_ternary .
Doporučené je nespoléhat se na hodnotu error_reporting v kódu nebo php.ini a vychytávat všechny Notice při error_reporting = E_ALL, resp. zapnout si jej takhle při vývoji a změnit toto nastavení při přechodu na produkci.
Jde i o globální proměnné, které jen chci testovat, zda obsahují hodnotu.
isset($promenna)
vrací true, je-li proměnná definovaná (může být i null, false, 0, "", atp.)
if ($promenna) {
...
}
se vykoná v případě, má-li proměnná nenulovou hodnotu, tedy není-li null, false, 0, "0", "", array().
Nevím, co z toho odpovídá vašemu "obsahují hodnotu".
Je tedy nějaký správný způsob jak definovat proměnné?
Neexistuje "správný" nebo "špatný" způsob, jak je definovat, buďto definované jsou nebo nejsou.
2. 12. 2015 19:38:00
https://webtrh.cz/diskuse/php-definice-promennych/#reply1154270
Pro odpověď se přihlašte.
Přihlásit