"call no member" po podziale na klasy/pliki

0

Mam 4 pliki:
index.php (główny):

<?php
include "stronaclass.php";
...
?>

stronaclass.php (klasa z różnymi funkcjami)

include "laczeniezbaza.php";
class funkcje {
	function drukuj($id) {
		$db->db_getData("SELECT * FROM posts WHERE id=".$id); //tutaj błąd
		...
		}
	}

laczeniezbaza.php

require "dbclass.php";
$db=new dbclass();
...
$db->db_connect();

dbclass.php

class dbclass {
...
function db_getData($query) {
	$this->db_query($query);
	$this->i=0;
	while($data=mysql_fetch_array($this->result)) {
		$this->i++;
		$this->datafromdb[$this->i]=$data;
		}
	}
...
}

Fatal error: Call to a member function db_getData() on a non-object in /stronaclass.php on line 5

Proszę o pomoc.

0

Coś zepsułeś, bo wywołujesz metodę na czymś, co nie jest obiektem ($db może jest nieistniejącą zmienną lub wskazuje na coś zupełnie innego, niż Ci się wydaje).
Zacząłbym od pozbycia się odwołań do zdeprecjonowanych funkcji mysql_* i w ogóle przepisania kodu od nowa, tym razem myśląc.

0

No ale przecież dołączam plik z definicją obiektu chwilę przed tą funkcją. W żadnym innym miejscu $db nie jest przedefiniowywane. Wcześniej jak nie używałem klasy z pliku stronaclass to wszystko chodziło, ale potrzebuję to zrobić na funkcjach, żeby nie kopiować kodu.

0

Może global $db; $db->...
Ale ten kod i tak jest do wyrzucenia: mieszanie angielskich i polskich nazw, jakaś bezsensowna klasa funkcje...

0

Dopiero się uczę. Zmieniłem $db na $mydb i nadal to samo. Ta sama funkcja jest wywoływana też w index.php i tam normalne działa

if(is_object($mydb)){
echo "tak";
}else{
 echo "nie";
}

Taki kod wpisany przed definicją funkcji daje odpowiedź nie, ale dlaczego ten obiekt znika w klasie to nie mam pojęcia.

0

bo jest globalny

musisz wpisać

global $db;

dostałeś odpowiedź wcześniej!
I kod jest do przepisania bo nie jest obiektowy - użycie "global" = kod do d**y

0

Dobra dzięki, zrobiłem przekazanie bazy do konstruktora, chociaż niezbyt eleganckie mi się to wydaje. Nie rozumiem w końcu jak powinno być dobrze i nie "do du*y"

1 użytkowników online, w tym zalogowanych: 0, gości: 1