Toon posts:

[PHP] OOP 'Undefined variable: this'

Pagina: 1
Acties:
  • 80 views sinds 30-01-2008

Verwijderd

Topicstarter
error:

Notice: Undefined variable: this in D:\wwwroot\test\objects\database.obj.php on line 40

script:
PHP:
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
<?PHP
class db
{
    var $host;
    var $db;
    var $user;
    var $pass;
    
    function database() 
    {
        $this->host = "localhost";
        $this->db   = "test";
        $this->user = "test";
        $this->pass = "test";
    }

    function connect()
    {
        mysql_select_db($this->db);
    }
      
    ..........
   }
}
?>


Nu krijg ik op regel 40 ( mysql_select_db($this->db);) een foutmelding....
Dat de variable "this" niet bestaat.....
Maar dit is toch een default variable uit OOP / PHP????

Ik roep de functie op de volgende manier aan:
PHP:
1
2
3
4
<?PHP
   $db = new db();
   database::connect();
?>

  • Spider.007
  • Registratie: December 2000
  • Niet online

Spider.007

* Tetragrammaton

$this is inderdaad een standaard variabele; maar wat doet die
PHP:
1
database::connect();
:?

Moet dat geen
PHP:
1
$db->connect();
zijn ?

[ Voor 24% gewijzigd door Spider.007 op 22-02-2004 14:08 ]

---
Prozium - The great nepenthe. Opiate of our masses. Glue of our great society. Salve and salvation, it has delivered us from pathos, from sorrow, the deepest chasms of melancholy and hate


Verwijderd

Spider.007 schreef op 22 februari 2004 @ 14:08:
$this is inderdaad een standaard variabele; maar wat doet die
PHP:
1
database::connect();
:?

Moet dat geen
PHP:
1
$db->connect();
zijn ?
Juist, want anders roep je een functie aan als een static method, en in static methods kun je geen $this gebruiken omdat je niet uitgaat van een instantie van de class.

Verwijderd

Topicstarter
Spider.007 schreef op 22 februari 2004 @ 14:08:
$this is inderdaad een standaard variabele; maar wat doet die
PHP:
1
database::connect();
:?

Moet dat geen
PHP:
1
$db->connect();
zijn ?
Euhhhh ja, sorry

edit:
PHP:
1
2
3
4
<?PHP 
   $db = new db(); 
   database::connect(); 
?> 

moet zijn:
PHP:
1
2
3
4
<?PHP 
   $db = new db(); 
   db::connect(); 
?> 


Maar als ik dus met "$db->connect()" werk krijg ik een andere melding:

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

  • simon
  • Registratie: Maart 2002
  • Laatst online: 27-05 09:21
Ben ik nou gek, of gebruik je em weer fout? Moet dat nu niet $db->connect(); zijn?

e.d.;

verder snap ik niet waarom je die classes aanroept alsof het een functie is, en niet met het $ teken..

[ Voor 43% gewijzigd door simon op 22-02-2004 14:15 ]

|>


  • vogeltje
  • Registratie: December 2001
  • Laatst online: 10-08-2025
db:connect() is nog steeds fout, zie post van Cheatah.

en met betrekking tot die foutmelding, dat komt denk doordat je db->database() nooit hebt aangeroepen, daardoor is $db niet gevuld.

binnenkort een hele dikke casemod :P


  • Terranca
  • Registratie: April 2000
  • Laatst online: 27-05 18:04
Ik zie zo op t eerste gezicht twee fouten:

Je classe heet "db" en je constructor "database", bij PHP is het zo dat je constructor dezelfde naam moeten hebben als je classe! Dus rename je functie "database" eerst eens naar "db".

Ten tweede roep je hem inderdaad verkeerd aan. Zo moet het:
PHP:
1
2
   $db = new db;
   $db->connect();


Ik zou nog even op PHP.net wat meer lezen over OOP, want zo te zien snap je het nog niet helemaal :)

[edit]
Even voor de duidelijkheid: een constructor is een functie die wordt aangeroepen bij het maken van een object van je classe ( in dit geval als je "$db = new db; )

[ Voor 31% gewijzigd door Terranca op 22-02-2004 14:22 ]


  • Helox-in-a-box
  • Registratie: Augustus 2000
  • Laatst online: 27-05 01:43
reply op: rodekaart - Sunday 22 February 2004 14:12

lol, volgens mij paktie nu de constructor ook niet,
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
$db = new db();
$db->connect();

class db {
    function db() {
    // code om username, pass en db te zetten
    }

    function connect() {
    // connect maar
    }
}

[ Voor 11% gewijzigd door Helox-in-a-box op 22-02-2004 14:18 ]


Verwijderd

Topicstarter
Simon schreef op 22 februari 2004 @ 14:13:
Ben ik nou gek, of gebruik je em weer fout? Moet dat nu niet $db->connect(); zijn?

e.d.;

verder snap ik niet waarom je die classes aanroept alsof het een functie is, en niet met het $ teken..
Zover ik weet / heb geleerd is het een van deze:

$object->functie()
of
object::functie()

Maar het probleem is niet dat hij niet in de functie komt!!!
Dat doet hij namelijk wel!, het probleem is dat hij de variabele: "$this->db" niet kent!

  • Terranca
  • Registratie: April 2000
  • Laatst online: 27-05 18:04
Verwijderd schreef op 22 februari 2004 @ 14:18:
[...]


Zover ik weet / heb geleerd is het een van deze:

$object->functie()
of
object::functie()

Maar het probleem is niet dat hij niet in de functie komt!!!
Dat doet hij namelijk wel!, het probleem is dat hij de variabele: "$this->db" niet kent!
Nee, je hebt het verkeerd begrepen

het is $object->functie, wanneer je een duidelijk object hebt, zoals "$db = new db;" dan is $db een object.

of het is klasse::functie, wanneer je de klasse alleen als functie-verzameling gebruikt. In dat geval kan je GEEN gebruik maken van member-variabelen (dus functies met $this->variabele werken gewoon niet in dat geval)

Hij kent $this->db niet omdat je hem nooit gedefinieerd hebt. Dat moet in de constructor gebeuren en die heb je een foute naam gegeven.

[ Voor 4% gewijzigd door Terranca op 22-02-2004 14:22 ]


  • Ritch
  • Registratie: December 1999
  • Laatst online: 27-05 16:06
Verwijderd schreef op 22 februari 2004 @ 14:18:
[...]


Zover ik weet / heb geleerd is het een van deze:

$object->functie()
of
object::functie()

Maar het probleem is niet dat hij niet in de functie komt!!!
Dat doet hij namelijk wel!, het probleem is dat hij de variabele: "$this->db" niet kent!
Ja omdat je eerst een object instantieert via new db() en dan een static methode probeert aan te roepen via db::connect().
Je wilt de connect methode van je db OBJECT aanroepen maar roept de static methode van de CLASS db aan, dat is nogal een verschil.
Je naamgeving van de file klopt ook niet helemaal, database.obj.php is niet logisch, database.class.php dan weer wel. Ik denk dat je eerst nog ff wat meer over OOP moet leren voordat je er ook mee gaat programmeren...

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

Ja doei, dit is gewoon een kwestie van eens goed de manual lezen.

http://nl.php.net/manual/en/language.oop.php

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz

Pagina: 1

Dit topic is gesloten.