Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Klasy, nazwy metod.
Forum PHP.pl > Forum > Przedszkole
Fifi209
Chciałbym wiedzieć czy wykonalne jest np. coś takiego:

Mam klasę

Kod
class test {

public $a;

public function metoda() {
if ($this->a == 1) {
echo 'Metoda testowa';
}else{
/* tutaj chciałbym zapisać błąd, że $this->a != 1, zawsze robiłem to na zassadzie np. error:save('opis bledu'); ale jest to nieporęczne i chciałbym to jakoś zautomatyzować, abym nie musiał sam wpisywać nazwy klasy i metody gdzie wystąpił błąd  /*
}

}


Hmm jest taka możliwość? smile.gif
jareeny
Rzucaj wyjątkami smile.gif

http://pl.php.net/manual/pl/language.exceptions.php

A tutaj przykład wyjęty z tego linku

  1. <?php
  2.  
  3. class MyException extends Exception {
  4.  public function __toString() {
  5.    return "exception '".__CLASS__ ."' with message '".$this->getMessage()."' in ".$this->getFile().":".$this->getLine()."\nStack trace:\n".$this->getTraceAsString();
  6.  }
  7. }
  8.  
  9. ?>
Fifi209
Dzięki za podpowiedź, ale czytając manuala i kilka innych opisów dot. wyjątków dalej nie umiem zrobić chyba banalnej rzeczy.

Mam różne klasy z różnymi metodami, ale w przypadku błędu zapisuje go:
error::save('Tekst błędu');

Teraz, chciałbym aby error::save(); nie tyle zapisywał błąd, co jeszcze nazwę pliku, klasy, i metodę gdzie wystąpił. (taka prywatna konsolka błędów)
jareeny
no to zamiast :

  1. <?php
  2. class Foo {
  3.     function bar() {
  4.        if($this->x) {
  5.           ...
  6.        }
  7.        else {
  8.           error::save()
  9.        }
  10.     }
  11.  }
  12. ?>


dajesz:

  1. <?php
  2. class Foo {
  3.     function bar() {
  4.        if($this->x) {
  5.           ...
  6.        }
  7.        else {
  8.           throw new Exception('Treść błędu');
  9.        }
  10.     }
  11.  }
  12. ?>


i łapiesz wyjątki tam gdzie chcesz:

  1. <?php
  2. try {
  3.  Foo::bar();
  4.  }
  5.  
  6.    catch (Exception $e) {
  7. echo __CLASS__ . '<br>';
  8. echo $e->getMessage() . '<br>';
  9. echo $e->getFile() . '<br>';
  10. echo $e->getLine() . '<br>';
  11. echo $e->getTraceAsString() . '<br>';
  12. }
  13. ?>
Fifi209
Bardzo Ci dziękuję, niestety zdążyłem do tego dość metodą prób i błędów. Ale miło, że pomogłeś i naprowadziłeś na dobrą drogę.

Mam problem z:
Kod
echo __CLASS__ . '<br>';

Nie chce mi wyświetlać nazwy klasy ;/
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.