Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem z klasą...
Forum PHP.pl > Forum > PHP
Turgon
Chciałem nieco sobie ułatwić zadanie i to wyszło.
  1. <?php
  2.  
  3. class loadclasses
  4. {
  5. function load($classname,$classpath,$objectname)
  6. {
  7. include ($classpath);
  8. $$objectname = new $classname;
  9. $wynik = ob_get_contents();
  10. return $wynik;
  11. }
  12. }
  13. ?>


I jak sprawdzam na takich plikach :

index.php :
  1. <?
  2. include ('ClassLoad.php');
  3.  
  4. $mod = new loadclasses;
  5. $mod->load('wyswietl','test.php','foo');
  6. $foo->wyswietlaj('lalalala');
  7.  
  8. ?>

i test.php
  1. <?
  2. class wyswietl
  3. {
  4. function wyswietlaj($tekst)
  5. {
  6. echo $tekst;
  7. }
  8. }
  9. ?>

[comment]Klasa głupawa ale do testu się nada.[/comment]

Błąd :
Cytat
Fatal error: Call to a member function wyswietlaj() on a non-object in C:\Documents and Settings\Administrator\Moje dokumenty\Xampp\xampplite\htdocs\testy\index.php on line 6


Dlaczego nie ładuje mi klasy ( to wnioskuje z błędu) ?
dr_bonzo
Dziwny ten kod.

  1. <?php
  2. $mod->load('wyswietl','test.php','foo');
  3. ?>

$foo bedzie dostepne TYLKO wewnatrz metody load(), a ona zwraca, cos tam zwraca (tekst wyslany do przegladarki podczas ladowania klasy).
wiec kolejne wywylanie
$foo->wyswielt()
nie zadziala
LBO
$$objectname widoczne jest tylko w metodzie load() klasy loadclasses.. poczytaj o zasiegu zmiennych
crash
Może coś takiego Cię zadowoli:
  1. <?php
  2. class LoadClasses
  3. {
  4.  var $CLASS_DIR = './';
  5.  
  6.  var $loaded = array();
  7.  
  8.  function __construct() {}
  9.  
  10.  function loadClass( $className )
  11.  {
  12. if( !class_exists( $className ) and file_exists( $classFile = $this->CLASS_DIR . strtolower( $className ) . '.class.php' ) )
  13. {
  14.  include_once( $classFile );
  15.  
  16.  $this->loaded[ $className ] = new $className;
  17. }
  18.  }
  19.  
  20.  function getClass( $className )
  21.  {
  22. if( !array_key_exists( $className, $this->loaded ) )
  23. {
  24.  $this->loadClass( $className );
  25. }
  26.  
  27. return $this->loaded[ $className ];
  28.  }
  29. }
  30.  
  31. $ld = new LoadClasses;
  32.  
  33. $ld->getClass( 'Klasa' )->smth( 'Abc!' );
  34. ?>


klasa.class.php:
  1. <?php
  2. class Klasa
  3. {
  4.  function smth( $x )
  5.  {
  6. echo '<b>' . $x . '</b>';
  7.  }
  8. }
  9. ?>
Turgon
Wszystko super i pięknie. Tylko miałbym jedną prośbe crash - php 4, a nie php 5. Serwery z których korzystam php 5 nie obsługują...
crash
No właśnie napisałem wersje pod PHP5, ale wklejając ją tutaj zmieniłem ją na PHP4, jedyna pozostałość to nazwa konstruktora, zmień ją i już.
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.