Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem z stałymi podczas sprawdzania czy posiada wartość...
Forum PHP.pl > Forum > PHP
ksenonlogin
Witam

Mam nietypowy problem podczas sprawdzania wartości stałej (skrypt niżej) wyświetla błąd serwera. Pytanie, jak mam umieścić stałą by serwer nie wywalał mi błędów.
Dodatkowo chciałem wspomnieć iż w edytorze Aptana wskazuje mi błąd składni (czyli że jest zła składnia zapytania), dla zmiennej jest wszystko ok, ale zależy mi na zastosowaniu stałych.


  1. if(empty(DB_HOST)){
  2. echo '';
  3. }
nospor
defined....

http://id2.php.net/manual/pl/function.defined.php
toffiak
Jaki błędy są wyświetlane, jeśli jest to błąd że stała nie jest zdefiniowana to jest poprawny błąd.
adbacz
A możesz jeszcze raz zadać pytanie, bo tak je napisałeś, że nic kompletnie z niego nie rozumiem ;/
ksenonlogin
Cytat(adbacz @ 6.08.2012, 10:13:25 ) *
A możesz jeszcze raz zadać pytanie, bo tak je napisałeś, że nic kompletnie z niego nie rozumiem ;/


Już poprawiłem zapytanie...

A dodatkowo stała jest zdefiniowana prawidłowo, ponieważ wyświetla zawartość przy drukowaniu.
adbacz
Jeśli stała nie jest zdefiniowana i będziesz próbował jej użyć to dostaniesz error, że nie ma takiej stałej i pokazana zostanie jej nazwa w błędzie. Tak na marginesie, jak sprawdzasz czy jest zdefiniowana?

  1. if(define('DB_HOST'))
  2. {
  3. echo 'Stała istnieje';
  4. }
ksenonlogin
Nie chodzi o to czy jest zdefiniowana, bo wszystko działa (wszędzie używam stałej bez problemu), tylko nie mogę użyć stałej z empty() - tak jakby to było nie dozwolone, łączenie stałych z empty(), w dreamwer i aptana pokazuje mi że tak nie powinna wyglądać składnia, więc jak powinna, czy muszę ją jakoś umieścić, poprzedzić bym mógł sprawdzać czy stała ma jakąś wartość czy nie?
nospor
Przecież ci napisałem..... DEFINED
Podałem ci nawet linka do manuala. Tylko ta funkcja sprawdza, czy stała jest zdefiniowana czy nie...
irmidjusz
Jemu nie chodzi o to, czy stała jest zdefiniowana czy nie jest, bo zawsze jest. On chce sprawdzić, czy wartość stałej jest empty tak, jak to sprawdza empty() na zmiennych.

empty() na stałych nie można użyć, ale możesz rzutować wartość stałej na boolean.

  1. if((bool) STALA){
  2. //nie jest empty
  3. }
nospor
acha, sorki, nie doczytałem smile.gif
ksenonlogin
Zmienna ma wartość, a dlaczego nie istnieje?? mi nie chodzi o to czy została zdefiniowana tylko czy ma wartość czy nie?, a defined mówi że nie jest, ale przecież ma wartość

  1. DEFINE(A, BBB);
  2. echo A ;
  3.  
  4. if(define('A'))
  5. {
  6. echo 'Stała istnieje';
  7. }else{
  8. echo 'Stała nie istnieje';
  9. }
nospor
nie define.... a defined...... Dostałeś linka.

Poza tym
nie: DEFINE(A, BBB);
a:DEFINE('A', 'BBB');
redeemer
DB_HOST jest stringiem. To nie da się bez rzutowania
  1. if (DB_HOST == '') { ... }
?
ksenonlogin
Cytat(nospor @ 6.08.2012, 12:30:07 ) *
nie define.... a defined...... Dostałeś linka.

Poza tym
nie: DEFINE(A, BBB);
a:DEFINE('A', 'BBB');



  1.  
  2. DEFINE('A', '');
  3. echo A ;
  4.  
  5. if(defined('A'))
  6. {
  7. echo 'Stała istnieje';
  8. }else{
  9. echo 'Stała nie istnieje';
  10. }
  11.  


Tak ale to i tak nic mi nie pomaga, bo teraz jest zdefiniowana, ale nie ma wartości - MI CHODZI O SPRAWDZENIE CZY JEST WARTOŚĆ CZY NIE.

Widzę że jedynie @redeemer mnie rozumie i jest to dobry pomysł który chciałem zastosować na początku, jednak jestem ciekawy dlaczego nie mogę tego sprawdzić przez empty()?
nospor
Cytat
- MI CHODZI O SPRAWDZENIE CZY JEST WARTOŚĆ CZY NIE.
Przecież dwa posty temu już przeprosiłem i napisałem, że nie doczytałem. A ty pomimo tego walnąłeś posta z DEFINE (złego posta) więc ci go poprawiłem.... Nie tylko jak tu nie potrafię doczytać tego i owego wink.gif

Cytat
, jednak jestem ciekawy dlaczego nie mogę tego sprawdzić przez empty()
Bo składnia dla empty wymaga podania zmiennych. Tyle w temacie smile.gif
ksenonlogin
I dokładnie o taką odpowiedź mi chodziło - po prostu nie wiedziałem że empty() wymaga tylko zmiennych, brak informacji w internecie...
nospor
Cytat
po prostu nie wiedziałem że empty() wymaga tylko zmiennych, brak informacji w internecie...
A do manuala zaglądałeśquestionmark.gif

http://fr.php.net/manual/pl/function.empty.php
Zaraz na początku:
Cytat
empty — Determine whether a variable is empty


I dalej w komentarzach
Cytat
By definition empty( mixed* $var ) cannot accept all types. For example, define constants will cause error if you try to test them.
irmidjusz
ksenologin, przecież ja też Cię zrozumiałem smile.gif no wiesz co, czuję się dotknięty... wink.gif
tak samo sprawdzisz, czy stała zawiera coś, czy pusty link, rzutując ją na typ bool, dlatego Ci to napisałem.
  1. if((bool) DB_HOST){
  2. //tutaj DB_HOST ma wartość różną od ''
  3. } else {
  4. //a tutaj DB_HOST zawiera ''
  5. }
redeemer
@irmidjusz: Nie do końca. Jeżeli stała będzie zawierała "0" to rzutowanie zwróci false, a przecież pusta nie jest smile.gif
nospor
No redeemer jak już tak się czepiasz to i twój kod
DB_HOST == ''
dla 0 da złą odpowiedź smile.gif
redeemer
Dla 0 tak, dla "0" już nie (w przypadku rzutowania wyniki dla "0" i 0 będą takie same) wink.gif
nospor
W sumie tak smile.gif
ALe raczej nikt do DB_HOST nie wkłada 0 czy "0" wink.gif
irmidjusz
Cytat(redeemer @ 6.08.2012, 16:22:24 ) *
@irmidjusz: Nie do końca. Jeżeli stała będzie zawierała "0" to rzutowanie zwróci false, a przecież pusta nie jest smile.gif


Ależ właśnie o to chodzi! To prawidłowy wynik. Przecież ksenonlogin pytał na początku, jak użyć empty na stałej, więc podałem mu rozwiązanie, które jest tego odpowiednikiem, tzn. działa tak, jak wywołanie empty() na zmiennej. A w tym znaczeniu, stała zawierająca '0' jest "empty", bo empty() na zmiennej zawierającej '0' jest true.

  1. $variable = '0';
  2. if(empty($variable))
  3. echo 'empty';
  4. else
  5. echo 'not empty';

i analogicznie:
  1. define('STALA', '0');
  2. if((bool) STALA)
  3. echo 'not empty';
  4. else
  5. echo 'empty';

oczywiście trzeba zanegować albo zamienić treść bloków if/else, ale znaczeniowo działa tak samo.
I o to mi chodziło smile.gif
redeemer
Przyznam szczerze, że się trochę zdziwiłem zachowaniem funkcji empty. Za manualem: The following things are considered to be empty: ... "0" (0 as a string) .... No cóż, nazwa funkcji trochę niefortunna, ale tak już bywa w PHP. Zwracam honor smile.gif
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.