[PHP] Class probleem met reference

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Saven
  • Registratie: December 2006
  • Laatst online: 18:37

Saven

Administrator

Topicstarter
Hey,
Ik was ff bezig met php enzo, gewoon om te testen.
Ik wil dus zegmaar dat ik alles via de core kan aanroepen.

Ik heb dus zegmaar een database class:
code:
1
2
3
class Database
{
    var $core;

Zodat ik bijvoorbeeld kan doen (dit gebeurt allemaal in de database class):
code:
1
mysql_connect($this->core->vars['db_host'], $this->core->vars['db_user'], $this->core->vars['db_pass']);


Nou dacht ik dat zo te doen:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
//--------------------------------
// Load the classes
//--------------------------------
require_once(root.'inc/core.inc.php');
require_once(root.'inc/classes/database.class.php');
require_once(root.'inc/classes/auth.class.php');
require_once(root.'inc/classes/cache.class.php');
require_once(root.'inc/config.inc.php');

/**
* Initiate the core
*/
$core       = new Core();
$core->vars = $INFO;

//--------------------------------
// Initiate other classes
//--------------------------------
$core->db           =  new Database();
$core->db->core     =& $core;

$core->auth         =  new Authorise();
$core->auth->core   =& $core;


Maar dat werkt niet :S, want dan krijg ik deze error:

Notice: Trying to get property of non-object in C:\...\database.class.php on line 37

Line 37 is in dit geval
code:
1
die( print_r($this->core->vars) );


Hij kan dus niet in de core komen zegmaar.
Nou vermoed ik dat dat met mijn "=& $core;" te maken heeft, maar ik heb geen idee hoe ik dit op kan lossen.

Weet iemand een oplossing?
Alvast bedankt :)

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

En wat is de precieze context van die regel 37? Als we niets weten over de functie/method waar die code in staat kunnen we hier geen zinnig woord over zeggen. ;)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • Saven
  • Registratie: December 2006
  • Laatst online: 18:37

Saven

Administrator

Topicstarter
-NMe- schreef op zaterdag 24 maart 2007 @ 14:23:
En wat is de precieze context van die regel 37? Als we niets weten over de functie/method waar die code in staat kunnen we hier geen zinnig woord over zeggen. ;)
Ik snap je niet helemaal :P

maar ik heb deze constructor:
PHP:
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
    function Database()
    {
        
        die( print_r($this->core->vars) );
        $this->connection_id = @mysql_connect($this->core->vars['db_host'], $this->core->vars['db_user'], $this->core->vars['db_pass']);
        
        if( !$this->connection_id )
        {
            $this->error( 'The system is unable to connect with the database<br />'.mysql_error() );
        }
        
        if( !@mysql_select_db($this->core->vars['db_name'], $this->connection_id) )
        {
            $this->error( 'The system is unable to find the selected database<br />'.mysql_error() );
        }
    }


En "die( print_r($this->core->vars) );" is lijn 37

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

De constructor is het eerste wat aangeroepen wordt van je class. de membervariabele $core bestaat dus nog niet eens, hoe wil je dan dáár alweer een member van aanroepen? :) Ken eerst eens een waarde aan $core toe, en daarna kun je pas $vars aanroepen.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • Saven
  • Registratie: December 2006
  • Laatst online: 18:37

Saven

Administrator

Topicstarter
-NMe- schreef op zaterdag 24 maart 2007 @ 14:31:
De constructor is het eerste wat aangeroepen wordt van je class. de membervariabele $core bestaat dus nog niet eens, hoe wil je dan dáár alweer een member van aanroepen? :) Ken eerst eens een waarde aan $core toe, en daarna kun je pas $vars aanroepen.
Hmz,

Ik start toch eerst de core class, en daarna laad ik pas de database class.
En ik snap niet echt waarom je bedoeld dat $core niet bestaat :P

core is een variable in de database class:
PHP:
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
class Database
{
    // set core object
    var $core;
    
    var $connection_id = null;
    
    var $query_id      = null;
    
    var $query_count   = 0;
    
    function Database()
    {
        
        die( print_r($this->core->vars) );

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Ja....en waar ziet jouw code dat $core een variabele is van het type Core, wat een klasse is? ;)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • Saven
  • Registratie: December 2006
  • Laatst online: 18:37

Saven

Administrator

Topicstarter
-NMe- schreef op zaterdag 24 maart 2007 @ 14:37:
Ja....en waar ziet jouw code dat $core een variabele is van het type Core, wat een klasse is? ;)
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
//--------------------------------
// Load the classes
//--------------------------------
require_once(root.'inc/core.inc.php');
require_once(root.'inc/classes/database.class.php');
require_once(root.'inc/classes/auth.class.php');
require_once(root.'inc/classes/cache.class.php');
require_once(root.'inc/config.inc.php');

/**
* Initiate the core
*/
$core         = new Core();
$core->vars    = $INFO;

//--------------------------------
// Initiate other classes
//--------------------------------
$core->db            =  new Database();
$core->db->core        =& $core;

$core->auth            =  new Authorise();
$core->auth->core    =& $core;

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Ja, maar $core in je global scope is heel wat anders dan een andere variabele in de scope van je Database class. Je zal $core mee moeten geven aan de constructor van je Database als je $core al wil gebruiken in die klasse. Daarnaast is het nogal een probleem dat je core naar je database verwijst en je database naar je core. Nogal overbodig. ;)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • Saven
  • Registratie: December 2006
  • Laatst online: 18:37

Saven

Administrator

Topicstarter
-NMe- schreef op zaterdag 24 maart 2007 @ 15:37:
Ja, maar $core in je global scope is heel wat anders dan een andere variabele in de scope van je Database class. Je zal $core mee moeten geven aan de constructor van je Database als je $core al wil gebruiken in die klasse. Daarnaast is het nogal een probleem dat je core naar je database verwijst en je database naar je core. Nogal overbodig. ;)
Oke toch bedankt :)
Weer wat wijzer :P
Pagina: 1