[php] instance issue

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Liqued
  • Registratie: Februari 2001
  • Laatst online: 06-08 15:21
Ben driftig bezig om mijn PhP bij te spijkeren op OOP gebied. Nu probeer ik dmv het singleton concept 1 database instance te maken. Het lijkt er op dat ik prima een instance kan aanmaken van de DatabaseConnection. Het probleem doet zich voor als ik vanuit deze instance een methode wil aanroepen (in dit geval query). Als ik index.php aan roep, dan laad hij prima "Constructor called" zien, echter niet "Running query on database connection...". Iemand enig idee hoe dit kan?

PHP: index.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
require_once 'DatabaseConnection.class.php';
class index {

    public function __construct() {
        
        $dbInstance = DatabaseConnection::getInstance();
        $dbInstance->query;
    }

}

new index();
?>

PHP: DatabaseConnection.class.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
26
27
28
29
30
<?php
class DatabaseConnection
{
    // Store the single instance of Database
    private static $m_pInstance;

    // Private constructor to limit object instantiation to within the class
    private function __construct() 
    { 
        echo "Constructor called<br />\n"; 
    }

    // Getter method for creating/returning the single instance of this class
    public static function getInstance()
    {
        if (!self::$m_pInstance)
        {
            self::$m_pInstance = new DatabaseConnection();
        }

        return self::$m_pInstance;
    }
    
    // Test function to simulate a query
    public function query()
    {
        echo "Running query on database conenction...<br />\n";
    }
    
} ?>

Acties:
  • 0 Henk 'm!

  • HuHu
  • Registratie: Maart 2005
  • Niet online
Je vergeet de () achter query.

Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
Klopt toch? Als je van query dan query() zou maken dan roep je een functie aan, nu zet je gewoon een lege variabele...

* Cartman! mept HuHu

[ Voor 12% gewijzigd door Cartman! op 29-08-2010 20:15 ]


Acties:
  • 0 Henk 'm!

  • Liqued
  • Registratie: Februari 2001
  • Laatst online: 06-08 15:21
Uren van staren naar mijn scherm......... thank guys

Acties:
  • 0 Henk 'm!

  • kaesve
  • Registratie: Maart 2009
  • Laatst online: 16-05 03:04
misschien ligt het aan mij, maar volgens mij moet je beter leren debuggen (ook kijkend naar je vorige topics).

wat je hier doet is een field met de naam query proberen op te roepen in plaats van de method. het helpt als je bij het aanroepen van een method ook de () niet vergeet.

edit::
pff. te laat :(

[ Voor 4% gewijzigd door kaesve op 29-08-2010 20:18 ]


Acties:
  • 0 Henk 'm!

  • Rian
  • Registratie: Januari 2005
  • Laatst online: 21-05 09:42
Cartman! schreef op zondag 29 augustus 2010 @ 20:15:
Klopt toch? Als je van query dan query() zou maken dan roep je een functie aan, nu zet je gewoon een lege variabele...
Hoe kan dat kloppen? In zijn DatabaseConnection class zit een functie 'query', die precies dat echoot wat de TS wil zien. Wat mij betreft heeft Huhu daarom ook gelijk, deze code werkt namelijk wel zoals de TS zou verwachten, indien er een function call uitgevoerd wordt op $dbInstance naar de func query().

Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
Rian schreef op zondag 29 augustus 2010 @ 20:19:
[...]


Hoe kan dat kloppen? In zijn DatabaseConnection class zit een functie 'query', die precies dat echoot wat de TS wil zien. Wat mij betreft heeft Huhu daarom ook gelijk, deze code werkt namelijk wel zoals de TS zou verwachten, indien er een function call uitgevoerd wordt op $dbInstance naar de func query().
Volgens mij moet je leren lezen, ik zeg dus precies hetzelfde als HuHu :)

Acties:
  • 0 Henk 'm!

  • FragFrog
  • Registratie: September 2001
  • Laatst online: 16:21
HuHu schreef op zondag 29 augustus 2010 @ 20:14:
Je vergeet de () achter query.
En hier was je achter gekomen met strictere error-reporting aangezien die variabele niet bestaat:
Enabling E_NOTICE during development has some benefits. For debugging purposes: NOTICE messages will warn you about possible bugs in your code. For example, use of unassigned values is warned. It is extremely useful to find typos and to save time for debugging. NOTICE messages will warn you about bad style. For example, $arr[item] is better to be written as $arr['item'] since PHP tries to treat "item" as constant. If it is not a constant, PHP assumes it is a string index for the array.
Zie ook error_reporting() of de ini setting :)

[ Site ] [ twitch ] [ jijbuis ]


Acties:
  • 0 Henk 'm!

  • HuHu
  • Registratie: Maart 2005
  • Niet online
Ik vraag me trouwens ook af wat die lelijke en foutieve prefix voor de variabele Instance doet. Noem dat ding gewoon $instance, $_instance of $instance_, maar zet er niet voor dat het een member pointer is (want dat is het niet en het is stom).
Pagina: 1