Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] Ciekawy problem z typami zmiennych ;)
Forum PHP.pl > Forum > Przedszkole
leClerCk
Witajcie.
Mam interesujący problem. Stwierdziłem po prostu że sie tego nie da, więc jeśli się komuś uda zxnaleźć rozwiązanie to będę wdzięczny i chylę czoła.
Otóż problem wygląda tak:
Z pliku wczytuje dane do tablicy za pomocą FILE. Tamte dane są to funkcje boolowskie, które wyglądają np. tak: ~a&~b . Przerabiam to później w ereg_replace (gdyż pod różne zmienne podstawiam ciągle różne wartości - 1 lub 0). Noi gdzie jest problem... otóż tu, że to jest traktowany jako string i w żaden sposób nie moge zmusić php do policzenia wartości logicznej funkcji boolowskiej w stringu. Oczywiście jak wpisze z palca do skryptu owe funkcje to działają, ale po przerobieniu ze stringa nie da rady.

Jeżeli ktoś pomoże, będę wdzięczny...
Pozdrawiam
Ziels
  1. <?php
  2. (int) $string
  3. ?>

Do liczby


  1. <?php
  2. boolean ($string)
  3. ?>

Tylko nie wiem czy to zadziała tongue.gif
nospor
Do takich rzeczy uzywa sie:
http://pl.php.net/manual/pl/function.eval.php

proszę poprawić tytuł o znacznik zgodnie z zasadami forum Przedszkole:
Temat: Tematyka i zasady panujace na forum Przedszkole
leClerCk
Ziels mówisz o rzutowaniu typów, a to troche inaczej działa (testowałem biggrin.gif )

Nospor dzięki za eval, to było to czego mi było trzeba guitar.gif

Natomiast pojawił się jeszcze jeden problem, może ktoś mnie oświeci.

Jeśli daję zaprzeczenie binarnie:
~0 to w wyniku otrzymuję "-1",
jeśli ~1 to w wyniku dostaję "-2".

Nie przypomina mi to tych standardowych 0 i 1 które chciałbym otrzymać;)
Czy binarnie robi sie jakieś inne zaprzeczenie czy co ja mam z tym zrobić, żeby po zaprzeczeniu jakiejś tam funkcji otrzymać 0 albo 1, a nie -1 lub -2...?

Thx for help, jeśli ktoś odpowie
pozdrawiam
nospor
do negacji to sie uzywa "!"
  1. <?php
  2. $zm = (int)!1;
  3. echo $zm;
  4. $zm = (int)!0;
  5. echo $zm;
  6. ?>

Te rzutowanie na int to poto bys mial 0 i 1 a nie true lub false
leClerCk
dzięki, jesteś mocarz guitar.gif
JaRoPHP
@nospor rozwiązał Twój problem, ale gwoli wytłumaczenia, dlaczego się działo tak:
Cytat(leClerCk @ 28.11.2006, 10:08:23 ) *
Jeśli daję zaprzeczenie binarnie:
~0 to w wyniku otrzymuję "-1",
jeśli ~1 to w wyniku dostaję "-2".
Operacja logicznego NOT, zapisywana jako $b = ~2, zmienia stan wszystkich bitów, ustawiając te bity w zmiennej $b, których odpowiedniki w wartości 2 są wyzerowane, wszystkie inne bity tej zmiennej są zerowane. Więc:
i
int: 2, binarnie: 0000 0000 0000 0000 0000 0000 0000 0010,
~i:
int: -3, binarnie: 1111 1111 1111 1111 1111 1111 1111 1101.

No i kolejna sprawa, chyba również ciekawa. Za B. Eckelem, Thinking in JAVA:
Cytat
Typ logiczny jest traktowany jako jednobitowy... Można wykonać bitowe AND, OR i XOR, ale nie można wykonać bitowego NOT (przypuszczalnie dlatego, by uniemozliwić pomylenie z logicznym NOT)
- o tym warto pamiętać.
leClerCk
okej, program gra i śpiewa, gitarka guitar.gif

dzięki za pomoc oraz ciekawe wytłumaczenie z Eckela;)

pozdrawiam
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.