Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php] Ciekawy problem z typami zmiennych ;)
leClerCk
post 27.11.2006, 17:26:08
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 27.11.2006, 17:27:14
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 tongue.gif

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





Grupa: Moderatorzy
Postów: 36 557
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


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
leClerCk
post 28.11.2006, 10:08:23
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 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
Go to the top of the page
+Quote Post
nospor
post 28.11.2006, 10:18:38
Post #5





Grupa: Moderatorzy
Postów: 36 557
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


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
leClerCk
post 28.11.2006, 10:21:57
Post #6





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

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


dzięki, jesteś mocarz guitar.gif
Go to the top of the page
+Quote Post
JaRoPHP
post 28.11.2006, 10:50:22
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ć.


--------------------
Kto pyta, nie błądzi...
Kto zbłądził, ten pyta...
Go to the top of the page
+Quote Post
leClerCk
post 28.11.2006, 20:11:34
Post #8





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

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


okej, program gra i śpiewa, gitarka 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
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 07:01