Jump to content
Slate Blackcurrant Watermelon Strawberry Orange Banana Apple Emerald Chocolate Marble
Slate Blackcurrant Watermelon Strawberry Orange Banana Apple Emerald Chocolate Marble
Sign in to follow this  
Anastasis

Εμβέλεια και Διάρκεια ζωής μιας μεταβλητής

Recommended Posts

 

Διάρκεια Ζωής μιας μεταβλητής
Η Διάρκεια Ζωής μιας μεταβλητής ξεκινάει από την στιγμή που παίρνει για πρώτη φορά τιμή (δηλώνετε) και σταματάει να υφίσταται όταν ολοκληρωθεί η διαδικασία μέσα στην οποία δηλώθηκε.

Εμβέλεια μιας μεταβλητής
Η Εμβέλεια μιας μεταβλητής ορίζετε από την εμβέλεια της διαδικασίας μέσα στην οποία έχει ορισθεί. Εάν για παράδειγμα έχει ορισθεί μέσα σε μια 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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

×