[php] classes, reference, increment

Pagina: 1
Acties:

  • Apache
  • Registratie: Juli 2000
  • Laatst online: 12:24

Apache

amateur software devver

Topicstarter
Hoi,

K'was net wat aan het prutsen ivm classes, t'is niet mijn eerste keer maar ik dacht eens aan een goede persoonlijke codebase te beginnen.

Nu was ik van plan om het aantal query's bij te houden, die sla ik op in een variable van de class db, nu d8 ik snel een class voor nieuws functie's te schrijven, dus pass ik naar de constructor van class news het object $db, waarnaar hij in de constructor de reference neemt naar dat object, wanneer ik dan een query uitvoer in de class news werkt het perfect, het word ook geincrement, maar wanneer ik buiten de news class de query's print zijn ze niet geincrement.

Nu vroeg ik me af waar het fout gaan, is in php een reference geen "echte" reference, maw het object word gekopieerd waarna enkel bij dat object geincrement word, of scheelt er iets anders?

Uiteindelijk is het de bedoeling dat ik een array van classes opbouw in het begin en die per refernce naar de constructor's van de andere classes doorgeef, of zijn hier betere methodes voor wat ik wil bereiken?

link naar phps files

If it ain't broken it doesn't have enough features


  • vinnux
  • Registratie: Maart 2001
  • Niet online
Misschien heb je er al naar gekeken, maar ik denk dat hier wel wat te vinden is hierover.
http://www.php.net/manual/en/language.oop.newref.php

  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

Ik kan de phps file niet bekijken aangezien ik hier achter een proxy ziet die alleen 80 en 443 door laat kan je dat fixen?

Programmer - an organism that turns coffee into software.


  • vinnux
  • Registratie: Maart 2001
  • Niet online
Hier dan een stuk van zijn code :
$database is een object.
ik denk dat dit : $this->db = $database; , dit : $this->db = &$database; moet worden.

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 news
{
    /*
    DB model:
    --------------------------------------------------
    | id | userid | title | date | message | visible | 
    --------------------------------------------------
   */
    
    var $db;
   
    /* constructor om toegang te krijgen tot de database */
    function news(&$database){
            $this->db = $database;
    }
   
    /* 
    $number aantal recenstste headlines dat opgehaald moet worden
    $max_string_length om te bepalen wanneer een string word afgekapt en vervolgt met ... 
    */

   function getNewsHeadlines($number, $max_string_length){
        $res = $this->db->query("SELECT * FROM movies LIMIT ".intval($number));
        while ($bleh = mysql_fetch_row($res)){
            print($bleh[1]."<br>\n");
        }
    }

}

Verwijderd

misschien wel handig om uit te leggen waarom ;)
als je een & voor de string zet, dus bijvoorbeeld &$database, dan gebruikt ie die string om dingen aan te passen in de functie, doe je dat niet, dan maakt ie een kopie van die string...

  • Nielsz
  • Registratie: Maart 2001
  • Niet online
LOOOOOGIIIIIIISCHHHHH :+
;)


let op:
PHP:
1
2
$db = new MySQL("localhost", "root", "1337 :P", "warez");
$news = new news($db);

Je maakt een variabele $db aan, van het type "mySQL";
Daarna maak je een nieuwe variabele $news aan, van het type "news";
Daarna roep je de constructor aan van news. En kopieert $db naar een nieuwe var, en gaat dan de constructor in :)

Dus doe eens dit:
PHP:
1
2
3
4
5
   function news($database){ 
            $this->db = &$database; 
    } 

$news = new news(&$db);

Dus je moet reference dus daar al aanmaken, ipv van IN de functie :)

[ Voor 0% gewijzigd door Nielsz op 01-08-2002 12:45 . Reden: [php] roeleert :Y) ]


  • Apache
  • Registratie: Juli 2000
  • Laatst online: 12:24

Apache

amateur software devver

Topicstarter
Bedankt allemaal, vooral Nielsz want hij is ERRUG 1337 l33t en hij krijgt je zeker wakker! :P

Het was dus de dubbele reference om het echte object te krijgen zodat er nergens een kopie word gemaakt.

[ Voor 0% gewijzigd door Apache op 01-08-2002 12:54 . Reden: Nielsz made me ]

If it ain't broken it doesn't have enough features


Verwijderd

Misschien geen antwoord op je vraag, maar waarom maak je een klasse MySQL. Meestal worden database classes geschreven als abstractielaag voor de verschillende database api's. Zodat je alleen die klasse hoeft te herschrijven om je gehele code op een andere dbms te laten werken.
Als dat je doel is hoef je het misschien niet eens zelf te schrijven kijk eens naar:
ADODB: http://php.weblogs.com/ADODB
phplib: phplib.sourceforge.net (hoewel niet alleen voor db doeleinden kun je de klassen eruit gebruiken)
en de projecten op PEAR.
Pagina: 1