Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: __PHP_Incomplete_Class Object
Forum PHP.pl > Forum > PHP
wojto
witam,
na stronie moje sesje przyjmuja taka wartosc:
Kod
Array
(
    [language] => language Object
        (
            [lang_name] => __PHP_Incomplete_Class Object
                (
                    [__PHP_Incomplete_Class_Name] => language
                    [lang_name] => russian
                )

        )

)

znalazlem w necie info, ze __PHP_Incomplete_Class Object jest jakims bledem w php :/
czy ktos z was sie spotkal z takim bledem i wie jak temu zapobiec?

klasa language jest prosta:
  1. <?php
  2. class language
  3. {
  4. function language() {
  5. return true;
  6. }
  7.  
  8. function load_file($file) {
  9. global $lang, $auth;
  10.  
  11. if (file_exists(SITE_ADRESS.'languages/'.$auth -> user_language.'/'.$file)) {
  12. include_once(SITE_ADRESS.'languages/'.$auth -> user_language.'/'.$file);
  13. return true;
  14. } else {
  15. return false;
  16. }
  17. }
  18. }
  19.  
  20. ?>

tworzenie: $language = new language();

// aha, na localhoscie dziala ok

pzdr. wojto
aleksander
czy na localu i na serwerze wersje php sa te same?

btw
1.
class language
{
function language() {
return true;
}
co to jest? biggrin.gif Konstruktor nie moze zwracac nic, bo jest wywolywany przy tworzeniu obiektu i do zmiennej przisywany jest Resource do obiektu a nie wynik returna.

2. nie uzywaj global, bardzo zla praktyka programistyczna, w OOP w ogole nie do przyjecia:)
ActivePlayer
na moje oko, zeby w sesji bylo git, musisz zaincludowac strukture klasy na początku, zeby php wiedzial jak ma obiekt wygladac... bo jak wiesz... obiekt to nei tylko jego wartosci, ale tez metody ^^
FiDO
Definicja obiektow przechowywanych w sesji musi byc znana przed session_start(), zeby zapobiec temu bledowi.
Mialem dokladnei to samo chyba przedwczoraj, ale nie chcialem niepotrzebnie ladowac definicji klasy, ktora byla uzywana tylko w kilku miejscach, wiec ostatecznie zapisalem do sesji obiekt w postaci zserializowanej.
wojto
na serwerze jest 4.3.10, u mnie jest 5.0.0

usunalem te globale i dalem singletony, ale teraz mam taki problem, ze nie widzi mi obiektu $db w klasie $session, a kolejnosc wywolywania mam nastepujaca:

  1. <?php
  2. //...
  3. $db =& Db::getinstance();
  4. $db -> sql_connect();
  5.  
  6. $io =& Io::getinstance();
  7.  
  8. $error =& Error::getinstance();
  9.  
  10. $session =& Session::getinstance();
  11.  
  12. $auth =& Auth::getinstance();
  13.  
  14. $language =& Language::getinstance();
  15. ?>

o singletonach dopiero co przeczytalem dokladnie przed 5 minutami

getinstance w kazdej klasie wyglada analogicznie:
  1. <?php
  2. function &getinstance() {
  3. static $instance = false;
  4.  
  5. if ($instance == false) {
  6. $instance = new Auth();
  7. }
  8.  
  9. return $instance;
  10. }
  11. ?>


no i wykonujac skrypt dostaje blad:
Kod
php Notice: Undefined variable:  db
Fatal error: Call to a member function sql_query() on a non-object in c:\usr\apache\httpd\html\poflirtuj\includes\session.class.php on line 98

ta linia, to:
Kod
function gc($a)
{
//linia 98:
    return($db -> sql_query("DELETE FROM ".PREFIX."sessions WHERE last_active<UNIX_TIMESTAMP()-1800"));
}


OOP tylko liznalem w javie, wiec problem moze jest w kolejnosci wywolywania klas, czy da sie zrobic tak, zeby dzialalo wszystko ok, jesli klasy sa powiazane w sposob: mam klasy Auth, Db, Error, Io, Language, Session

Auth korzysta z Db i Io
Io korzysta z Db
Language korzysta z Auth
Session korzysta z DB, Auth

niby w takiej kolejnosci jak wywoluje, to kazda klasa powinna miec to co potrzebuje :/
aleksander
a zdefiniowales zmienna $db w metodzie gc ? to jest tak samo jak w funkcjach. Zrob wpierw
  1. <?php
  2. function gc($a)
  3. {
  4. $db = DB::getInstance();
  5. return($db -> sql_query("DELETE FROM ".PREFIX."sessions WHERE last_active<UNIX_TIMESTAMP()-1800"));
  6. }
  7. ?>

i używaj znacznika php
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.