login  Naam:   Wachtwoord: 
Registreer je!
 Forum

constructor

Offline Ultimatum - 30/03/2007 16:30 (laatste wijziging 30/03/2007 16:33)
Avatar van UltimatumPHP expert Ik wil graag een constructor in mijn class gebruiken zodat ik met het aanroepen van mijn class het id kan opgeven en dan in de class zelf $this->id kan gebruiken. Maar hoe werkt dit?

Want ik heb nu dit kleine stukje maar $id is dan leeg als ik het echo..
  1. <?php
  2. class Members
  3. {
  4. var $id;
  5.  
  6. function __construct($id)
  7. {
  8. return $id;
  9. }
  10. ?>

Ik wil graag even wat reacties hierover zodat ik jullie meningen een beetje weet 

24 antwoorden

Gesponsorde links
Offline lemoinet - 30/03/2007 16:38
Avatar van lemoinet PHP gevorderde
  1. <?php
  2. class Members
  3. {
  4. var $id;
  5.  
  6. function __construct($id)
  7. {
  8. $this->id = $id;
  9. }
  10. ?>
Offline Ultimatum - 30/03/2007 16:39
Avatar van Ultimatum PHP expert Bedankt, ongeveer 10 seconden geleden kwam ik hier ook achter 
Offline Rik - 30/03/2007 16:52
Avatar van Rik Gouden medailleGouden medaille

Crew algemeen
In php 4 kan werkt __construct() nog niet, daar wordt een functie met dezelfde naam als de class bij het initialiseren van de class aangeroepen.

Misschien handig als aanvulling. 
Offline Ultimatum - 30/03/2007 17:00
Avatar van Ultimatum PHP expert Klopt dat wist ik nog wel maar wel handige aanvulling idd 
Offline Stijn - 30/03/2007 17:02
Avatar van Stijn PHP expert over de __construct valt weinig te zeggen. Het is de functie die aangeroepen wordt als je je class aanroept. De tegenhanger is __destruct. Die functie wordt aangeroepen wanneer het object "stopt".
Offline Ultimatum - 30/03/2007 17:04
Avatar van Ultimatum PHP expert Nog een vraagje over __destruct dan 

Kan je bijvoorbeeld mysql_close() en/of mysql_free_result() in __descruct te zetten dan? Of is dat daar niet de goeie plek?
Offline Stijn - 30/03/2007 17:06
Avatar van Stijn PHP expert da's een goeie plek ja (in een DB class vooral ).
Offline Ultimatum - 30/03/2007 18:53
Avatar van Ultimatum PHP expert Ja de database class moet ik nog ontwikkelen 
Offline Ibrahim - 30/03/2007 19:26
Avatar van Ibrahim PHP expert Wanneer je denkt over het maken van een database class, zou ik toch echt nadenken over het ondersteunen van verschillende database systemen (Oracle, PostgreSQL, MySQL, enz.)

Zo zijn database classen nuttig, als je alleen maar functies als dit gaat maken, dan heeft het echt GEEN nut:

  1. <?php
  2.  
  3. class ZogenaamdeDBClass
  4. {
  5. private function __construct( $host, $user, $pass, $db ) { } // singelton toepassen, om zo maar 1 connectie met de SQL server te starten. Je hebt er maar een nodig
  6.  
  7. public function QueryResource( $sQuery )
  8. {
  9. return mysql_query( $sQuery );
  10. }
  11. }


Dit is dus een voorbeeld van een nutteloze database class.

  1. <?php
  2.  
  3. class DAL
  4. {
  5. public function SelectDatabase( $sDatabase )
  6. {
  7. // aan hand van database systeem gekozen, moet de juiste class worden geladen
  8. }
  9.  
  10. // enz.
  11. }


Dit is dan een voorbeeld van een nuttige database class.
Offline Ultimatum - 30/03/2007 19:30
Avatar van Ultimatum PHP expert Dus dan moet je eigelijk meerdere classes maken? Een "hoofdclasse" en daar in weer voor elke soort database systeem een aparte classe?
Offline Ibrahim - 30/03/2007 19:35 (laatste wijziging 30/03/2007 19:37)
Avatar van Ibrahim PHP expert inderdaad, bijvoorbeeld iemand vult in MYSQL, dan kun je in die functie de class mysql.class.php aanroepen die het dan afhandelt.

  1. <?php
  2.  
  3. class MySQL
  4. {
  5. public function Query( $sQuery )
  6. {
  7. $QueryResult = @mysql_query( $QueryResult );
  8.  
  9. if( $QueryResult === false )
  10. {
  11. // een error class/functie aanroepen, want query is mislukt
  12. }
  13. else
  14. {
  15. return $QueryResult;
  16. }
  17. }
  18. }


Dit is natuurlijk bedoelt als je later van plan bent om een andere database te gebruiken, of als je misschien nadenkt om over te stappen naar een andere host (die dan misschien een andere database server heeft).

Het is eigelijk altijd slim om een DAL te maken, maar niet als het gaat om een gastenboekje ofzo. Bij grote systemen dus.

Denk dus na voordat je zoiets gaat maken, het zal wat tijd kosten.
Offline Stijn - 30/03/2007 19:38
Avatar van Stijn PHP expert maak een template voor standaard functies

-query
-fetch
-num_rows

voor elke database implement je die template in zijn class. Want mysql_query() zal verschillend zijn van ora_do()

dan kan je je class zo gebruiken:

  1. <?
  2. $mysql = new mysql( login data );
  3. $mysql->query("QUERY");
  4.  
  5. $ora = new oracle( login data );
  6. $ora->query("QUERY");
  7. ?>
Offline Ibrahim - 30/03/2007 20:07
Avatar van Ibrahim PHP expert stijn, dat is een manier, maar m.b.v. DAL kun je zonder dat je een nieuwe object aanmaakt, switchen tussen databases (geloof ik).

  1. <?php
  2.  
  3. $DB = new DAL( 'MYSQL' );
  4.  
  5. $DB->Query( "....." );
  6. $DB->ChangeDatabase( 'Oracle' );
  7. $DB->Query( "....." );


Zo zou ik tenminste een DAL maken
Offline mesynthetix - 30/03/2007 21:32 (laatste wijziging 30/03/2007 21:32)
Avatar van mesynthetix Nieuw lid Wat ik eerder zou doen is het gebruiken van PDO als je toch met php5 bezig bent. Heb je lekker brede ondersteuning van database types, en als je dan ook nog eens de prepared statements gebruikt, zijn SQL injections zo goed als onmogelijk.
Offline Ibrahim - 30/03/2007 22:55
Avatar van Ibrahim PHP expert of je gebruikt PEAR, dat is een DAL van PHP zelf
Offline Stijn - 30/03/2007 22:59
Avatar van Stijn PHP expert euhm siliecom14, waarom zou je veranderen van database midden in een applicatie/script? Je moet al meerdere servers hebben daarvoor...
Offline Ultimatum - 30/03/2007 23:34
Avatar van Ultimatum PHP expert Ik denk meer dat hij bedoelt dat als je het ter download aanbied het script op meerere severs kan werken ongeacht de databasesysteem..
Offline Stijn - 30/03/2007 23:41
Avatar van Stijn PHP expert Het blijft nog steeds onlogisch hoor. Je werkt toch op één database type: mysql, oracle, dbase,.... Zelfs het switchen tussen meerdere databases vind ik al weird. Je moet al echt een grote website hebben (grote website is GB's per dag aan data ophalen/updaten/...) om zoiets te doen.
Offline mesynthetix - 31/03/2007 10:15
Avatar van mesynthetix Nieuw lid @stijn1989: Dan zou ik het nog niet doen, dan zou ik gewoon een dedicated Oracle SQL server nemen.

Trouwens, het switchen tussen 2 database types op 1 pagina is ook niet gezond voor de parsetime.
Offline Ibrahim - 31/03/2007 10:24
Avatar van Ibrahim PHP expert jullie hebben gelijk, het is onlogisch om op 1 pagina te switchen tussen databases.


Maar stel je eens dit voor:

Je hebt een website dat alles regelt via de index om zo mooie* URLs te krijgen. Ik heb dat nu, dus start ik me database connectie in de index, zodat ik het overal kan gebruiken en niet telkens een connectie hoef te maken.

Nu is er data van een andere database, die je maar op 1 pagina hoeft te gebruiken. Met behulp van die methode kun je toch switchen tussen databases zonder dat je een nieuw object hoeft aan te maken 

Nu lijkt dit onwaarschijnlijk, maar ik heb het wel gezien waarin dit gebeurd 
Offline mesynthetix - 31/03/2007 10:28 (laatste wijziging 31/03/2007 10:30)
Avatar van mesynthetix Nieuw lid @siliecom14: Ik zou dan nog steeds niet gaan switchen, ik zou toch een nieuw object aanmaken. Anders zou ik mischien wel 3 keer naar de database moeten connecten.

Even een voorbeeldje:

  1. Op de index pagina met MySQL
  2. Op een andere pagina met Oracle
  3. Om weer met MySQL te kunnen werken, connect ik opnieuw met MySQL


Verder, PDO is eigenlijk een perfecte DAL en ingebakken in php, op het onnodige switchen tussen database types na.
Offline Stijn - 31/03/2007 11:13
Avatar van Stijn PHP expert @siliecom14: als je zoiets gezien hebt moet dat dan wel een slechte site zijn geweest je kan namelijk een nieuwe tabel maken in dezelfde database.... en daar kan je bijna oneindig records in opslaan.
Offline Rik - 31/03/2007 11:24
Avatar van Rik Gouden medailleGouden medaille

Crew algemeen
@mesynthetix
Opnieuw met mysql connecten is eigenlijk niet nodig. Het lijkt me onwaarschijnlijk dat mysql en oracle dezelfde "link identifier" hebben die door de war zou lopen.

Als je om beurten met verschillende mysql servers moet werken kan zoiets veel parsetime besparen:
  1. <?php
  2. $mysqlconnectie1 = mysql_connect('...');
  3. $mysqlconnectie2 = mysql_connect('...');
  4.  
  5. mysql_query('...', $mysqlconnectie1);
  6. mysql_query('...', $mysqlconnectie2);
  7. mysql_query('...', $mysqlconnectie1);
  8. mysql_query('...', $mysqlconnectie2);
  9. ?>
 
Offline mesynthetix - 31/03/2007 11:28
Avatar van mesynthetix Nieuw lid @Boukefalos: Ik heb het hier over een voorbeeld van de vorige pagina:

  1. <?php
  2.  
  3. $DB = new DAL( 'MYSQL' );
  4.  
  5. $DB->Query( "....." );
  6. $DB->ChangeDatabase( 'Oracle' );
  7. $DB->Query( "....." );
  8. // hier voeg ik even iets aan toe
  9. $DB->ChangeDatabase('MYSQL');
  10. $DB->Query(".....");


Hierbij wordt de ChangeDatabase code eingenlijk toch 3 keer uitgevoerd, of heb ik dat? Waarschijnlijk zit in die functie een reconnect, dus wordt het wel 3 keer uitgevoerd ;).
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.42s