Forum und email

Τι κάνουν οι αναφορές

Οι αναφορές στην PHP σας επιτρέπουν να κάνετε δυο μεταβλητές να αναφέρονται στο ίδιο περιεχόμενο. Δηλαδή, όταν γράφετε:

<?php
$a 
=& $b 
?>
σημαίνει ότι η $a και η $b δείχνουν στην ίδια μεταβλητή.

Note: Η $a και η $b είναι τελείως ίσες εδώ, αφού η $a δεν δείχνει στην $b ή αντιστρόφως, αλλά τόσο η $a όσο και η $b δείχνουν στο ίδιο μέρος.

Η ίδια σύνταξη μπορεί να χρησιμοποιηθεί με συναρτήσεις, οι οποίες επιστρέφουν αναφορές, και με τον τελεστή new (στην PHP 4.0.4 και μετά):

<?php
$bar 
=& new fooclass();
$foo =& find_var ($bar);
?>

Note: Η μη χρήση του τελεστή & δημιουργεί ένα αντίγραφο του αντικειμένου που θα γίνει. Αν χρησιμοποιείτε το $this σε μια κλάση, αυτό θα ενεργήσει πάνω στο τρέχον στιγμιότυπο (instance) της κλάσης. Η ανάθεση χωρίς το & θα αντιγράψει το στιγμιότυπο (π.χ. το αντικείμενο) και το $this θα ενεργήσει σ' αυτό το αντίγραφο, το οποίο δεν είναι το επιθυμητό. Συνήθως θέλετε να έχετε ένα μόνο στιγμιότυπο να δουλεύετε, εξαιτίας θεμάτων απόδοσης και κατανάλωσης μνήμης.
Ενώ μπορείτε να χρησιμοποιείτε τον τελεστή @ για να σταματάτε (mute) λάθη στον constructor, όταν το χρησιμοποιείτε ως @new, δε θα δουλέψει όταν κάνετε χρήση και της δήλωσης &new. Αυτό είναι ένας περιορισμός της Zend Engine και συνεπώς θα καταλήξει σε λάθος του μεταγλωττιστή.

Το δεύτερο πράγμα που κάνουν οι αναφορές είναι να περνάνε μεταβλητές με αναφορά (by-reference). Αυτό γίνεται δημιουργώντας μια τοπική μεταβλητή σε μια συνάρτηση και μια μεταβλητή με εμβέλεια τέτοια ώστε να μπορούμε να την καλέσουμε, και η οποία αναφέρεται στο ίδιο περιεχόμενο. Για παράδειγμα:

<?php
function foo (&$var)
{
    
$var++;
}

$a=5;
foo ($a);
?>
Το παραπάνω παράδειγμα θα δώσει στην $a την τιμή 6. Αυτό συμβαίνει γιατί στη συνάρτηση foo η μεταβλητή $var αναφέρεται στο ίδιο περιεχόμενο όπως και η $a. Δείτε πιο λεπτομερή εξήγηση στο πέρασμα με αναφορά (passing by reference).

Το τρίτο πράγμα που κάνουν οι αναφορές είναι η επιστροφή με αναφορά (return by reference).