Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Symulowanie klasy
Forum PHP.pl > Forum > PHP
Tomplus
Witam,

Gdy klasa nie istnieje mamy komunikat FATAL ERROR, a jak zrobić aby symulować istnienie klasy która nie istnieje?

Mam taką metodę, ale po wielu dziwnych próbach nic nie udało mi się wskórać. A błąd nadal jest. Wg przykładu poniżej Mam komunikat z wyjątku + Fatal Error parsera.
  1. public function loadClass($class) {
  2. try {
  3. $class = $this->explodeClass($class);
  4. $file = $this->fileExists($this->rootdir.'/'.$class -> src, $class -> name);
  5. if($file) {
  6. $this->requireFile($file);
  7. $this->loaded_classes[$class -> name] = $file;
  8. } else {
  9. throw new \Exception("Klasa nie istnieje: ". $class -> name);
  10. }
  11. } catch (\Exception $exception) {
  12. echo $exception->getMessage();
  13. }
  14. }
SmokAnalog
Nie rozumiem. Dlaczego i w jaki sposób chciałbyś "symulować, że klasa istnieje"? W jaki sposób obsłużysz obiekty tej nieistniejącej klasy?
Tomplus
Brak obiektów to inny problem, ale do rozwiązania. Ale istnieją jeszcze magiczne metody, i dzięki nim własności zwracałyby domyślnie false.
Po co? Właśnie po to aby dać informację parserowi że klasa istnieje, a dalej ma kontynuować stronę.

Spawnm
Może w autoload daj na dziko eval('class '.$x.' extends foo {}');
Ani to ładne, ani bezpieczne, ale co tam ;D

Można taż new stdClass jeśli klasa będzie brana tylko z kontenera
SmokAnalog
Albo zamiast tego paskudnego (w tym przypadku) eval jest jeszcze class_alias. Ale mam niemal 100% pewności, że coś tam rozrabiasz haha.gif

  1. class FakeClass {}
  2.  
  3. function __autoload($className) {
  4. class_alias('FakeClass', $className);
  5. }
  6.  
  7. $dog = new Animal;
  8. print_r($dog);
  9.  
  10. // Output: FakeClass Object ( )
Pyton_000
Pokaz output błędu
Tomplus
Podziękowanie dla Smoka, najlepsze że byłem wczoraj w manualu, kręciłem się koło class_alias, ale nie wpadłem na to żeby wejść na tą funkcję biggrin.gif

Ogólnie mówiąc efekt jest taki jaki chcę, teraz tylko rozwijać dalej.

Użyłem:
  1. class_alias ( 'FakeClass', $class -> name);


a dalej, stworzyłem plik z ów klasą, dzięki temu odwoływanie do metod i własności nie powodują błędu.

  1. class FakeClass{
  2. public function __get($p) {
  3. return false;
  4. }
  5.  
  6. public function __call($p, $q) {
  7. return false;
  8. }
  9. }

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.