[PHP] Classes opnieuw gebruiken

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik heb een script die door middel van een class (een open-source script genaamd Snoopy) info van een andere site haalt en die in de database zet (om precies te zijn, hij pakt info en plaatjes van xbox.com en zet die informatie vervolgens in mijn database zodat ik er verder mee kan werken en een site eromheen bouwen). Die database moet vervolgens elk uur gecheckt worden of er iets is verandert en dan wordt het geupdate (door middel van een cornjob). Probleem is, om die info te krijgen wordt er gebruik gemaakt van een class. Ik heb vervolgens het volgende simpele scriptje:

PHP:
1
2
3
4
5
6
$gamercard = mysql_query("SELECT * FROM `gamercards`", $dbh);
while ($row = mysql_fetch_array($gamercard))
    {
    $add = $row[gamertag];
    include("gamercard.php");
    }


Hij gaat dus langs alle rijen in de tabel, en pakt daaruit de 'gamertag'. Die gooit ie vervolgens in de gamercard.php file in een class en dan krijg je de output die in de database gezet wordt. Helaas kan je een class niet opnieuw gebruiken kwam ik net achter, maar ik zou niet weten hoe het anders moet. Kan iemand mij wat opweg helpen?

Acties:
  • 0 Henk 'm!

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

NMe

Quia Ego Sic Dico.

Een class niet opnieuw gebruiken? :? Hoe bedoel je? Het hele idee van classes is dat je er instanties van kan maken? :?

offtopic:
Zet sowieso error_reporting eens op E_ALL. Er staat een fout op regel 4 die je nu mist.

'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!

  • JHS
  • Registratie: Augustus 2003
  • Laatst online: 16-09 16:02

JHS

Splitting the thaum.

Aangezien de class in de gamercard.php file staat schieten we waarschijnlijk meer op met de relevante code daaruit :) . Classes zijn namelijk gewoon te hergebruiken. Mogelijk is het dan ook handiger om alleen een class in je gamercard.php bestand te zetten, en die met $add aan te roepen in je scriptje. Waarna je die class vrolijk nog een keer kan aanroepen.

Waarom denk je overigens dat je classes niet opnieuw kan gebruiken :) ?

DM!


Acties:
  • 0 Henk 'm!

Verwijderd

Misschien is het inderdaad handig dat je even het daadwerkelijk gebruik van de class die je bedoeld uit de gamertag.php laat zien.

[ Voor 69% gewijzigd door Verwijderd op 20-04-2006 20:07 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
hmmm... even wat meer uitleg:

Ik krijg de volgende error als ik het bestand oproep in mijn browser:
Fatal error: Cannot redeclare class snoopy in /home/rottens/domains/360feeds.com/public_html/gamercard/snoopy.php on line 4

Hij kan de class dus niet 'redeclaren', dus ik dacht dat je hem niet opnieuw kon gebruiken, aangezien de class in de loop een paar keer achter elkaar gebruikt moet worden.

de gamercard.php file ziet er als volgt uit (een beetje ingekort):

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
include('snoopy.php');
$snoopy = new Snoopy; 
if($snoopy->fetch("http://gamercard.xbox.com/". $tag .".card")) 
$in = ($snoopy->results);

preg_match('#<h3 class="XbcGamertag(.+?)">#',$in, $gamertagstyle1); 
preg_match('#width="64" src="(.+?)" /></a>#',$in, $gamertile1);
preg_match('#XbcFRAR">[img]"(.+?)"[/img]</span></p>#',$in, $gamerrep1);  
preg_match('#Gamerscore" src="(.+?)" />#',$in, $gamerscore_img1);
preg_match_all('#title="(.+?)"#',$in, $achievements);
preg_match_all('#<span class="XbcFRAR">(.+?)</span>#',$in, $gamer);
preg_match_all('#<div class="XbcgcGames">(.+?)</div></div></div>#',$in, $gamesa);  

\\hieronder wordt alles in de database gezet


Hierin wordt dus weer de snoopy.php file opgeroepen waar de class instaat. Dat is een nogal grote file, en simpel gezegd komt het daarin op neer dat hij aan het einde de info weer returned met een 'return $postdata'. Het script hiervan is hier te vinden: http://www.360feeds.com/gamercard/snoopy.txt

[ Voor 17% gewijzigd door Verwijderd op 20-04-2006 20:13 . Reden: even wat extra toevoegen ]


Acties:
  • 0 Henk 'm!

  • JHS
  • Registratie: Augustus 2003
  • Laatst online: 16-09 16:02

JHS

Splitting the thaum.

Redeclare betekend opnieuw declareren. Dat betekend dus dat je niet opnieuw de class mag aanmaken. Dat gebeurt doordat je snoopy.php twee keer include. include('snoopy.php'); veranderen in een include_once lijkt me dan ook de oplossing :) .

DM!


Acties:
  • 0 Henk 'm!

  • CH4OS
  • Registratie: April 2002
  • Niet online

CH4OS

It's a kind of magic

Verwijderd schreef op donderdag 20 april 2006 @ 19:58:
Probleem is, om die info te krijgen wordt er gebruik gemaakt van een class. Ik heb vervolgens het volgende simpele scriptje:

PHP:
1
2
3
4
5
6
$gamercard = mysql_query("SELECT * FROM `gamercards`", $dbh);
while ($row = mysql_fetch_array($gamercard))
    {
    $add = $row[gamertag];
    include("gamercard.php");
    }
Als je alleen de gamertag wilt hebben... Waarom selecteer je dan ALLES uit je tabel gamercards? Ik zou dus gewoon je query aanpassen naar SELECT `gamercard` FROM ` gamercards... ;)

Reden is namelijk dat ie nu alleen selecteerd wat je daadwerkelijk nodig hebt (en dus gebruikt). Scheelt je in het doorlopen van de resultaten en kost het je minder geheugen... :)

[ Voor 8% gewijzigd door CH4OS op 20-04-2006 20:16 ]


Acties:
  • 0 Henk 'm!

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

NMe

Quia Ego Sic Dico.

JHS schreef op donderdag 20 april 2006 @ 20:13:
Redeclare betekend opnieuw declareren. Dat betekend dus dat je niet opnieuw de class mag aanmaken. Dat gebeurt doordat je snoopy.php twee keer include. include('snoopy.php'); veranderen in een include_once lijkt me dan ook de oplossing :) .
Puur strict gezien zou het zelfs require_once moeten zijn. :)

'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!

Verwijderd

Topicstarter
met de require_once werkt het inderdaad! Nu nog alles wat versoepelen, inkorten en versnellen, want 100 keer achter elkaar deze class uitvoeren vind ie niet zo heel lekker...

Acties:
  • 0 Henk 'm!

  • JHS
  • Registratie: Augustus 2003
  • Laatst online: 16-09 16:02

JHS

Splitting the thaum.

-NMe- schreef op donderdag 20 april 2006 @ 20:18:
[...] Puur strict gezien zou het zelfs require_once moeten zijn. :)
Dat ligt er aan of je wil dat je applicatie faalt bij het ontbreken van die class, wat me in dit geval wel zo lijkt. Waarom dat strict voor elke class in het algemeen zou gelden zie ik niet in :) ?

DM!


Acties:
  • 0 Henk 'm!

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

NMe

Quia Ego Sic Dico.

Verwijderd schreef op donderdag 20 april 2006 @ 20:19:
met de require_once werkt het inderdaad! Nu nog alles wat versoepelen, inkorten en versnellen, want 100 keer achter elkaar deze class uitvoeren vind ie niet zo heel lekker...
Classes voer je niet uit, je maakt er instanties van. En van die instanties kun je methodes gebruiken/uitvoeren. <!-- Ja, ik weet dat je ook klassen kunt gebruiken zonder instanties ervan te maken. :P --> Misschien kun je beter even wat basistutorials over OOP doornemen? :)
JHS schreef op donderdag 20 april 2006 @ 20:21:
[...]
Dat ligt er aan of je wil dat je applicatie faalt bij het ontbreken van die class, wat me in dit geval wel zo lijkt. Waarom dat strict voor elke class in het algemeen zou gelden zie ik niet in :) ?
Ik heb het nooit over een algemene situatie gehad. ;) In dit geval is die klasse gewoon nodig voor het correct uitvoeren van het script; file niet aanwezig -> geen zinnige uitvoer, dus einde verhaal, zoals je zelf ook al aangeeft. :)

[ Voor 5% gewijzigd door NMe op 20-04-2006 20:34 ]

'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.

Pagina: 1