michaloo
28.05.2004, 14:51:04
Witam
Ostatnio mając kontakt z zawodowym programistą (sa niezawodowi?) dowiedziałem się wielu ciekawych rzeczy, m. in. ze funkcja mysql_pconnect() zwraca zasób i lepiej pózniej sprawdzac czy polaczenie jest nawiazane funkcja is_resource zamiast if($polaczenie == '1'), mimo iz ten drugi sposob dzialal.
Wiec mam pytanie jak lepiej sprawdzac istnienie zmiennej
if($zmienna) czy if(isset($zmienna)) (z tego co zauwazylem dziala to podobnie).
Z manuala dowiedzialem sie ze funkcja isset do tego wlasnie sluzy (jej uzywanie mam dla mnie sens jako skrocenie kodu typu
[php:1:bef1ddf087]<?php
if($zmienna)
$druga = TRUE;
else
$druga = FALSE;
?>[/php:1:bef1ddf087])
jednak jakie rozwiazanie jest lepsze gdy mamy wykonac jakas operacje zalezna od instnienia badz nie danej zmiennej? Czy lepsze (szybsze i niezawodne) jest if($zmienna) czy if(isset($zmienna)) ?
matys
28.05.2004, 14:53:59
Ja tam zawsze uzywam
[php:1:c69b1fce5f]
if($zmienna)
{
.....................
}
[/php:1:c69b1fce5f]
i własnie to polecam, łatwiejsze działanie, krotszy kod, i o to chodzi;)
michaloo
28.05.2004, 14:56:22
tak, ja dotychczas tez to uzywalem ale biorac pod uwage co powiedzial mi tamten gosc nabralem pewnych watpliwosci czy ten sposob bedzie zawsze dzialal prawidlowo....(tak jak w przypadku przytoczonym przeze mnie w poprzednim poscie)
matys
28.05.2004, 15:05:01
Pewnie ze dziala, masz tu przyladowy skrypt, formularz, jezeli uzytkownik poda a i bedzie ta zmienna istanila zostanie wypisany odpowiedni komunikat, jesli nie zostanie wypisany inny komunikat.
Oto kod
plik php o nazwie zmienna.php:
[php:1:1fc7d74300]
<html
<head>
</head>
<body>
<?php
if($a)
echo"Zmienna Istnieje";
else
echo"Niestety...";
?>
</body>
</html>
[/php:1:1fc7d74300]
plik html o nazwie zmienna.html
[xml:1:1fc7d74300]
<html>
<head>
</head>
<body>
<form method=post action=zmienna.php>
Podaj a
<input type=text>
<br>
<input type=submit>
</form>
</body>
</html>
[/xml:1:1fc7d74300]
michaloo
28.05.2004, 15:20:29
tak

o tym wiem, mialem na mysli skrajne przypadki czy ten sposob ZAWSZE bedzie dzialal prawidlowo, jednak teraz dochodze do wniosku ze moze moje pytanie bylo nietrafne i bez sensu. Wiec jezeli ktos chce mnie takimi przykladami przekonywac to niech sobie lepiej nie traci czasu bo ten system dotychczas stosowalem...
matys
28.05.2004, 15:26:11
Nie bardzo wiem o co ci chodzi??"Skrane przypadki?"-czyli?
Wg. mnie sa dwa przypadki zmienna istnieje, albo nie, a sprawdzanie przez:[php:1:d964b4527d]if($zmienna){kod.......}[/php:1:d964b4527d] zawsze będzie działało prawidłowo;)
kszychu
28.05.2004, 15:28:30
To może ja. Porównaj to:
[php:1:89ca3e12b3]<?php
$zmienna = 0;
if ($zmienna) echo "Nie istnieje";
if (isset($zmienna)) echo "Jak najbardziej istnieje";
?>[/php:1:89ca3e12b3]
matys
28.05.2004, 15:30:24
Tak przykład bardzo dobry, jednak autorowi postu jak sie dowiedziałem chodzi o to czy sprawdzanie poprzez uzycie jedynie if bez isset będzie zawsze poprawne, nawet w "skrajnych przypadkach";)
kszychu
28.05.2004, 15:32:49
Cytat
Tak przykład bardzo dobry, jednak autorowi postu jak sie dowiedziałem chodzi o to czy sprawdzanie poprzez uzycie jedynie if bez isset będzie zawsze poprawne, nawet w "skrajnych przypadkach";)
No to odpowiedź, o ile nie zrozumiałeś, brzmi "nie". Często zmienna może istnieć i być zerowa bądź nie mieć wartości. To jest ten skrajny przypadek.
michaloo
28.05.2004, 15:36:18
tak wlasnie o to chodzilo. Mozna wywnioskowac ze lepiej zawsze uzywac isset() i ze if($a) nie jest do konca poprawny (i skuteczny)....
matys
28.05.2004, 15:41:35
Anu...chyle głowę przed wami, nie wiedziałem o tym, choc jeśli program ma sprawdzać czy jest zmienna to raczej rzadko występuje ona z wartością równą 0, albo jest zmienna z normalna zawartością(mam tu na myśli różną od 0) albo jej niema;)(przynajmniej jest takza zwyczaj)
Dravo
28.05.2004, 16:14:06
Ja dodam tylko o dobrym nawyku obcinania spacji z każdego ciągu funkcją trim(),powód:
[php:1:cdd1bcd442]<?php
$z = ' '; //sama spacja
if(isset($z))
echo 'ustawiona!';
else
echo 'nie istnieje!';
?>[/php:1:cdd1bcd442]
Wynik: ustawiona!
Radze o tym pamiętać (jak o sprawdzaniu wszelkich danych).
phantom
28.05.2004, 16:26:10
Przykład pierwszy:
[php:1:95b795a600]<?php
error_reporting(E_ALL);
if($zmienna) echo('Zmienna jest, a może jej nie ma?');
else echo('Może nie ma');
?>[/php:1:95b795a600]
Cytat
Notice: Undefined variable: zmienna in PHPDocument1 on line 5
Przykład drugi:
[php:1:95b795a600]<?php
error_reporting(E_ALL);
if(isset($zmienna)) echo('Na 100% jest');
else echo('Na 100% nie ma');
?>[/php:1:95b795a600]
Cytat
Na 100% nie ma
Chyba sami widzicie różnicę.
Choć standardowo w konfiguracji php błędy typu Notice nie są wyświetlanie, jednak istnieją.
hwao
28.05.2004, 21:06:56
[manual:b584214aab]isset[/manual:b584214aab] <- sprawdza czy dana zmienna jest zdefiniowana
[manual:b584214aab]empty[/manual:b584214aab] <- sprawdza czy dana funckja ma jakos wartosc ( 0 jest uwazane za jej brak)
Jeżeli chcecie sprawdzac czy jakas zmienna istnieje albo czy ma jakos wartosc najelpiej kozystac z tych 2 funckji ktore sie zajduja powyzej poniewaz one do tego sluza i nie wywalaja bledow
cboot
29.05.2004, 13:47:32
Cytat
Ja dodam tylko o dobrym nawyku obcinania spacji z każdego ciągu funkcją trim(),powód:
[php:1:4ea96e27c0]<?php
$z = ' '; //sama spacja
if(isset($z))
echo 'ustawiona!';
else
echo 'nie istnieje!';
?>[/php:1:4ea96e27c0]
Wynik: ustawiona!
Radze o tym pamiętać (jak o sprawdzaniu wszelkich danych).
Do czego pijesz? Trim nie ma wpływu na wynik funkcji isset. Jeśli zrobisz tak, jak sugerujesz:
[php:1:4ea96e27c0]<?php
$z = ' '; //sama spacja
$z = trim($z);
if(isset($z))
echo 'ustawiona!';
else
echo 'nie istnieje!';
?>[/php:1:4ea96e27c0]
Wynik: ustawiona!
Czyli bez zmian... zapewne skojarzyło Ci się coś z empty, ale my tutaj dyskutujemy o isset :wink:
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę
kliknij tutaj.