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

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

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

Απάντηση
Άβαταρ μέλους
cordis
Administrator, [F|H]ounder, [C|S]EO
Δημοσιεύσεις: 27622
Εγγραφή: 09 Οκτ 1999 03:00
Τοποθεσία: Greece
Επικοινωνία:

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

Δημοσίευση από cordis » 17 Νοέμ 2005 16:27

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

Εμβέλεια μιας μεταβλητής
Η Εμβέλεια μιας μεταβλητής ορίζετε από την εμβέλεια της διαδικασίας μέσα στην οποία έχει ορισθεί. Εάν για παράδειγμα έχει ορισθεί μέσα σε μια procedure ή μέσα σε μια function η εμβέλειά της είναι μόνο μέσα εκεί.

Εάν έχει ορισθεί στον κυρίως κορμό του προγράμματος η εμβέλειά της και πάλι είναι μόνο μέσα εκεί και στα πιθανά κομμάτια τους κορμού από εξωτερικά αρχεία, αλλά όχι και μέσα στις περιεχόμενες procedures ή functions. Ονομάζετε όμως καθολική (global), για τον λόγω ότι έχουμε τρόπο να την χρησιμοποιήσουμε όπου θέλουμε.

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

<?php
$num = 3;
include "config.inc";
?>
Η μεταβλητή $num θα υφίσταται και μέσα στο config.inc. Αλλά τι γίνετε όταν έχουνε κάποια function που την έχουμε ορίσει εμείς;

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

<?php
$num = 3; /* εμβέλεια στον κορμό του προγράμματος */ 

function Test&#40;&#41;
&#123; 
   echo $num; /* εμβέλεια μόνο μέσα στην function */ 
&#125; 

Test&#40;&#41;;
?>
Το παραπάνω παράδειγμα δε θα μας βγάλει τίποτα, μιας και μέσα στην function δεν έχουμε δώσει τιμή στην μεταβλητή $num. Για να δούμε ακόμα ένα παράδειγμα που θα μας φέρει κάποια αποτελέσματα.

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

<?php
$num = 3; /* εμβέλεια στον κορμό του προγράμματος */ 

function Test&#40;&#41;
&#123; 
  $num = 8; /* εμβέλεια μόνο μέσα στην function */ 
   echo $num; 
&#125; 
echo $num; 
Test&#40;&#41;;
echo $num; 
?>
Με αυτό θα πάρουμε το αποτέλεσμα 383 και αυτό γιατί το $num του κορμού δεν επηρεάζετε από $num της function, το οποίο έχει εμβέλεια και διάρκεια ζωής όσο διαρκεί και η εκτέλεση της function.

Εάν θέλουμε η function να χρησιμοποιήσει την μεταβλητή του κορμού δεν έχουμε παρά να της πούμε ότι αυτή η μεταβλητή είναι καθολική (global) και δεν είναι τοπικής εμβέλειας.

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

<?php
$num = 3; /* εμβέλεια στον κορμό του προγράμματος */ 

function Test&#40;&#41;
&#123; 
  global $num; /* του λέμε να χρησιμοποιήσει την μεταβλητή του κορμού */
  $num = 8;
  echo $num; 
&#125; 
echo $num; 
Test&#40;&#41;;
echo $num; 
?>
Με αυτόν τον τρόπο το αποτέλεσμα που θα πάρουμε θα είναι το 388, μιας και μέσα στην function με το global $num; είπαμε να μη δημιουργήσει μια νέα θέση μνήμης για μια τοπική μεταβλητή, αλλά να χρησιμοποιήσει την ίδια την μεταβλητή του κορμού. Γι' αυτό και ότι πράξεις κάνουμε μέσα στην function με αυτήν την μεταβλητή θα έχει αντίκτυπο και έξω από αυτήν.

Ένας άλλος τρόπος να κάνουμε το ίδιο πράγμα είναι και ο εξής:

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

<?php
$num = 3; /* εμβέλεια στον κορμό του προγράμματος */ 

function Test&#40;&#41;
&#123; 
  $GLOBALS&#91;'num'&#93; = 8; /* του λέμε να χρησιμοποιήσει την μεταβλητή του κορμού */
  echo $GLOBALS&#91;'num'&#93;; 
&#125; 
echo $num; 
Test&#40;&#41;;
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.v ... perglobals
Δεν απαντάω σε προσωπικά μηνύματα με ερωτήσεις που καλύπτονται από τις ενότητες του forum. Για ο,τι άλλο είμαι εδώ για εσάς.
- follow me @twitter

Άβαταρ μέλους
Cypriot
Δημοσιεύσεις: 355
Εγγραφή: 20 Οκτ 2009 15:43

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

Δημοσίευση από Cypriot » 22 Ιούλ 2010 13:25

στο 4ο

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

 δεν καταλαβαίνω γιατί θα εμφανίσει  388
Αφού μετά το <?php 
$num = 3; /* εμβέλεια στον κορμό του προγράμματος */
δεν υπάρχει κάποια echo εντολή

ΑΚΥΡΟ τώρα το είδα..

Άβαταρ μέλους
Khronos
Δημοσιεύσεις: 754
Εγγραφή: 11 Δεκ 2006 14:43
Τοποθεσία: Ηράκλειο

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

Δημοσίευση από Khronos » 22 Ιούλ 2010 13:28

Γιατί γίνεται κλήση της function Test() η οποία έχει echo.

[edit]Τώρα είδα οτι το είδες :P[/edit]

Απάντηση

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

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

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