Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Klasy - problem początkującego.
Forum PHP.pl > Forum > Przedszkole
Rysh
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.
marcio
@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.  
MateuszS
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ą.
Pilsener
  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
Quantum
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.  
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.