Forum und email

Μεταβλητές μεταβλητών

Μερικές φορές είναι βολικό να μπορούμε να έχουμε μεταβλητά ονόματα μεταβλητών. Αυτό σημαίνει πως, ένα όνομα μεταβλητής μπορεί να οριστεί και να χρησιμοποιηθεί δυναμικά. Μια κανονική μεταβλητή ορίζεται με μια δήλωση όπως:

<?php
$a 
"hello";
?>

Μια μεταβλητή μεταβλητής παίρνει την τιμή μιας μεταβλητής και της συμπεριφέρεται ως όνομα μεταβλητής. Στο παραπάνω παράδειγμα, η hello, μπορεί να χρησιμοποιηθεί ως το όνομα της μεταβλητής χρησιμοποιώντας το σύμβολο του δολαρίου δυο φορές. π.χ.

<?php
$$a "world";
?>

Σ'αυτό το σημείο δυο μεταβλητές έχουν οριστεί και αποθηκευτεί στο δέντρο συμβόλων (symbol tree) της PHP : η $a με περιεχόμενο "hello" και η $hello με περιεχόμενο "world". Συνεπώς, αυτή η δήλωση:

<?php
echo "$a ${$a}";
?>

παράγει ακριβώς το ίδιο αποτέλεσμα όπως η:

<?php
echo "$a $hello";
?>

π.χ. και οι δυο παράγουν: hello world.

Προκειμένου να χρησιμοποιήσετε μεταβλητές μεταβλητών με arrays, πρέπει να λύσετε το πρόβλημα της ασάφειας. Δηλαδή, αν γράφετε $$a[1] τότε ο parser χρειάζεται να ξέρει αν θέλετε να χρησιμοποιήσετε την $a[1] ως μεταβλητή, ή αν θέλετε την $$a ως μεταβλητή και συνεπώς το [1] index από αυτή τη μεταβλητή. Η σύνταξη για να λύσουμε αυτή την ασάφεια είναι: ${$a[1]} για την πρώτη περίπτωση και ${$a}[1] για τη δεύτερη.

Warning

Παρακαλώ σημειώστε ότι οι μεταβλητές μεταβλητών δεν μπορούν να χρησιμοποιηθούν με τους Superglobal arrays της PHP. Αυτό σημαίνει ότι δεν μπορείτε να κάνετε πράγματα όπως ${$_GET}. Αν ψάχνετε έναν τρόπο για να χειριστείτε τη διαθεσιμότητα των superglobals και της παλιάς HTTP_*_VARS, ίσως πρέπει να χρησιμοποιήσετε την αναφορά μεταξύ αυτών.