6 berichten aan het bekijken - 1 tot 6 (van in totaal 6)
  • Q:
    Bijdrager
    EL Mystica

    [php] extending class

    Hoi,:)

    Ik ben me een beetje aan het verdiepen in php-classes.
    Ik heb een vraagje over extending classes

    Stel dat ik een class hebt om dbase connections te doen (mysql)
    [code:1:803b35de4d]
    <?php
    class myDB {
    /*
    * Variables
    */

    // dbase host
    var $_host;
    // dbase userlogin
    var $_user;
    // dbase password
    var $_pass;
    // dbase name
    var $_dbase;
    // dbase connection Object
    var $_connection;
    // dbase selector Object
    var $_db;
    // current sql
    var $_sql;
    // result Object
    var $_result;
    // debug mode, default off
    var $_debug = 0;
    // class instancename, debugging only
    var $_instancename;

    /*
    * constructor function
    */
    function myDB ( $host = ‘localhost’, $user, $pass, $dbase, $sql, $debug=0 ) {

    $this->_instancename = get_class($this);
    $this->_host = $host;
    $this->_user = $user;
    $this->_pass = $pass;
    $this->_dbase = $dbase;
    $this->_debug = $debug;
    if ($sql != NULL ) {
    $this->_sql = $sql;
    $this->connect();
    $this->query();
    }

    }

    /*
    * function connect(): connects to the dbase
    */
    function connect () {

    $this->_connection = mysql_connect( $this->_host, $this->_user, $this->_pass ) or die( $this->debug() );
    $this->_db = mysql_select_db( $this->_dbase ) or die ($this->debug() );

    }

    /*
    * function query(): performs the sql-query
    */
    function query () {

    $this->_result = mysql_query( $this->_sql, $this->_connection ) or die ( $this->debug() );

    return $this->_result;
    }
    }
    ?>
    [/code:1:803b35de4d]

    Dat loopt uiteraard nog verder voor een aantal andere primairy zaken en werkt nog goed ook:)

    Maar nu heb ik bvb een user management gedeelte. Daarbij moeten een aantal connecties gemaakt worden naar de dbase en daarvoor wil ik een extending class maken.

    [code:1:803b35de4d]

    class userDB extends myDB {

    function loginCheck ( $username, $password ) {

    // lowercases only!
    $username = strtolower( $username );
    $password = strtolower( $password );

    // add slashes for sql safety
    if( !get_magic_quotes_gpc() ) {
    $username = addslashes ( $username );
    }

    $this->_sql = "SELECT password FROM ". $org_table_users ." WHERE username = ‘$username’ ";
    $this->connect();
    $result = $this->query();
    ….

    ….

    }
    }
    ?>
    [/code:1:803b35de4d]

    Aangezien je maar één constructor kan aanroepen, wil ik die van de myDB class aanroepen, aangezien die alle paramaters al kan uitzetten.
    Is mijn aanroep binnen mijn class userDB dan correct ( $this->connect() en $this->query() zijn immers methodes vanuit de parent class myDB ) ? Of moet dit anders?
    Bovendien heb ik een aantal globale variabelen (zoals $org_table_users) die buiten de classes gedefinieerd zijn. Hoe kan ik die dan gaan gebruiken in mijn extending class userDB?

    Bijdrager
    Kyokushinkai
    ”EL

    Aangezien je maar één constructor kan aanroepen, wil ik die van de myDB class aanroepen, aangezien die alle paramaters al kan uitzetten.

    Misschien is het dan handiger om je myDB class te extenden met je userDB, zodat de myDB constructor automatisch aangeroepen wordt.

    Is mijn aanroep binnen mijn class userDB dan correct ( $this->connect() en $this->query() zijn immers methodes vanuit de parent class myDB ) ? Of moet dit anders?

    Dit zou prima moeten werken inderdaad, de classes worden gecombineerd tot 1 class

    Bovendien heb ik een aantal globale variabelen (zoals $org_table_users) die buiten de classes gedefinieerd zijn. Hoe kan ik die dan gaan gebruiken in mijn extending class userDB?

    Is dat een vaste variabele die niet verandert? Dan zou de define functie misschien wel handig zijn.

    Bijdrager
    EL Mystica
    ”Kyokushinkai”
    ”EL

    Aangezien je maar één constructor kan aanroepen, wil ik die van de myDB class aanroepen, aangezien die alle paramaters al kan uitzetten.

    Misschien is het dan handiger om je myDB class te extenden met je userDB, zodat de myDB constructor automatisch aangeroepen wordt.

    Inderdaad, en dat is ook mijn huidige opzet.

    Wat de define betreft: idd, ook al aan gedacht, maar dan voor sommige zaken verandert de inhoud van die variabele… :s

    Bedankt voor je uitleg!

    Bijdrager
    Kyokushinkai
    ”EL
    ”Kyokushinkai”
    ”EL

    Aangezien je maar één constructor kan aanroepen, wil ik die van de myDB class aanroepen, aangezien die alle paramaters al kan uitzetten.

    Misschien is het dan handiger om je myDB class te extenden met je userDB, zodat de myDB constructor automatisch aangeroepen wordt.

    Inderdaad, en dat is ook mijn huidige opzet.

    ”EL

    [code:1:0494110197]class userDB extends myDB {[/code:1:0494110197]

    Wat ik dus bedoelde is dat je myDB en userDB omdraait.

    Wat de define betreft: idd, ook al aan gedacht, maar dan voor sommige zaken verandert de inhoud van die variabele… :s

    Kun je die variabele niet kwijt in een van de classes? Eventueel zou je nog een class kunnen maken met functionaliteit met betrekking tot die variabele, en die ook extenden.

    Bedankt voor je uitleg!

    Graag gedaan

    Bijdrager
    EL Mystica
    ”Kyokushinkai”
    ”EL

    [code:1:2ab96de688]class userDB extends myDB {[/code:1:2ab96de688]

    Wat ik dus bedoelde is dat je myDB en userDB omdraait.

    En als ik een andere class wil schrijven die verder werkt met de basics vanuit myDB?

    Bijdrager
    danielpunt

    Extenden is helemaal niet nodig.

    [code:1:2572d0e038]
    class User {
    function loginCheck ( $username, $password ) {
    // lowercases only!
    $username = strtolower( $username );
    $password = strtolower( $password );

    // add slashes for sql safety
    if( !get_magic_quotes_gpc() ) {
    $username = addslashes ( $username );
    }

    $db = new myDB();
    $db->sql = "SELECT password FROM ". $org_table_users ." WHERE username = ‘$username’ ";
    $db->connect(); // kan ook in de constructor van myDB;
    $result = $db->query();
    }
    }[/code:1:2572d0e038]

6 berichten aan het bekijken - 1 tot 6 (van in totaal 6)

Je moet ingelogd zijn om een reactie op dit onderwerp te kunnen geven.