Kom ihåg mig?
Home Menu

Menu


Hålla reda på classer

Ämnesverktyg Visningsalternativ
Oläst 2004-12-27, 02:15 #1
Tvartom Tvartom är inte uppkopplad
Medlem
 
Reg.datum: Oct 2004
Inlägg: 86
Tvartom Tvartom är inte uppkopplad
Medlem
 
Reg.datum: Oct 2004
Inlägg: 86
Hej!
Jag håller på att skriva en class och vill ha en funktion utanför classen
som kan lista innehålla från samtliga definierade instanser av classen.
Följande lösning fungarar inte, då endast saker som ändras i construktorn
kommer med i $allapersoner

Kod:
<?PHP

$kalle = new person("Karl");
$pelle = new person("Per");
$lasse = new person("Lars");

$pelle->bytnamn("Peter");

skrivutallapersoner();

exit;


class person {
	var $namn;

	function person ($nyttnamn) {
 global $allapersoner;
 $allapersoner[] = &$this;

 $this->bytnamn($nyttnamn);
	}

	function bytnamn ($nyttnamn) {
 $this->namn = $nyttnamn;
	}
}


function skrivutallapersoner() {
	global $allapersoner;
	foreach ($allapersoner as $tmpperson) {
 echo($tmpperson->namn."<br />\n");
	}
}

?>
Ger följande outout:
Citat:
Karl
Per
Lars
$pelle har med andra ord inte bytt namn i referensen!

Hur löser man detta, eller ett annat bra sätt att lista vilka instansen som finns av en viss class?
Tvartom är inte uppkopplad   Svara med citatSvara med citat
Oläst 2004-12-27, 14:48 #2
grazzy grazzy är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Mar 2004
Inlägg: 3 471
grazzy grazzy är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Mar 2004
Inlägg: 3 471
Jag tror att du tänker åt fel håll lite. Det är inte meningen att du skall försöka låta en klass hålla reda på dess instanser. Gör istället då en wrapper-klass som har en array med _referenser_ till objekten som du skapar, tex:

class PersonWrapper { // en ny wrapper-klass
var $personer = new Array();
function PersonWrapper($nyttnamn) { // konstruktor
instansiera array, lägg till referens till ny Person
}
class Person { // din gamla klass
....
}
}

Eller, så har du helt enkelt en array som du definerar i ditt program och manuellt lägger till i? Du kan ju eventuellt skicka med en referens till arrayen till klassen och låta den där lägga till (dålig lösning dock).
grazzy är inte uppkopplad   Svara med citatSvara med citat
Oläst 2004-12-28, 20:36 #3
Tvartom Tvartom är inte uppkopplad
Medlem
 
Reg.datum: Oct 2004
Inlägg: 86
Tvartom Tvartom är inte uppkopplad
Medlem
 
Reg.datum: Oct 2004
Inlägg: 86
Citat:
Originally posted by grazzy@Dec 27 2004, 14:48
Jag tror att du tänker åt fel håll lite.
Börjar förstå det lite...

Jag hittade en lösning som funkar,

Kod:
<?PHP
function person ($nyttnamn) {
 global $allapersoner;
 $allapersoner[] = &$this;


// Ett tilläg av följande rad gör att man kan nå $allapersoner[x]->namn senare med rätt värde:
 $this->namn = &$this->namn;



 $this->bytnamn($nyttnamn);
}

function bytnamn ($nyttnamn) {
 $this->namn = $nyttnamn;
}
}
?>
Men jag tycket det verkar vara ganska mysko kod så jag använder inte det
och har skrivet om och gjort på ett helt annat sätt istället.

Tack för hjälpen!
Tvartom är inte uppkopplad   Svara med citatSvara med citat
Oläst 2004-12-29, 05:16 #4
Charlie Charlie är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Jul 2004
Inlägg: 701
Charlie Charlie är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Jul 2004
Inlägg: 701
Om det kan vara till någon hjälp besökte jag för ett tag sedan Zends websida, där de har publicerat diverse information om PHP5 och dess nya funktioner, där OOP då är belyst. Där har de på en sida en hel del smarta lösningar som man kan använda. Om jag inte missminner mig (vilket är mycket möjligt just nu 05:13 ) är det kanske ett enligt dem sk. "factory" som du är ute efter.

De har även information om "singleton", "autoloader" etc. väldigt praktiska och hjälpsamma funktioner Jag har dock tyvärr ej länkarna i huvudet. Besök Zend -> Webmaster något -> Information om OOP med PHP5

Även om du redan har löst det här problemet är det nog väldigt givande.
Charlie är inte uppkopplad   Svara med citatSvara med citat
Oläst 2005-01-03, 22:36 #5
magentoss avatar
magentos magentos är inte uppkopplad
Nykomling
 
Reg.datum: Nov 2004
Inlägg: 26
magentos magentos är inte uppkopplad
Nykomling
magentoss avatar
 
Reg.datum: Nov 2004
Inlägg: 26
om man är nyfiken på detta problem kan man läsa i php manualen
om referenser i konstruktorn.
http://www.php.net/manual/sv/language.oop.newref.php
magentos är inte uppkopplad   Svara med citatSvara med citat
Svara


Aktiva användare som för närvarande tittar på det här ämnet: 1 (0 medlemmar och 1 gäster)
 

Regler för att posta
Du får inte posta nya ämnen
Du får inte posta svar
Du får inte posta bifogade filer
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG]-kod är
HTML-kod är av

Forumhopp


Alla tider är GMT +2. Klockan är nu 14:47.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson
 
Copyright © 2017