[PHP] Raar probleem met classes

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Mount
  • Registratie: December 2006
  • Laatst online: 17:25
Hallo,

Om te beginnen zal ik eerst even een situatie schetsen:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
class mBot {
   function mBot() {

    }
   function RSS() {

    }
   function Kick() {

    }
   function Weetniet() {

    }
}

$bot = &new mBot();
$irc = &new Net_SmartIRC();
?>


Nu loop ik tegen een raar probleem aan. Ik kan $irc aanroepen vanuit Kick en Weetniet. Ik kan alleen $irc niet aanroepen via RSS. Ik loop al een paar uur te zoeken naar het probleem, maar ik kan het helaas niet vinden.

Error:
PHP Notice: Undefined variable: irc in C:\Documents and Settings\Administrator\
Desktop\bots\Jessica\start.php on line 264
PHP Fatal error: Call to a member function message() on a non-object in C:\Docu
ments and Settings\Administrator\Desktop\bots\Jessica\start.php on line 264
Ik hoop dat jullie mij kunnen helpen,

Mount

Acties:
  • 0 Henk 'm!

  • GlowMouse
  • Registratie: November 2002
  • Niet online
MountMan schreef op zaterdag 21 juli 2007 @ 22:52:
Nu loop ik tegen een raar probleem aan. Ik kan $irc aanroepen vanuit Kick en Weetniet. Ik kan alleen $irc niet aanroepen via RSS. Ik loop al een paar uur te zoeken naar het probleem, maar ik kan het helaas niet vinden.
Dit heeft met scoping te maken. Ik vind het vreemd dat $irc in Kick en Weetniet wel werken, dat hoort namelijk niet vanzelf te gaan.

Acties:
  • 0 Henk 'm!

  • Mount
  • Registratie: December 2006
  • Laatst online: 17:25
Dit was ik nog even vergeten te melden:

Alles word aangeroepen door de SmartIRC handlers, RSS ook, maar wel op een andere manier

PHP:
1
2
3
4
<?php
$irc->registerActionhandler(SMARTIRC_TYPE_QUERY, '.*', $bot, 'Kick');
$irc->registerTimehandler( 5000, $bot, 'RSS');
?>


EDIT: Laat maar zitten, komt er net een hier aangelopen: "Oh gewoon een global neerzetten" Dom dom dom.... :o :o

[ Voor 17% gewijzigd door Mount op 21-07-2007 23:05 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Je moet globals juist proberen te vermijden. Je kunt toch gewoon een reference meegeven aan de functies in je bot? Of direct aan de constructor al een verwijzing meegeven? Zo kun je EN die standaard functionaliteiten gebruiken van je smartIRC ding en tegelijkertijd ook weer nieuwe dingen aanroepen.

Maargoed dit zeg ik zonder dat ik weet hoe smartIRC precies werkt.

Acties:
  • 0 Henk 'm!

  • japsai
  • Registratie: Augustus 2003
  • Niet online
Als je in PHP 5 werkt is dit:

PHP:
1
$bot = &new mBot();


in ieder geval niet nodig, objecten worden standaard per referentie doorgegeven.

Acties:
  • 0 Henk 'm!

  • japsai
  • Registratie: Augustus 2003
  • Niet online
Maar idd, zoals Micheltje15 zegt; het is beter om dat $irc object alvast mee te geven aan $bot, zeker als het vaker gebruikt word. Zo bijvoorbeeld:

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
<?php

class mBot {
   private $irc;  

   public function __construct( Net_SmartIRC $irc ) {
       $this->irc = $irc;
   }

   function mBot() {

    }
   function RSS() {

    }
   function Kick() {

    }
   function Weetniet() {

    }
}

$irc = &new Net_SmartIRC();
$bot = &new mBot( $irc );


Je moet dan wel telkens
PHP:
1
$this->irc
gebruiken om het Net_SmartIRC object te gebruiken.

[ Voor 9% gewijzigd door japsai op 23-07-2007 14:12 ]

Pagina: 1