Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php] Ciekawy problem z typami zmiennych ;)
leClerCk
post
Post #1





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 27.11.2006

Ostrzeżenie: (0%)
-----


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

Ten post edytował leClerCk 28.11.2006, 08:17:05
Go to the top of the page
+Quote Post
Ziels
post
Post #2





Grupa: Zarejestrowani
Postów: 235
Pomógł: 2
Dołączył: 30.06.2006

Ostrzeżenie: (0%)
-----


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

Do liczby


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

Tylko nie wiem czy to zadziała (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)

Ten post edytował Ziels 27.11.2006, 17:29:29
Go to the top of the page
+Quote Post
nospor
post
Post #3





Grupa: Moderatorzy
Postów: 36 558
Pomógł: 6315
Dołączył: 27.12.2004




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
Go to the top of the page
+Quote Post
leClerCk
post
Post #4





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 27.11.2006

Ostrzeżenie: (0%)
-----


Ziels mówisz o rzutowaniu typów, a to troche inaczej działa (testowałem (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif) )

Nospor dzięki za eval, to było to czego mi było trzeba (IMG:http://forum.php.pl/style_emoticons/default/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
Go to the top of the page
+Quote Post
nospor
post
Post #5





Grupa: Moderatorzy
Postów: 36 558
Pomógł: 6315
Dołączył: 27.12.2004




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
Go to the top of the page
+Quote Post
leClerCk
post
Post #6





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 27.11.2006

Ostrzeżenie: (0%)
-----


dzięki, jesteś mocarz (IMG:http://forum.php.pl/style_emoticons/default/guitar.gif)
Go to the top of the page
+Quote Post
JaRoPHP
post
Post #7





Grupa: Zarejestrowani
Postów: 675
Pomógł: 15
Dołączył: 7.11.2004
Skąd: Katowice

Ostrzeżenie: (0%)
-----


@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ć.
Go to the top of the page
+Quote Post
leClerCk
post
Post #8





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 27.11.2006

Ostrzeżenie: (0%)
-----


okej, program gra i śpiewa, gitarka (IMG:http://forum.php.pl/style_emoticons/default/guitar.gif)

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

pozdrawiam
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 21.09.2025 - 21:18