Toon posts:

[PHP] wachten op functies in classes

Pagina: 1
Acties:

Verwijderd

Topicstarter
Misschien doe ik iets fout maar ik krijg lichtelijk de indruk dat PHP niet wacht tot een functie in een class klaar is alvorends verder te gaan. Bij normale functies is dit natuurlijk wel zo (denk aan mysql_connect gevolgd door een mysql_select_db en mysql_select_query, zou wel heel dom zijn als php niet zou wachten tot de mysql_connect klaar is).

Ik heb een class debug die er in versimpelde vorm zo uit ziet:
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
31
<?
class Debug
{
  var $msgs;
  var $size;
  
  function Debug()
  {
    $this->size = 0;
    $this->Error("Starting @ ". mktime(),0);
  } 
  
  function Error($a_msg,$a_level)
  {
    $this->msgs .= "($a_level) $a_msg<BR>";
  }
  
  function ShowSize()
  {
    //echo "Received ".$this->size." debugging messages<BR>";
  }
  
  function Display()
  {
    echo "<BR>Displaying ".$this->size." debugging messages:";
    echo "<blockquote>";
    echo $this->msgs;
    echo "</blockquote>";
  }
}
?>

Nu maak ik in mijn Core class het volgende
PHP:
1
2
3
4
5
<?
$this->debug = new Debug;
// hier maak ik wat objecten die de core zelf meekrijgen en via de core gebruik maken van de debug class
$this->debug->Display();
?>

Hier zegt ie heel netjes dat ie 1 message heeft welke de message is uit de constructor van Debug zelf. Blijkbaar komt ie al bij de aanroep van Display() voordat alle andere objecten gemaakt zijn en hun debugging zooi hebben gedaan, want het aanroepen zelf werkt wel (Als ik bij het toevoegen van een error in Debug zelf ShowDebug() aanroep dan zie ik wel steeds 2 messages, namelijk de eerste en de nieuwe.

Iemand enig idee hoe je die zooi op mekaar kan laten wachten? (Zal vast wel in de PHP FAQ of ergens in de search staan maar ik kan het iig niet vinden) Mijn dank is groot.

Verwijderd

Het lijkt me HEEL sterk als PHP niet wacht tot vorige statements uitgevoerd zijn, ik zou dus zeggen: Het probleem moet ergens anders liggen.

  • The Noid
  • Registratie: Januari 2000
  • Laatst online: 17-03-2011
Volgens mij kan php dingen niet out-of-order uitvoeren.

Weet je wel zeker dat alle objecten hetzelfde debug object gebruiken? dus dat je die steeds met een reference meeneemt?

This must be that Woodstock place mom and dad are allways talking about


Verwijderd

Topicstarter
Hmm ik geloof dat ik nogal een kopie van het Core object meegeef in plaats van een pointer. Wist niet dat PHP dat had :)

  • The Noid
  • Registratie: Januari 2000
  • Laatst online: 17-03-2011

This must be that Woodstock place mom and dad are allways talking about


Verwijderd

Topicstarter
Ok het volgende werkt dus niet, zo maak ik een kopie
PHP:
1
2
3
4
5
6
7
8
9
10
11
<?
class Core
{
   var $db;
 
   function Core()
   {
      $this->db = new Mysql($this);
   }
}
?>

Hoe moet dat wel in PHP?
Of roep een woord waarop ik kan zoeken in de docs, en als het references is dan ben ik al aan het lezen :)

edit:
te laat

Verwijderd

Met references dus ;)

  • The Noid
  • Registratie: Januari 2000
  • Laatst online: 17-03-2011
Dan moet de constructor-header van Mysql dus zijn:
PHP:
1
2
3
4
5
<?
function Mysql(&amp;$that) {

}
?>

This must be that Woodstock place mom and dad are allways talking about


Verwijderd

Topicstarter
Op dinsdag 26 februari 2002 16:40 schreef The_Noid het volgende:
Dan moet de constructor-header van Mysql dus zijn:
PHP:
1
2
3
4
5
<?
function Mysql(&amp;amp;$that) {

}
?>
Het werkt, thanks dudes. Weer wat geleerd.
Pagina: 1