Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Dwie możliwości - którą używać?
Forum PHP.pl > Forum > Przedszkole
michaloo
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
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
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
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
tak smile.gif 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
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
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
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
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
tak wlasnie o to chodzilo. Mozna wywnioskowac ze lepiej zawsze uzywac isset() i ze if($a) nie jest do konca poprawny (i skuteczny)....
matys
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
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
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
[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
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.
Invision Power Board © 2001-2025 Invision Power Services, Inc.