Προσοχή στα references μέσα σε loops

Σε αυτή την περιοχή μπορείτε να βρείτε ή να αναζητήσετε πληροφορίες σχετικές με την PHP

Συντονιστές: WebDev Moderators, Super-Moderators, PHP Moderators

Απάντηση
Άβαταρ μέλους
cpulse
Script Master
Δημοσιεύσεις: 1527
Εγγραφή: 21 Μαρ 2006 19:30
Τοποθεσία: Αθήνα village
Επικοινωνία:

Προσοχή στα references μέσα σε loops

Δημοσίευση από cpulse » 13 Ιούλ 2006 12:57

Να ένα πρόβλημα που μου έφαγε 1 ολόκληρη ώρα να το βρω.. #$*@#$&!#

Στο script που δούλευα είχα να κάνω με objects κι εκεί χρειάζονται τα references, αλλά τον κώδικα που δίνω εδώ τον έχω απλοποιήσει για να γίνει ευκολότερα κατανοητός.

Έστω οτι έχουμε ένα array..

Κώδικας: Επιλογή όλων

$array = array('a', 'b', 'c', 'd');
Ας πούμε λοιπόν οτι χρειαζόμαστε επιλεκτικά references..

Κώδικας: Επιλογή όλων

foreach ($array as $k => $v) {
	if ($v == 'a' || $v == 'c') $ref = &$array[$k];
	else $ref = false;

	if ($ref === false) do_nothing();
	else do_stuff($ref);
}
Το παραπάνω script είναι προβληματικό! Στον πρώτο κύκλο του θα βάλει στο $ref ένα reference στο πρώτο στοιχείο του πίνακα. Στον δεύτερο κύκλο του δεν θα ορίσει απλά το $ref ως false, αλλά επειδή από τον προηγούμενο κύκλο είναι ήδη reference θα βάλει την τιμή false στο πρώτο στοιχείο του πίνακα!

Για να δουλέψει σωστά θα πρέπει να αποδεσμεύεται το $ref σε κάθε κύκλο.

Κώδικας: Επιλογή όλων

foreach ($array as $k => $v) {
	if (isset($ref)) unset($ref);

	if ($v == 'a' || $v == 'c') $ref = &$array[$k];
	else $ref = false;

	if ($ref === false) do_nothing();
	else do_stuff($ref);
}

Απάντηση

Επιστροφή στο “PHP Προγραμματισμός”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 0 επισκέπτες