Avatar billede skizo_someone Nybegynder
09. februar 2005 - 21:49 Der er 6 kommentarer og
1 løsning

problemer med classes

Hejsa

Jeg sidder og bakser med et php projekt hvor jeg er stødt ind i et problem når det det gælder kaldt af en method fra en class.

For at illustrere mit problem har jeg lavet dette:
http://files.pornogris.dk/class_error.jpg

Det der sker er at jeg  har min "fil #1" som inkluderer en "fil #2" hvor der bliver defineret en class, den class bliver så initialiseret i "fil #1" og der bliver derefter inkluderet en "fil #3" som kalder en method fra den class, men når jeg prøver på det, får jeg følgende fejl:

Fatal error: Call to a member function on a non-object in

Hvad kan det mon være?

På forhånd tak
Christian Rasmussen
Avatar billede erikjacobsen Ekspert
09. februar 2005 - 22:04 #1
Mon ikke vi kan finde ud af det ved at se din kode?
Avatar billede skizo_someone Nybegynder
09. februar 2005 - 23:24 #2
Undskyld, jeg faldt i søvn foran skærmen... jeg paster nogle stykker kode - jeg skal dog lige pointere at det meste bare er noget halvfærdigt noget, grundet at jeg begyndte at få denne fejl...

Fil #1 - den der inkludere og instantierer classen samt inkludere den fil der benytter classen.

<?php
//First, a few configurations, to make php output xhtml1.1 valid data
//Following is set to prevent php from insetting the PHPSESSID in forms which results in non-valid code
ini_set('session.use_trans_sid', false);
ini_set("url_rewriter.tags","");

//Following is to make the PHPSESSID links XHTML1.1 valid
ini_set("arg_separator.output", "&amp;");

//Starting the session
session_start();

include('config.php');

//Including the various classes
include('includes/class.blocks.php');

//Initiating the Blocks Class
$Blocks = new Blocks;

//Include theme-file
include("themes/$themename/theme.php");
//DET ER OVENSTÅENDE FIL DER BENYTTER CLASSEN!!!

?>

Fil #2 - Den fil der indeholder Blocks Classen...

<?php
Class Blocks {
    function render_blocks($side) {
        if($side == "l") {
            //Getting the blocks for the left side, sorting them.
            $data = mysql_query("SELECT * FROM cms_blocks WHERE side='l' ORDER BY pri ASC") or die(mysql_error());
            $data = mysql_fetch_assoc($data);

            return $data;

        }elseif($isde == "r") {

        }else {
            echo "Side is not a valid value";
        }
    }
}
?>

Ovenstående class er langt fra færdig, men jeg stoppede ligesom med at arbejde på den, da jeg ikke kunne kalde funktioner fra den :)

Fil #3 - Den fil der prøver at benytte method'en $Blocks->render_blocks()

<?php

function left_blocks() {
    $Blocks->woot();
    echo "<br/>";
}

?>

Som det kan ses, bliver method'en kaldt inde fra en funktion, kan det have noget med det at gøre? Jeg har søgt rundt som en gal efter en løsning på dette - håber i kan hjælpe.
Avatar billede erikjacobsen Ekspert
09. februar 2005 - 23:26 #3
function left_blocks() {
    global $Blocks;
    $Blocks->woot();
    echo "<br/>";
}
Avatar billede skizo_someone Nybegynder
10. februar 2005 - 20:14 #4
HARH!!! Det vidste jeg da egentlig godt :)
...men tak fordi du lige pointerede det for mig.
Avatar billede skizo_someone Nybegynder
10. februar 2005 - 20:14 #5
...kunne lige se at du havde oprettet det som kommentar, gider du ikke lave et svar så du kan få de point - du oprigtigt - fortjener?
Avatar billede erikjacobsen Ekspert
10. februar 2005 - 20:15 #6
Det er helt i orden. Jeg samler ikke på point. Svar selv, accepter eget svar.
Avatar billede skizo_someone Nybegynder
10. februar 2005 - 20:27 #7
Jamen tak for det da - og tusind tak for hjælpen
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester