Versio

member functies

Overzicht Reageren

Mark D

Mark D

06/05/2007 14:22:00
Quote Anchor link
Ik heb een class gemaakt om de query's en dergelijken te laten uitvoeren enzo. Deze werkt perfect. Nou heb ik deze aangeroepen op index.php door $db = new database().

Op index.php include ik ook een class die data van de ingelogde gebruiker opvraagd. Nou wil ik hier in die class een query uitvoeren en ik doe dat zo: $res = $db->runQuery("SELECT blabla") Maar ik kan de functie runQuery niet uitvoeren omdat dit een member functie zou zijn. Ik heb van runQuery een public functie gemaakt. Waarom kan ik die dan niet aanroepen in een andere class?

Dus ik include database.class.php op index.php en voer hem uit door $db = new->database(); De variabele db moet dus beschikbaar zijn in een andere class.

Complete error: Fatal error: call to a member function runQuery() on a non-object in .....
Gewijzigd op 01/01/1970 01:00:00 door Mark D
 
PHP hulp

PHP hulp

25/05/2012 09:05:47
Gesponsorde koppelingen:
BHosted Hosting al vanaf € 1,- per maand

Controleer nu gratis jouw domeinnaam:

  
 
Bo az

Bo az

06/05/2007 14:58:00
Quote Anchor link
Je zal je object mee moeten geven (bijvoorbeeld via de constructor) om 'm in de andere class beschikbaar te hebben.

Voorbeeld:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
<?php

class Foo{

    private $m_sMessage;

    public function __construct($p_sMessage){
        $this->m_sMessage = $p_sMessage;
    }

    
    public function getMessage(){
        return $this->m_sMessage;
    }

}


class Bar{

    private $m_oFoo;

    public function __construct($p_oFoo){
         $this->m_oFoo = $p_oFoo;
    }

    
    public function __toString(){
        echo $this->m_oFoo->getMessage();
    }
    
}


$oFoo = new Foo('Doe maar iets.');

$oBar = new Bar($oFoo);

$oBar->__toString();

// Output: Doe maar iets.

?>
Gewijzigd op 01/01/1970 01:00:00 door Bo az
 
Cees St

Cees St

06/05/2007 15:11:00
Quote Anchor link
@Boaz waar is $this->m_oFoo;
die voor?

Een andere mogelijkheid zou ook een inheritance kunnen zijn..

dus class bar extends foo

dan is de functie ook beschikbaar.

Echter in dit geval zou ik het niet doen omdat er dan heel veel instances een DB connectie opbouwen.
 
Bo az

Bo az

06/05/2007 15:16:00
Quote Anchor link
S***, ik wist dat ik het niet in één keer foutloos kon, maar wilde het toch proberen. Het moest natuurlijk private $m_oFoo; zijn.

Ga 'm nog even testen, misschien is er nog wel meer fout :P
Edit:
Er zaten verder geen fouten in, hij werkt nu.


Owja, inheritance moet je natuurlijk alleen toepassen als er een verband is. (auto extends voertuig etc.)
Gewijzigd op 01/01/1970 01:00:00 door Bo az
 
Cees St

Cees St

06/05/2007 15:24:00
Quote Anchor link
Dat je inheritance alleen in een soort hiërarchie toepast zal duidelijk zijn. Maar Mark zijn vraag was naar mijn idee meer algemeen van aard m.b.t. het gebruik van classes en dan zou ik altijd wijzen op het gebruik van inheritance. Juist ook omdat het hergebruik van code bevorderd.

Groet Cees
 



Overzicht Reageren