Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [php], function __set() i test sprawdzający przed pozwoleniem na zmiany
dawidg87
post 31.01.2008, 12:53:35
Post #1





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 27.05.2007

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


Dla jednych to się może wyda dziwne i oczywiste ale jednak ja nie widzę w tym kodzie czegoś co by mogło być nie tak:(
  1. <?php
  2.  
  3. class mojaklasa
  4.  {
  5.  var $atrybut = 6;
  6.  
  7. function __get($nazwa)
  8. {
  9. return $this -> nazwa;
  10. }
  11. function __set($nazwa, $wartosc)
  12. {
  13. if ( $nazwa = 'atrybut' && $wartosc >= 0 && $wartosc <= 100)
  14. $this -> atrybut = $wartosc;
  15. }
  16.  
  17.  
  18.  
  19.  }
  20.  
  21. $a = new mojaklasa();
  22.  
  23. echo $a -> atrybut;
  24.  
  25. echo "<br>";
  26.  
  27. $a -> atrybut = 101;
  28.  
  29. echo $a -> atrybut;
  30. ?>


Głównie chodzi mi o _set no bo zamieściłem tam instrukcje, a raczej przepisałem gotowy przykład z podręcznika, i według mnie ma to działać na takiej zasadzie, że gdy chcemy zmienić wartość atrybut z poza klasy to instrukcja sprawdza czy nowa właściwość żeczywiście dotyczy tego atrybutu i czy jest liczbą w przedziale 0..100, no i po za klasą zrobiłem sobie mały test tego. Czyli tworze obiekt, później sprawdzam wartość atrybutu, jest to oczywiście 6 tak jak ustawiłem w klasie, no ale zaraz potem zmieniam wartość atrybutu na 101 i znowu sprawdzam wartość atrybutu, i zamiast pokazać błąd to wyświetla atrybut z nową wartością przekraczającą ustawiony zakres :/ no chyba, że to wszystko źle zrozumiałem i to tak ma właśnie działać :/
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 4)
qrees
post 31.01.2008, 14:28:17
Post #2





Grupa: Zarejestrowani
Postów: 275
Pomógł: 44
Dołączył: 23.11.2007

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


__set i __get są używane dla atrybutów których nie ma w klasie. Jeżeli klasa ma jakiś atrybut, to jest on po prostu używany.

Poza tym, masz jeszcze jeden błąd: zamiast $nazwa = 'atrybut' powinno być $nazwa == 'atrybut'
Go to the top of the page
+Quote Post
nevt
post 31.01.2008, 15:06:19
Post #3





Grupa: Przyjaciele php.pl
Postów: 1 595
Pomógł: 282
Dołączył: 24.09.2007
Skąd: Reda, Pomorskie.

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


  1. <?php
  2. if ( $nazwa = 'atrybut' && $wartosc >= 0 && $wartosc <= 100)
  3. ?>

ten warunek jest zawsze spełniony bo użyłeś operatora przypisania = zamiast operatora porównania ==, popraw:
  1. <?php
  2. if (($nazwa == 'atrybut') && ($wartosc >= 0) && ($wartosc <= 100))
  3. ?>

nawiasy dodałem dla podniesienia czytelności.


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

-
Oh no, my young coder. You will find that it is you who are mistaken, about a great many things... -
Go to the top of the page
+Quote Post
dawidg87
post 31.01.2008, 17:16:07
Post #4





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 27.05.2007

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


dzięki panowie, ale mam jeszcze jedno pytanko, a chyba szkoda zakładać kolejny temat, no więc mam pewien kod, ale umieszczę tylko wycinki:
  1. <!--
  2. body {background-color: white}
  3. h1 {color: white; font-size: 24pt; text-align: center; font-family: arial.sens-serif; front-weight: bold}
  4. .menu {color: white; font-size: 12pt; text-align: center; font-family: arial.sens-serif; front-weight: bold}
  5. rd {background: black}
  6. p {color: black; font-size: 12pt; text-align: justify; font-family: arial.sens-serif)
  7. p.foot {color: white; font-size: 9pt; text-align: center; font-family: arial.sens-serif; font-weight: bold}
  8. a:link.a:visited.a:active {color: white}
  9. -->
  10. </style>


i

  1. <table width="100%" bgcolor="black" cellpading="12" border="0">
  2. <tr>
  3. <td>
  4. <p class="foot">&copy TLA Consulting</p>
  5. <p class="foot">Prosimy odwiedzić <a href="prawne.php">stronę informacji prawnych</a></p>
  6. </td>
  7. </td>
  8. </table>


to jest kod tak samo z podręcznika, mam taki problem, że gdzieś w tym drugim mam błąd bo nie chce mi ustawić tego tak jak mam w <style> opisane, nie wiem już jak to ma być, tak jak wyżej jest w podręczniku i nie jest to dobrze biggrin.gif próbowałem już nawet zmieniać <p class="p.foot"> itp. kombinacje, ale nic to nie daje, nie wiem dlaczego :/ strasznie fajny ten podręcznik, same błędy, te kody co skopiowałem są akurat identyczne jak w podręczniku.... pomocy...
Go to the top of the page
+Quote Post
nevt
post 31.01.2008, 18:45:42
Post #5





Grupa: Przyjaciele php.pl
Postów: 1 595
Pomógł: 282
Dołączył: 24.09.2007
Skąd: Reda, Pomorskie.

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


trochę nieuważnie przepisujesz... tutaj:
Kod
p {color: black; font-size: 12pt; text-align: justify; font-family: arial.sens-serif)

źle zamknąłeś znacznik - ) zmiast } i zamieniłeś spacje na . powinno być:
Kod
p {color: black; font-size: 12pt; text-align: justify; font-family: arial sens-serif}

natomiast tutaj:
Kod
a:link.a:visited.a:active {color: white}

"posklejałeś" kilka znaczników (gdzieś przepadły ci przecinki i odstępy - zamienione na .), powinno być:
Kod
a:link, a:visited, a:active {color: white}

a na koniec zauwazyłem, że wszędzie jest:
Kod
Font-family: arial.sens-serif ZAMIAST font-family: arial sens-serif


więc kolego - albo nie rozróżniasz separatorów przy przepisywaniu, albo ta książka nadaje sie na podstawkę pod kubek z kawą...


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

-
Oh no, my young coder. You will find that it is you who are mistaken, about a great many things... -
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: 19.07.2025 - 17:08