Object met ander object laten communiceren

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Aron K

Aron K

29/10/2008 21:06:00
Quote Anchor link
Sinds kort ben ik begonnen met OO programmeren in PHP(voorheen alleen in Java OO geprogrammeerd), nu wil ik het volgende:
Via het 1e opject classes aanroepen in een ander opbject.
Dan zou ik normaal bij het aanmaken van het 2e object een referentie meeposten, maar dat gaat niet helemaal lekker, dit heb ik nu:

In mijn bestand die de classes aanmaakt:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
$mysql
= new Mysql("user","password","localhost","database");
$login = new Login($mysql);
?>


En in mijn class login:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
class Login{
    private $mysql=null;
    
    public function Login($mysqlconnection){
        $mysql=$mysqlconnection;
    }

    
    public function test(){
        $mysql->test();        
    }
}

?>


Als ik dit uit wil voeren zegt apache dat de functie niet bestaat.
Waarom werkt dit niet, en nog belangrijker hoe zorg ik ervoor dat het wel gaat werken.

Bij voorbaat dank,
Gewijzigd op 01/01/1970 01:00:00 door Aron K
 
PHP hulp

PHP hulp

21/11/2024 19:37:45
 
Jan Koehoorn

Jan Koehoorn

29/10/2008 21:10:00
Quote Anchor link
Voorbeeldpagina: object within objects

Edit: hier nog een voorbeeldje, om je op weg te helpen:
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
<?php
    ini_set ('display_errors', 1);
    error_reporting (E_ALL | E_STRICT);

    class persoon {
        private $naam;
        
        public function __construct ($naam) {
            $this->set_naam ($naam);
        }

        
        public function set_naam ($naam) {
            $this->naam = $naam;
        }

        
        public function get_naam () {
            return $this->naam;
        }
    }

    
    class gezin {
        private $vader;
        private $moeder;
        
        public function __construct ($vader, $moeder) {
            $this->set_vader ($vader);
            $this->set_moeder ($moeder);
        }

        
        public function set_vader ($vader) {
            $this->vader = $vader;
        }


        public function set_moeder ($moeder) {
            $this->moeder = $moeder;
        }

        
        public function get_vader () {
            return $this->vader->get_naam ();
        }

        
        public function get_moeder () {
            return $this->moeder->get_naam ();
        }
    }

    
    $vader = new persoon ('pietje');
    $moeder = new persoon ('simone');
    $gezin = new gezin ($vader, $moeder);
    
    echo '<p>' . $gezin->get_vader () . '</p>';
    echo '<p>' . $gezin->get_moeder () . '</p>';
?>
Gewijzigd op 01/01/1970 01:00:00 door Jan Koehoorn
 
Aron K

Aron K

29/10/2008 21:19:00
Quote Anchor link
Ok, ik heb die pagina doorgelezen, maar wat daar gedaan wordt is toch precies hetzelfde als wat in mijn script gebeurd?
 
Bo az

Bo az

29/10/2008 21:25:00
Quote Anchor link
Je doet het prima naar mijn mening, alleen moet je in deze methode:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
<?php
public function test(){
        $mysql->test();        
    }
[
/code]

$this->mysql->test(); gebruiken.

Overigens een hele begrijpelijke fout als je Java gewend bent ;) In PHP moet je nou eenmaal altijd aangeven dat je een membervariabele bedoeld.

[
b]Edit:[/b]
Overigens moet dat ook in je methode Login. En waarschijnlijk moet die methode een constructor zijn en ook op dat punt verschilt PHP weer van Java, bij PHP moet je (nou ja, is het beter om) daar namelijk __construct gebruiken.
Gewijzigd op 01/01/1970 01:00:00 door Bo az
 
Aron K

Aron K

29/10/2008 21:29:00
Quote Anchor link
Het werkt, domme fout.
Beiden heel hartelijk bedankt.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.