Anastasis 48 Report post Posted November 10, 2016 Διάρκεια Ζωής μιας μεταβλητής Η Διάρκεια Ζωής μιας μεταβλητής ξεκινάει από την στιγμή που παίρνει για πρώτη φορά τιμή (δηλώνετε) και σταματάει να υφίσταται όταν ολοκληρωθεί η διαδικασία μέσα στην οποία δηλώθηκε.Εμβέλεια μιας μεταβλητής Η Εμβέλεια μιας μεταβλητής ορίζετε από την εμβέλεια της διαδικασίας μέσα στην οποία έχει ορισθεί. Εάν για παράδειγμα έχει ορισθεί μέσα σε μια procedure ή μέσα σε μια function η εμβέλειά της είναι μόνο μέσα εκεί. Εάν έχει ορισθεί στον κυρίως κορμό του προγράμματος η εμβέλειά της και πάλι είναι μόνο μέσα εκεί και στα πιθανά κομμάτια τους κορμού από εξωτερικά αρχεία, αλλά όχι και μέσα στις περιεχόμενες procedures ή functions. Ονομάζετε όμως καθολική (global), για τον λόγω ότι έχουμε τρόπο να την χρησιμοποιήσουμε όπου θέλουμε. κώδικας: <?php $num = 3; include "config.inc"; ?> Η μεταβλητή $num θα υφίσταται και μέσα στο config.inc. Αλλά τι γίνετε όταν έχουνε κάποια function που την έχουμε ορίσει εμείς; κώδικας: <?php $num = 3; /* εμβέλεια στον κορμό του προγράμματος */ function Test() { echo $num; /* εμβέλεια μόνο μέσα στην function */ } Test(); ?> Το παραπάνω παράδειγμα δε θα μας βγάλει τίποτα, μιας και μέσα στην function δεν έχουμε δώσει τιμή στην μεταβλητή $num. Για να δούμε ακόμα ένα παράδειγμα που θα μας φέρει κάποια αποτελέσματα. κώδικας: <?php $num = 3; /* εμβέλεια στον κορμό του προγράμματος */ function Test() { $num = 8; /* εμβέλεια μόνο μέσα στην function */ echo $num; } echo $num; Test(); echo $num; ?> Με αυτό θα πάρουμε το αποτέλεσμα 383 και αυτό γιατί το $num του κορμού δεν επηρεάζετε από $num της function, το οποίο έχει εμβέλεια και διάρκεια ζωής όσο διαρκεί και η εκτέλεση της function. Εάν θέλουμε η function να χρησιμοποιήσει την μεταβλητή του κορμού δεν έχουμε παρά να της πούμε ότι αυτή η μεταβλητή είναι καθολική (global) και δεν είναι τοπικής εμβέλειας. κώδικας: <?php $num = 3; /* εμβέλεια στον κορμό του προγράμματος */ function Test() { global $num; /* του λέμε να χρησιμοποιήσει την μεταβλητή του κορμού */ $num = 8; echo $num; } echo $num; Test(); echo $num; ?> Με αυτόν τον τρόπο το αποτέλεσμα που θα πάρουμε θα είναι το 388, μιας και μέσα στην function με το global $num; είπαμε να μη δημιουργήσει μια νέα θέση μνήμης για μια τοπική μεταβλητή, αλλά να χρησιμοποιήσει την ίδια την μεταβλητή του κορμού. Γι' αυτό και ότι πράξεις κάνουμε μέσα στην function με αυτήν την μεταβλητή θα έχει αντίκτυπο και έξω από αυτήν. Ένας άλλος τρόπος να κάνουμε το ίδιο πράγμα είναι και ο εξής: κώδικας: <?php $num = 3; /* εμβέλεια στον κορμό του προγράμματος */ function Test() { $GLOBALS['num'] = 8; /* του λέμε να χρησιμοποιήσει την μεταβλητή του κορμού */ echo $GLOBALS['num']; } echo $num; Test(); echo $num; ?> Το $GLOBALS είναι ένας πίνακας που περιέχει όλες τις μεταβλητές του κορμού και η εμβέλειά του είναι παντού (superglobal). Όλες οι μεταβλητές που η εμβέλειά τους είναι παντού (superglobals) και δεν χρειάζεται να ορισθούν ως καθολικές (global) σε ένα υποπρόγραμμα (function ή procedure): $GLOBALS $_SERVER $_GET $_POST $_COOKIE $_FILES $_ENV $_REQUEST $_SESSION Περισσότερα για τις supperglobals μεταβλητές:http://www.php.net/manual/en/language.variables.predefined.php#lang...bles.superglobals Quote Share this post Link to post Share on other sites