Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Klasy - problem początkującego.
Rysh
post
Post #1





Grupa: Zarejestrowani
Postów: 821
Pomógł: 111
Dołączył: 11.09.2006
Skąd: Biała Podlaska

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


Sytuacja wygląda następująco, napisałem wcześniej niedużą stronę żeby podszkolić się w PHP, niestety pisałem wszystko na funkcjach. Po moim ostatnim temacie postanowiłem napisać wszystko od początku, już na obiektach. Jakoś nie mogę się do tego przyłożyć i zrozumieć. Czego nie napiszę wyskakuję błąd:
  1. <?php
  2. class user {
  3. private static $settings = array(
  4. 'login_min' => 3,
  5. 'login_max' => 16,
  6. );
  7. public static function zarejestruj ($login, $haslo, $rehaslo) {
  8. try {
  9. if ($haslo != $rehaslo) {
  10. throw new Exception("Podane hasła muszą być takie same.");
  11. }
  12. if (strlen($login) >= self::$setting['login_min'] && strlen($login <= self::$setting['login_max'])) {
  13. throw new Exception("Login musi mieć od ". self::$setting['login_min'] ." do ". self::$setting['login_max'] ." znaków.");
  14. }
  15. }
  16. catch(Exception $wyjatek) {
  17. echo $wyjatek -> getMessage();
  18. }
  19. }
  20. }
  21. ?>

Cytat
Fatal error: Access to undeclared static property: user::$setting in /home/rysh/public_html/class/user.class.php on line 13


Chciałbym zacząć od rejestracji, jeśli miałbym przykład dobrze wykonanej działającej funkcji później bym miał z górki, ponieważ mógłbym się wzorować na niej. Niestety już ta pierwsza sprawia mi problemu.

Posiadam również książkę "PHP5, radocha z programowania" z Helionu Steven'a Holzner'a - jednak tam jest opisane jak utworzyć Lwa oraz go wyświetlić. W rejestracji potrzebuje również sprawdzić przecież czy $login oraz reszta spełnia wszystkie wymagania, a tego już tam nie ma. Prawdopodobnie już teraz mam jakieś rażące błędy, proszę o jakieś nakierowanie mnie, abym w końcu mógł zacząć czerpać radość z programowania obiektowego smile.gif

Rysh.


--------------------
Go to the top of the page
+Quote Post
marcio
post
Post #2





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

Ostrzeżenie: (10%)
X----


@up herezje mowisz przy static ma dac $this -> idz poczytaj najpierw manual.

W klasie masz pole statyczne $settings a odwolujesz sie do $setting i tam masz blad.
  1. if (strlen($login) >= self::$setting['login_min'] && strlen($login <= self::$setting['login_max'])) {
  2. //
  3.  


Ten post edytował marcio 6.03.2010, 13:22:20


--------------------
Zainteresowania: XML | PHP | MY(SQL)| C# for .NET | PYTHON
http://code.google.com/p/form-builider/
Moj blog
Go to the top of the page
+Quote Post
MateuszS
post
Post #3





Grupa: Zarejestrowani
Postów: 1 429
Pomógł: 195
Dołączył: 6.10.2008
Skąd: Kraków/Tomaszów Lubelski

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


Rysh, napisz sobie też prostą klasę do wypluwania komunikatów (taki mini widok), bo wyjątków do wszystkich komunikatów się nie stosuje raczej, jak sama nazwa wskazuje, jest to wyjątek.

A co do mniejszych rzeczy, to może wczytaj np. w konstruktorze ustawienia, które miałbyś w osobnym pliku np. config.php, zamiast tworzyć tablicę statyczną.

Ten post edytował MateuszScirka 6.03.2010, 13:27:25


--------------------
O! Zimniok :P
Go to the top of the page
+Quote Post
Pilsener
post
Post #4





Grupa: Zarejestrowani
Postów: 1 590
Pomógł: 185
Dołączył: 19.04.2006
Skąd: Gdańsk

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


  1. throw new Exception("Podane hasła muszą być takie same.");
- nie lepiej zwracać klasę komunikatu oraz jego id? Treść komunikatu to już sprawa bardziej interfejsu, czyli widoku. No i login chyba będzie sprawdzany nie tylko tutaj? Może jakaś klasa do walidacji? Przemyśl to na spokojnie, rozrysuj na papierze, zrób schemat co ma być w czym i co ma robić.

I radość czerpie się z dobrego programowania, każdy kod można spitolić, zamykanie kodu w klasach nie gwarantuje, że ktoś na jego widok nie dostanie palpitacji serca winksmiley.jpg
Go to the top of the page
+Quote Post
Quantum
post
Post #5





Grupa: Zarejestrowani
Postów: 450
Pomógł: 84
Dołączył: 27.11.2008
Skąd: Warszawa

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


Poza tym, powinno się unikać stosowania bloku try-catch wewnątrz klasy, w metodzie rzuć tylko wyjątek, metodę uruchom w sekcji "try", poza klasą. przykład:

  1. class A
  2. {
  3. public function b($x = 0)
  4. {
  5. if($x < 5) throw new Exception('X nie może być mniejsze niż 5');
  6. }
  7. }
  8.  
  9. $a = new A;
  10.  
  11. try {
  12.  
  13. $a->b(1);
  14.  
  15. } catch (Exception $e) {
  16.  
  17. echo $e->getMessage();
  18.  
  19. }
  20.  
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 Aktualny czas: 22.08.2025 - 04:32