[PHP] foreach leest array niet uit

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik ben nu bezig met een class te schrijven waarmee ik email mee kan versturen. Nou heb ik dus een array waar alle email adressen in staan en die wil laten zien door middel van een foreach lus. Alleen hij gaat de lus helemaal niet in. En de array is niet leeg want als ik met var_dump mn array laat zien dan staat alles er netjes in.

Dit is de code van mijn lus die de gegevens moet laten zien:

PHP:
1
2
3
4
    foreach ($this->arRecipientCollection as $strRecipientIdentifier => $objEmailRecipient) {
        print "NAME: " . $objEmailRecipient->getRecipientName() . "<br />";
        print "EMAIL ADDRESS: " . $objEmailRecipient->getRecipientAddress() . "<br />";
    }


Dit levert dus niks op. Dit krijg ik met var_dump, misschien dat jullie er iets aan hebben.

code:
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
object(EmailRecipientCollection)#2 (3) {
  ["_members:private"]=>
  array(3) {
    ["Test 1 "]=>
    object(EmailRecipient)#4 (2) {
      ["recipient_name:private"]=>
      string(6) "Test 1"
      ["recipient_address:private"]=>
      string(16) "dasd@example.com"
    }
    ["Test 2 "]=>
    object(EmailRecipient)#5 (2) {
      ["recipient_name:private"]=>
      string(6) "Test 2"
      ["recipient_address:private"]=>
      string(17) "sadas@example.com"
    }
    ["Test 3 "]=>
    object(EmailRecipient)#6 (2) {
      ["recipient_name:private"]=>
      string(6) "Test 3"
      ["recipient_address:private"]=>
      string(16) "sada@example.com"
    }
  }
  ["_onload:private"]=>
  NULL
  ["_isLoaded:private"]=>
  bool(false)
}


Volgens mij zou het dus gewoon moeten werken maar ik krijg het echt niet aan de praat. Als jullie nog meer informatie nodig hebben dan zeg maar!

Alvast bedankt.

[ Voor 11% gewijzigd door Verwijderd op 23-04-2006 22:19 ]


Acties:
  • 0 Henk 'm!

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

NMe

Quia Ego Sic Dico.

Je gebruikt arRecipientCollection maar drukt met var_dump EmailRecipientCollection af? En EmailRecipientCollection is geen array maar een object.

'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
$this->arRecipientCollection is EmailRecipientCollection. EmailRecipientCollection is zeg maar een class die fungeert als een array. Ik neem aan dat dat wel moet werken, aangezien ik het uit het boek Professional PHP 5 van wrox heb.

[ Voor 34% gewijzigd door Verwijderd op 23-04-2006 22:32 ]


Acties:
  • 0 Henk 'm!

  • prototype
  • Registratie: Juni 2001
  • Niet online

prototype

Cheer Bear

Verwijderd schreef op zondag 23 april 2006 @ 22:29:
$this->arRecipientCollection is EmailRecipientCollection. EmailRecipientCollection is zeg maar een class die fungeert als een array. Ik neem aan dat dat wel moet werken, aangezien ik het uit het boek Professional PHP 5 van wrox heb.
Sinds wanneer kan een eigen class fungeren als array in PHP? ;) Je zult toch echt een array moeten hebben om te itereren op deze wijze. Anders moet je zelf een iterator schrijven.
edit:
Als je goed kijkt naar je var_dump zie je dat het een private member van EmailRecipientCollection is die een array is, die EmailRecipient objecten bevat. Je zult dus door deze member moeten itereren. Let daarbij op dat het een private member is, en dus niet toegankelijk is van 'buiten de klasse EmailRecipientCollection'. Een iterator schrijven biedt hierbij uitkomst.

[ Voor 42% gewijzigd door prototype op 23-04-2006 22:36 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Oh wat dom. Dat stuk over iterators heb ik iets te vluchtig over gelezen. Dan zal het wel werken neem ik aan! Bedankt iig.

Acties:
  • 0 Henk 'm!

  • XWB
  • Registratie: Januari 2002
  • Niet online

XWB

Devver
Verwijderd schreef op zondag 23 april 2006 @ 22:29:
$this->arRecipientCollection is EmailRecipientCollection. EmailRecipientCollection is zeg maar een class die fungeert als een array.
:? Als je methodes een array returnen kan je die aflopen. Maar waarom heb je

PHP:
1
2
getRecipientName()
getRecipientAddress()


twee methodes hiervoor? Kan je niet gewoon een functie maken als getRecipientInfo welke naam en adresgegevens ophaalt en in een array returned welke je dan mooi kan aflopen?

March of the Eagles


Acties:
  • 0 Henk 'm!

Verwijderd

prototype schreef op zondag 23 april 2006 @ 22:32:

Sinds wanneer kan een eigen class fungeren als array in PHP? ;) Je zult toch echt een array moeten hebben om te itereren op deze wijze. Anders moet je zelf een iterator schrijven.
Niet helemaal
Maar de TS lijkt dus over de properties van een EmailRecipientCollection te willen itereren, maar die zijn dus allen private, dus onbenaderbaar, dus worden ze overgeslagen bij de iteratie.

Het lijkt mij dat je wilt itereren over de _members array, die je op een of andere manier beschikbaar moet maken, bij voorkeur met een public method.

Acties:
  • 0 Henk 'm!

  • prototype
  • Registratie: Juni 2001
  • Niet online

prototype

Cheer Bear

Verwijderd schreef op zondag 23 april 2006 @ 22:36:
[...]

Niet helemaal
Maar de TS lijkt dus over de properties van een EmailRecipientCollection te willen itereren, maar die zijn dus allen private, dus onbenaderbaar, dus worden ze overgeslagen bij de iteratie.

Het lijkt mij dat je wilt itereren over de _members array, die je op een of andere manier beschikbaar moet maken, bij voorkeur met een public method.
Ah, te voorbarig, 'k dacht dat PHP niet zoiets kende als Iterable ;) Weer wat geleerd :)

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Verwijderd schreef op zondag 23 april 2006 @ 22:36:
[...]

Niet helemaal
Maar de TS lijkt dus over de properties van een EmailRecipientCollection te willen itereren, maar die zijn dus allen private, dus onbenaderbaar, dus worden ze overgeslagen bij de iteratie.

Het lijkt mij dat je wilt itereren over de _members array, die je op een of andere manier beschikbaar moet maken, bij voorkeur met een public method.
Ik heb nu $_members public gemaakt en dan gaat ie wel de lus in alleen ziet ie $objEmailRecipient niet als een object. Terwijl uit var_dump toch wel blijkt dat het een object is?

Dit is de error:

Fatal error: Call to a member function getRecipientName() on a non-object
Pagina: 1