Πεδίο μεταβλητής PHP. Όλα όσα ήθελες να μάθεις αλλά φοβήθηκες να ρωτήσεις. Μεταβλητές στην PHP Εμφάνιση της τιμής μιας μεταβλητής στην οθόνη

Οι μεταβλητές περιβάλλοντος (περιβάλλον) στα Windows περιέχουν διάφορες πληροφορίες σχετικά με τις ρυθμίσεις συστήματος και το περιβάλλον του χρήστη. Διάκριση μεταξύ μεταβλητών περιβάλλοντος χρήστη, συστήματος και διεργασίας.

Ο ευκολότερος τρόπος για να δείτε τα περιεχόμενα των μεταβλητών περιβάλλοντος στα Windows είναι να ανοίξετε τις ιδιότητες συστήματος ( sysdm.cpl) -> Για προχωρημένους -> Μεταβλητές περιβάλλοντος.Όπως μπορείτε να δείτε, στην ανοιχτή ενότητα υπάρχουν δύο ενότητες: η επάνω περιέχει τις μεταβλητές περιβάλλοντος του χρήστη, η κάτω περιέχει τις μεταβλητές του συστήματος.

Επιπλέον, οι μεταβλητές περιβάλλοντος αποθηκεύονται στο μητρώο του συστήματος. Οι προσαρμοσμένες μεταβλητές αποθηκεύονται σε μια ενότητα. Συστημική - σε HKLM \ SYSTEM \ CurrentControlSet \ Control \ Session Manager \ Environment.

Μπορείτε να εμφανίσετε τις τιμές όλων των μεταβλητών περιβάλλοντος στη γραμμή εντολών των Windows. Η εντολή είναι απλή:

Η εντολή θα αναφέρει τις μεταβλητές περιβάλλοντος και τις τιμές τους.

Στο PowerShell, μπορείτε να χρησιμοποιήσετε την εντολή για να εμφανίσετε όλες τις μεταβλητές περιβάλλοντος:

Εάν θέλετε να εκτυπώσετε την τιμή μιας μόνο μεταβλητής, πρέπει να χρησιμοποιήσετε την εντολή echo και το όνομα της μεταβλητής πρέπει να περικλείεται σε σύμβολα ποσοστού. Για παράδειγμα,

Echo% systemroot%

set> c: \ tmp \ env_var.txt

Οι μεταβλητές περιβάλλοντος που σχετίζονται με τη διαδικασία μπορούν να ληφθούν χρησιμοποιώντας μια δωρεάν Επεξεργαστείτε τα βοηθητικά προγράμματα του Explorer(από το Sysinternals). Αρκεί να ανοίξετε τις ιδιότητες της διαδικασίας και να μεταβείτε στην καρτέλα περιβάλλον.

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

Πώς να δημιουργήσετε μια μεταβλητή στην PHP

Αρχικά, οι μεταβλητές περιέχουν το πρόσημο $ (δολάριο) - προσδιορισμός της χρήσης μιας μεταβλητής και μετά γράμματα Λατινικό αλφάβητο(από το α έως το ω και μικρό και μεγάλο), στο τέλος μπορεί να περιέχει αριθμοί... Επίσης, το όνομα επιτρέπεται να χρησιμοποιεί υπογράμμιση (όχι στο τέλος).

Πώς μπορούν να ονομαστούν οι μεταβλητές:

$ var
μεταβλητή $
$ έτος 1945
$ _μεταβλητή
Πώς δεν μπορούν να κληθούν οι μεταβλητές:

$ 1 - αποτελείται μόνο από ένα ψηφίο
$ 1var - δεν μπορείτε να ξεκινήσετε ένα όνομα μεταβλητής με ένα ψηφίο
$ / var - μόνο οι κάτω παύλες επιτρέπονται για πρόσθετους χαρακτήρες _
Μεταβλητή $ - Το κυριλλικό επιτρέπεται από την τεκμηρίωση php αλλά δεν συνιστάται
$ var iable - τα κενά δεν μπορούν να χρησιμοποιηθούν

Σε κάθε μεταβλητή εκχωρείται μια τιμή. Για να εκχωρήσετε μια τιμή, χρησιμοποιήστε το σύμβολο = (ίσον). Κατά την επεξεργασία του σεναρίου, η τιμή της μεταβλητής μπορεί να αλλάζει επανειλημμένα ανάλογα με διαφορετικές συνθήκες.

$ city = "Μόσχα"; // στη μεταβλητή $ city εκχωρήθηκε μια τιμή συμβολοσειράς (σε εισαγωγικά) Moscow
$ έτος = 1147; // και στη μεταβλητή $ έτος αποδόθηκε η αριθμητική τιμή 1147
?>

$ name = "Alexander";
$ Όνομα = "Alexey";
echo "$ name, $ Name"; // εμφανίζει "Alexander, Alexey"
?>

Έξοδος μεταβλητής PHP

Ξεχωριστά, θα πρέπει να εξετάσετε τον τρόπο εμφάνισης μεταβλητών χρησιμοποιώντας τελεστές εξόδου, το έργο του οποίου εξετάσαμε στο τελευταίο μάθημα, Δημιουργία σελίδας PHP. Χειριστές εξόδου. ... Παρακάτω θα δώσω μια σειρά από ενδεικτικά παραδείγματα με σχόλια.

// Έτσι εκχωρούμε τιμές σε μεταβλητές
$ name1 = "Alexey";
$ name2 = "Alexander";

// Εμφάνιση μεταβλητών
echo $ name2; // Έξοδος: Alexander
echo "όνομα1 είναι $ όνομα1"; // το όνομα1 είναι ο Alexey

// Όταν χρησιμοποιείτε μεμονωμένα εισαγωγικά, η έξοδος είναι
// όνομα μεταβλητής, όχι τιμή
echo "όνομα1 είναι $ όνομα1"; // εκτυπώνει: το όνομα1 είναι $όνομα1

// μπορείτε απλά να εμφανίσετε τις τιμές των μεταβλητών
echo $ name1; // Αλεξέι
echo $ name1, $ name2; // Alexey Alexander
echo $ name1. "". $ name2; // Alexey Alexander
ηχώ "$ name1, $ name2"; // Alexey, Alexander

Ηχώ<<Αυτό χρησιμοποιεί τη σύνταξη "εδώ έγγραφο" για έξοδο
πολλαπλές γραμμές με αντικατάσταση μεταβλητής $.
ΤΕΛΟΣ;

Λειτουργίες μεταβλητής PHP

Αριθμητικές πράξεις στην PHP
Στην περίπτωση αριθμητικών τιμών, μπορείτε να εκτελέσετε αριθμητικές πράξεις: πρόσθεση, αφαίρεση, πολλαπλασιασμό και ούτω καθεξής.

- $ α(άρνηση) Αλλάξτε το πρόσημο του $ a.
$ a + $ β(προσθήκη) Το άθροισμα των $ a και $ b.
$ a - $ β(αφαίρεση) Διαφορά μεταξύ $ a και $ b.
$ a * $ β(πολλαπλασιασμός) Το γινόμενο των $ a και $ b.
$ a / $ β(διαίρεση) Το πηλίκο του $ a διαιρούμενο με το $ b.
$ a% $ β(διαίρεση αρθρώσεων) Το ακέραιο υπόλοιπο του $ a διαιρούμενο με το $ b.
Ας δούμε παραδείγματα

$ a = 2; // Σημείωση, στην περίπτωση αριθμών, τα εισαγωγικά δεν χρησιμοποιούνται
$ b = 3; // Σημείωση, στην περίπτωση αριθμών, τα εισαγωγικά δεν χρησιμοποιούνται

$ αποτέλεσμα = $ a + $ b; // προσθήκη μεταβλητών
echo $ αποτέλεσμα? // θα εκτυπώσει 5

$ αποτέλεσμα = $ b - $ a; // προσθήκη μεταβλητών
echo $ αποτέλεσμα? // θα βγει 1

Πράξεις αύξησης και μείωσης στην PHP
Αυτές οι λειτουργίες θα είναι χρήσιμες κυρίως κατά την κατασκευή βρόχων, για τους οποίους θα μιλήσουμε λίγο αργότερα.
Πρόθεμα- τελεστές γραμμένοι ΠΡΙΝ τη μεταβλητή ( - $ α; ++ $ α). Επιστρέφει την τιμή της μεταβλητής πριν από την αλλαγή.
Postfix- τελεστές γραμμένοι μετά τη μεταβλητή ( $ a--; $ a--). Επιστρέφει την τροποποιημένη τιμή της μεταβλητής.
Αύξηση- αύξηση της αξίας.
Μείωση- μείωση της αξίας.

++ $ αΑύξηση προθέματος. Αυξάνει το $ a κατά ένα και επιστρέφει την τιμή του $ a.
$ a ++Αύξηση Postfix. Επιστρέφει την τιμή του $ a και στη συνέχεια αυξάνει το $ a κατά ένα.
- $ αΜείωση προθέματος. Μειώνει το $ a κατά ένα και επιστρέφει την τιμή του $ a.
$ a--Μείωση Postfix. Επιστρέφει την τιμή του $ a και στη συνέχεια μειώνει το $ a κατά ένα.
ηχώ "

Αύξηση Postfix

";
$ a = 5;
echo "Should be 5:". $ a ++. "\ n";

Ηχώ "

Αύξηση προθέματος

";
$ a = 5;
echo "Should be 6:". ++ $ α. "\ n";
echo "Should be 6:". $ α. "\ n";

Ηχώ "

Μείωση Postfix

";
$ a = 5;
echo "Should be 5:". $ a--. "\ n";

Ηχώ "

Μείωση προθέματος

";
$ a = 5;
echo "Should be 4:". - $ α. "\ n";
echo "Should be 4:". $ α. "\ n";
?>

Λειτουργίες ανάθεσης PHP
Βασικός χειριστήςμοιάζει με = ... Με την πρώτη ματιά, μπορεί να φαίνεται ότι αυτός ο χειριστής είναι ίσος. Στην πραγματικότητα, αυτό δεν ισχύει. Στην πραγματικότητα, ο τελεστής εκχώρησης σημαίνει ότι ο αριστερός τελεστής έχει οριστεί στην τιμή της δεξιάς παράστασης, (δηλαδή, ορίζεται στην τιμή που προκύπτει). Συνδυασμένοι χειριστές- αυτοί είναι τελεστές που σας επιτρέπουν να χρησιμοποιήσετε τις προηγούμενες τιμές των μεταβλητών για επόμενες λειτουργίες (προσάρτηση σε μια μεταβλητή συμβολοσειράς (με κείμενο) ή να προσθέσετε αριθμητικές τιμές).

$ a = ($ b = 2) + 4; // αποτέλεσμα: το $ a ορίζεται σε 6, το $ b ορίζεται σε 2.

$ a = 2;
$ a + = 3; // ορίζει το $ a σε 5, παρόμοια με τη γραφή: $ a = $ a + 3;
$ b = "Γεια";
$ β. = "Ειρήνη!"; Το // ορίζει το $ b σε "Hello World!" όπως και το $ b = $ b. "Εκεί!";

Υπάρχουν επίσης εργασίες σύγκρισηςκαι σπαζοκεφαλιά, αλλά θα μιλήσουμε για αυτά στα επόμενα μαθήματα. Θα προσπαθήσω να μην σας τρομάξω με πολλές πληροφορίες αμέσως!)

Σίγουρα έχετε ντουλάπα ή συρταριέρα στο σπίτι. Η αρχή της χρήσης τους είναι απλή: βάζουμε εκεί πράγματα που δεν χρειαζόμαστε αυτή τη στιγμή, αλλά μπορεί να χρειαστούν μετά από λίγο.

Οι μεταβλητές λειτουργούν με τον ίδιο τρόπο. Μπορείτε να βάλετε κάποια αξία σε αυτά και να τα αποθηκεύσετε εκεί μέχρι να τα χρειαστείτε.

Δημιουργία μεταβλητών

Μπορείτε να βάλετε μια τιμή σε μια μεταβλητή ως εξής:

Στον παραπάνω κώδικα, δημιουργήσαμε τη μεταβλητή $ name και βάλαμε την τιμή του Ivan σε αυτήν, στη συνέχεια δημιουργήσαμε τη μεταβλητή $ age και της εκχωρήσαμε την τιμή 20.

Το όνομα "μεταβλητή" σημαίνει ότι η τιμή της μπορεί να αλλάξει κατά την εκτέλεση του σεναρίου:

Σε ορισμένες γλώσσες, μια μεταβλητή πρέπει πρώτα να "δηλωθεί" και μετά να χρησιμοποιηθεί. Δεν υπάρχει δήλωση στην PHP - μια μεταβλητή δημιουργείται τη στιγμή που της βάζετε μια τιμή.
Ωστόσο, οι προγραμματιστές PHP συχνά λένε "declare variable" αντί για "create variable".

Επίσης, αντί να "βάλουν μια τιμή σε μια μεταβλητή", συχνά λένε "να εκχωρήσετε μια τιμή".
Ο λόγος είναι απλός - το σύμβολο =, χάρη στο οποίο αποθηκεύουμε μια τιμή σε μια μεταβλητή, ονομάζεται "τελεστής εκχώρησης". Εξ ου και ο όρος «κατάλληλος».

Κανόνες ονομασίας μεταβλητών

1. Το όνομα μιας μεταβλητής αρχίζει με ένα σύμβολο $.

2. Ο δεύτερος χαρακτήρας μπορεί να είναι ένα γράμμα ή μια υπογράμμιση _

Τα ονόματα των μεταβλητών κάνουν διάκριση πεζών-κεφαλαίων. Το $ name και το $ Name είναι διαφορετικές μεταβλητές.

Εμφάνιση της τιμής μιας μεταβλητής στην οθόνη

Μπορείτε να εμφανίσετε μια μεταβλητή χρησιμοποιώντας την εντολή echo που ήδη γνωρίζουμε:

Η εντολή echo σάς επιτρέπει να εκτυπώνετε πολλές τιμές στην οθόνη ταυτόχρονα:

Παρατηρήστε ότι περάσαμε 2 τιμές στο echo, διαχωρισμένες με κόμμα. Έτσι μπορούμε να μεταφέρουμε όσες τιμές θέλουμε. Τα ακόλουθα δύο παραδείγματα θα παράγουν το ίδιο αποτέλεσμα:

Υπάρχει επίσης μια σύντομη σύνταξη για την έξοδο μεταβλητών στην PHP. Αντί

Πριν από την PHP 5.4, η σύνταξη συντομογραφίας λειτουργούσε μόνο όταν η οδηγία short_open_tag ήταν ενεργοποιημένη στις ρυθμίσεις PHP, η οποία επιτρέπει επίσης τη χρήση της ετικέτας ανοίγματος συντομογραφίας

Έλεγχος της τιμής μιας μεταβλητής

Η εντολή echo δεν είναι πάντα βολική για τον έλεγχο της τρέχουσας τιμής μιας μεταβλητής. Για παράδειγμα, εάν προσπαθήσετε να εμφανίσετε μια κενή συμβολοσειρά, δεν θα εμφανιστεί τίποτα στην οθόνη. Και δεν είναι σαφές ποιος είναι ο λόγος - μια κενή μεταβλητή ή ο κωδικός που δεν λειτουργεί.

Επομένως, η συνάρτηση var_dump () χρησιμοποιείται για τον έλεγχο της τιμής μιας μεταβλητής:

Το αποτέλεσμα της εκτέλεσης του σεναρίου:

Συμβολοσειρά (5) Συμβολοσειρά "Vasya" (0) ""

Όπως μπορείτε να δείτε, η PHP δεν εμφάνιζε μόνο τα περιεχόμενα της μεταβλητής, αλλά και τον αριθμό των χαρακτήρων, ακόμη και τον τύπο της μεταβλητής (string). Θα ρίξουμε μια πιο προσεκτική ματιά στους τύπους δεδομένων στα επόμενα μαθήματα.

Διαγραφή μεταβλητών

Μπορείτε να διαγράψετε μια υπάρχουσα μεταβλητή χρησιμοποιώντας τη συνάρτηση unset ():

Τώρα ήρθε η ώρα να εξασκηθείτε λίγο.

Θυμηθείτε, σχεδόν κάθε εργασία PHP μπορεί να έχει πολλές λύσεις. Επομένως, εάν οι αποφάσεις σας διαφέρουν από αυτές που γράφτηκαν σε αυτόν τον ιστότοπο, αυτό δεν σημαίνει καθόλου ότι κάνατε κάτι λάθος.

Γράψτε ένα σενάριο που:
1. Δημιουργεί μεταβλητές με τίτλους τίτλους και περιεχόμενο και ορισμένες τιμές.
2. Εξάγει την τιμή της μεταβλητής τίτλου μέσα στην ετικέτα h1 και την τιμή της μεταβλητής περιεχομένου μέσα στην ετικέτα div.

Δείξε λύση

", τίτλος $,""; ηχώ"

", περιεχόμενο $,"
"; ?>

Θα ήθελα να επιστήσω την προσοχή σας στο γεγονός ότι αυτή η απόφαση δεν είναι η μόνη σωστή. Για παράδειγμα, ο παρακάτω κώδικας θα παράγει το ίδιο αποτέλεσμα:

πριν 13 χρόνια

Λίγη προσοχή που πρέπει να προσέξετε:

Εάν απενεργοποιήσετε το RegisterGlobals και τα σχετικά, στη συνέχεια χρησιμοποιήστε το get_defined_vars (), μπορεί να δείτε κάτι σαν το εξής:

Πίνακας
[GLOBALS] => Πίνακας
[GLOBALS] => Πίνακας
* ΑΝΑΛΗΨΗ *
[_POST] => Πίνακας ()
[_GET] => Πίνακας ()
[_COOKIE] => Πίνακας ()
[_FILES] => Πίνακας ()
)

[_POST] => Πίνακας ()
[_GET] => Πίνακας ()
[_COOKIE] => Πίνακας ()
[_FILES] => Πίνακας ()

)
?>

Παρατηρήστε ότι ο $ _SERVER δεν υπάρχει. Φαίνεται ότι η php φορτώνει τον υπερσφαιρικό $ _SERVER μόνο εάν χρησιμοποιείται κάπου. Μπορείτε να κάνετε το εξής:

Τυπώνω "

". htmlspecialchars (print_r (get_defined_vars (), true))."
" ;
Τυπώνω "
". htmlspecialchars (print_r ($ _SERVER, true))."
" ;
?>

Και τότε ο $ _SERVER θα εμφανιστεί και στις δύο λίστες. Υποθέτω ότι "δεν είναι πραγματικά μια γοητεία, γιατί τίποτα κακό δεν θα συμβεί σε καμία περίπτωση, αλλά είναι μια ενδιαφέρουσα περιέργεια.

6 χρόνια πριν

Εφόσον το get_defined_vars () λαμβάνει τις μεταβλητές μόνο στο σημείο που καλείτε τη συνάρτηση, υπάρχει ένας απλός τρόπος για να λάβετε τις μεταβλητές που ορίζονται στο τρέχον πεδίο.

// Η κορυφή του σεναρίου php σας
$ vars = get_defined_vars ();

// Τώρα κάνε τα πράγματά σου
$ foo = "foo";
$ bar = "bar";

// Λάβετε όλες τις μεταβλητές που ορίζονται στο τρέχον εύρος
$ vars = array_diff (get_defined_vars (), $ vars);

ηχώ "

"
;
print_r ($ vars);
ηχώ "
" ;
?>

15 χρόνια πριν

Εδώ είναι μια συνάρτηση που δημιουργεί μια αναφορά εντοπισμού σφαλμάτων για προβολή ή email
χρησιμοποιώντας get_defined_vars. Εξαιρετικό για λήψη λεπτομερούς στιγμιότυπου χωρίς
στηρίζονται στις εισροές των χρηστών.

συνάρτηση generateDebugReport (μέθοδος $, $ defined_vars, $ email = "undefined") (
// Λειτουργία δημιουργίας αναφοράς εντοπισμού σφαλμάτων για εμφάνιση ή email.
// Χρήση: generateDebugReport (μέθοδος, get_defined_vars (), email);
// Όπου η μέθοδος είναι "browser" ή "email".

// Δημιουργήστε μια λίστα παράβλεψης για τα κλειδιά που επιστρέφονται από το "get_defined_vars".
// Για παράδειγμα, τα HTTP_POST_VARS, HTTP_GET_VARS και άλλα είναι
// περιττό (ίδιο με _POST, _GET)
// Συμπεριλάβετε επίσης vars που θέλετε να αγνοηθούν για λόγους ασφαλείας - π.χ. PHPSESSID.
$ ignorelist = πίνακας ("HTTP_POST_VARS", "HTTP_GET_VARS",
"HTTP_COOKIE_VARS", "HTTP_SERVER_VARS",
"HTTP_ENV_VARS", "HTTP_SESSION_VARS",
"_ENV", "PHPSESSID", "SESS_DBUSER",
"SESS_DBPASS", "HTTP_COOKIE");

$ timestamp = ημερομηνία ("m / d / y h: m: s");
$ message = "Η αναφορά εντοπισμού σφαλμάτων δημιουργήθηκε $ timestamp \ n";

// Λάβετε το τελευταίο σφάλμα SQL για καλή μέτρηση, όπου ο σύνδεσμος $ είναι το αναγνωριστικό πόρων
// για mysql_connect. Σχολιάστε ή τροποποιήστε τη βάση δεδομένων σας ή τη ρύθμιση αφαίρεσης.
παγκόσμιος σύνδεσμος $;
$ sql_error = mysql_error ($ σύνδεσμος);
εάν ($ sql_error) (
$ message. = "\ nΜηνύματα Mysql: \ n". mysql_error ($ σύνδεσμος);
}
// Τέλος MySQL

// Θα μπορούσε να χρησιμοποιήσει μια αναδρομική συνάρτηση εδώ. Καταλαβαίνετε την ιδέα ;-)
foreach ($ defined_vars ως κλειδί $ => $ val) (
if (is_array ($ val) &&! in_array ($ key, $ ignorelist) && count ($ val)> 0) (
$ μήνυμα. = "\ n $ πίνακας κλειδιών (κλειδί = τιμή): \ n";
foreach ($ val ως $ δευτερεύον κλειδί => $ subval) (
if (! in_array ($ δευτερεύον κλειδί, $ ignorelist) &&! is_array ($ subval)) (
$ μήνυμα. = δευτερεύον κλειδί $. "=". $ υποτιμ. "\ n";
}
elseif (! in_array ($ δευτερεύον κλειδί, $ ignorelist) && is_array ($ subval)) (
foreach ($ subval as $ subsubkey => $ subsubval) (
if (! in_array ($ subsubkey, $ ignorelist)) (
$ μήνυμα. = $ δευτερεύον κλειδί. "=". $ υποτιμή. "\ n" ;
}
}
}
}
}
elseif (!
is_array ($ val) &&! in_array (κλειδί $, $ ignorelist) && $ val) (
$ μήνυμα. = "\ nΜεταβλητή". κλειδί $. "=". $ val. "\ n";
}
}

Εάν (μέθοδος $ == "πρόγραμμα περιήγησης") (
echo nl2br ($ μήνυμα);
}
elseif (μέθοδος $ == "email") (
εάν ($ email == "μη καθορισμένο") (
$ email = $ _SERVER ["SERVER_ADMIN"];
}

$ mresult = mail ($ email, "Αναφορά εντοπισμού σφαλμάτων για". $ _ENV ["HOSTNAME"]. "", $ μήνυμα);
αν ($ mresult == 1) (
ηχώ "Η αναφορά εντοπισμού σφαλμάτων στάλθηκε με επιτυχία. \ N";
}
αλλο (
ηχώ "Αποτυχία αποστολής αναφοράς εντοπισμού σφαλμάτων. \ N";
}
}
}
?>

πριν 17 χρόνια

Απλή ρουτίνα για τη μετατροπή ενός αντικειμένου get_defined_vars σε XML.

συνάρτηση obj2xml ($ v, $ εσοχή = "") (
ενώ (λίστα (κλειδί $, $ val) = κάθε ($ v)) (
αν (κλειδί $ == "__attr") συνεχίσει;
// Ελέγξτε για __attr
if (is_object ($ val -> __attr)) (
ενώ (λίστα ($ key2, $ val2) = καθένα ($ val -> __attr)) (
$ attr. = "$ key2 = \" $ val2 \ "";
}
}
else $ attr = "";
if (is_array ($ val) || is_object ($ val)) (
εκτύπωση ("εσοχή $< $key$attr >\ n ");
obj2xml ($ val, $ εσοχή. "");
εκτύπωση ("εσοχή $\ n ");
}
else print ("εσοχή $< $key$attr >$ val\ n ");
}
}

// Παράδειγμα αντικειμένου
$ x -> name -> first = "John";
$ x -> όνομα -> τελευταίο = "Smith";
$ x -> arr ["Fruit"] = "Μπανάνα";
$ x -> arr ["Veg"] = "Καρότο";
$ y -> πελάτης = $ x;
$ y -> πελάτης -> __attr -> id = "176C4";

$ z = get_defined_vars ();
obj2xml ($ z ["y"]);
?>
θα βγει:


Γιάννης
Σιδηρουργός


Μπανάνα
Καρότο

πριν 11 χρόνια

Ως σημείωση, το get_defined_vars () δεν επιστρέφει ένα σύνολο αναφορών μεταβλητών (όπως ήλπιζα). Για παράδειγμα:

// ορίστε μια μεταβλητή
$ my_var = "foo";

// λάβετε τη λίστα με τις καθορισμένες μεταβλητές
$ defined_vars = get_defined_vars ();

// τώρα προσπαθήστε να αλλάξετε την τιμή μέσω του πίνακα που επιστράφηκε
$ defined_vars ["my_var"] = "bar";

echo $ my_var, "\ n";

?>

θα βγει "foo" (η αρχική τιμή). Θα ήταν ωραίο αν το get_defined_vars () είχε ένα προαιρετικό όρισμα για να τους κάνει αναφορές, αλλά φαντάζομαι ότι είναι ένα μάλλον εξειδικευμένο αίτημα. Μπορείτε να το κάνετε μόνοι σας (λιγότερο βολικά) με κάτι σαν:

$ defined_vars = πίνακας ();
$ var_names = array_keys (get_defined_vars ());

foreach ($ var_names ως $ var_name)
{
$ defined_vars [$ var_name] = & $ $ var_name;
}

?>

Πριν 1 χρόνο

Δημοσίευσα εδώ πριν σχετικά με το "αυτό" στο get_defined_vars.

Αποδεικνύεται ότι "δεν είναι πάντα εκεί, αλλά σε ορισμένες περιπτώσεις θα εμφανίζεται ανεξήγητα.

Php -r "
Τεστ τάξης (
δημόσια συνάρτηση a () (var_dump (πλήκτρα_συστοιχίας (get_defined_vars ())), $ a = 123;)
δημόσια συνάρτηση b () (var_dump (πλήκτρα_συστοιχίας (get_defined_vars ())); $ αυτό;)
}
$ t = νέα δοκιμή ();
$ t-> a ();
$ t-> b ();
"

Πίνακας ()
πίνακας ("αυτό")

Αυτό δεν συμβαίνει στην PHP 7.2 αλλά θα συμβεί στην PHP 5.6.

Πριν 1 χρόνο

Ορισμένα σχόλια εδώ επισημαίνουν ότι αυτή η συνάρτηση δεν επιστρέφει αναφορές. Ωστόσο, επιστρέφει ονόματα και τα ονόματα είναι "αναφορές".

Δεν θα συνιστούσα τις προτάσεις εδώ που το μετατρέπουν σε αναφορές.

Δημόσια συνάρτηση x ($ a, $ b, $ c) (
foreach (κλειδί_πίνακα (get_defined_vars ()) ως κλειδί $)
αν (κλειδί $! == "αυτό")
$ αυτό-> y ($ (κλειδί $));
}

Δημόσια συνάρτηση y (& είσοδος $) (
$ εισαγωγή ++;
}

Αντί για $ () μπορείτε επίσης να χρησιμοποιήσετε $$.

Έχω κάνει μερικά παράξενα πράγματα στον καιρό μου για να φτιάξω εξαιρετικά γενικό κώδικα, αλλά "δεν χρειάστηκε ποτέ να κάνω κάτι σαν το παραπάνω. Μπορεί να μην λειτουργεί καν (αλλά θα έπρεπε, αφού δεν διαφέρει από το κλειδί $ a [$]).

Θα μπορούσατε επίσης να κάνετε το πλήκτρο $$ ++, αλλά δεν έχω δει ποτέ τέτοιο κώδικα που να μην ήταν τρομερά κακός (χρησιμοποιώντας το δυναμικό όπου το δυναμικό δεν είναι ωφέλιμο).

Εάν κάνετε κάτι τέτοιο, τότε δώστε το επιπλέον έλεγχο.

Αυτό το μάθημα διερευνά το εύρος των μεταβλητών της PHP. Εξηγεί τη διαφορά μεταξύ τοπικών και καθολικών εμβέλειας, δείχνει πώς να αποκτήσετε πρόσβαση σε καθολικές μεταβλητές μέσα σε μια συνάρτηση, πώς να εργαστείτε με superglobals και πώς να δημιουργήσετε στατικές μεταβλητές.

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

Τι είναι το πεδίο εφαρμογής;

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

  • Η παγκόσμια- οι μεταβλητές είναι προσβάσιμες οπουδήποτε στο σενάριο
  • Τοπικός- Οι μεταβλητές είναι προσβάσιμες μόνο μέσα στη συνάρτηση στην οποία ορίστηκαν

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

Οι μεταβλητές που έχουν καθολική εμβέλεια λέγονται καθολικές και οι μεταβλητές με τοπικό εύρος ονομάζονται τοπικές.

Ακολουθεί ένα παράδειγμα του πώς λειτουργούν οι καθολικές και οι τοπικές μεταβλητές.

";) sayHello (); echo" Τιμή \ $ globalName: "$ globalName"
"; echo" Τιμή \ $ localName: "$ localName"
"; ?>

Γεια σου Χάρι! $ GlobalName value: "Zoe" $ localName value: ""

Σε αυτό το σενάριο, έχουμε δημιουργήσει δύο μεταβλητές:

  • $ globalName- αυτό μια παγκόσμιαμεταβλητός
  • $ localName- αυτό τοπικόςμια μεταβλητή που δημιουργείται μέσα στη συνάρτηση sayHello ().

Μετά τη δημιουργία της μεταβλητής και της συνάρτησης, το σενάριο καλεί το sayHello (), το οποίο βγάζει "Hello Harry!" ... Στη συνέχεια, το σενάριο προσπαθεί να επαναλάβει τις τιμές των δύο μεταβλητών. Να τι συμβαίνει:

  • Επειδή $ globalNameδημιουργήθηκε εκτός της συνάρτησης, είναι διαθέσιμο οπουδήποτε στο σενάριο, οπότε εμφανίζεται το "Zoya".
  • $ localNameθα είναι διαθέσιμο μόνο μέσα στη λειτουργία sayHello (). Δεδομένου ότι η έκφραση echo βρίσκεται εκτός της συνάρτησης, η PHP δεν επιτρέπει την πρόσβαση στην τοπική μεταβλητή. Αντίθετα, η PHP υποθέτει ότι ο κώδικας θα δημιουργήσει μια νέα μεταβλητή με το όνομα $ localName, η οποία θα λάβει μια προεπιλεγμένη τιμή μιας κενή συμβολοσειράς. Αυτός είναι ο λόγος για τον οποίο η δεύτερη κλήση στο echo εκτυπώνει την τιμή "" για τη μεταβλητή $ localName.

Πρόσβαση σε καθολικές μεταβλητές μέσα σε μια συνάρτηση

Για πρόσβαση σε μια καθολική μεταβλητή εκτός λειτουργίαςαπλά γράψε το όνομά της. Αλλά για πρόσβαση στην καθολική μεταβλητή εσωτερική λειτουργία, πρέπει πρώτα να δηλώσετε τη μεταβλητή ως καθολική στη συνάρτηση χρησιμοποιώντας την καθολική λέξη-κλειδί:

Συνάρτηση myFunction () (καθολική $ globalVariable; // Πρόσβαση στην καθολική μεταβλητή $ globalVariable)

Εάν δεν το κάνετε, η PHP υποθέτει ότι δημιουργείτε ή χρησιμοποιείτε μια τοπική μεταβλητή.

Ακολουθεί ένα παράδειγμα σεναρίου που χρησιμοποιεί μια καθολική μεταβλητή μέσα σε μια συνάρτηση:

"; global $ globalName; echo" Γεια σας $ globalName!
";) sayHello ();?>

Όταν εκτελεστεί, το σενάριο θα βγει:

Γεια σου Χάρι! Γεια σου Zoya!

Η συνάρτηση sayHello () χρησιμοποιεί την καθολική λέξη-κλειδί για να δηλώσει τη μεταβλητή $ globalName ως καθολική. Στη συνέχεια, μπορεί να έχει πρόσβαση στη μεταβλητή και να εμφανίσει την τιμή της ("Zoya").

Τι είναι τα superglobals;

Η PHP έχει ένα ειδικό σύνολο προκαθορισμένων καθολικών πινάκων που περιέχουν διάφορες πληροφορίες. Τέτοιοι πίνακες ονομάζονται υπερκοσμικοί,δεδομένου ότι είναι προσβάσιμες από οπουδήποτε στο σενάριο, συμπεριλαμβανομένου του εσωτερικού χώρου λειτουργιών, και δεν χρειάζεται να οριστούν χρησιμοποιώντας την καθολική λέξη-κλειδί.

Ακολουθεί μια λίστα με τα superglobals που είναι διαθέσιμα στην PHP 5.3:

  • $ GLOBALS - λίστα με όλες τις καθολικές μεταβλητές στο σενάριο (εξαιρουμένων των superglobals)
  • $ _GET - περιέχει μια λίστα με όλα τα πεδία φόρμας που υποβάλλονται από το πρόγραμμα περιήγησης χρησιμοποιώντας ένα αίτημα GET
  • $ _POST - περιέχει μια λίστα με όλα τα πεδία φόρμας που υποβάλλονται από το πρόγραμμα περιήγησης χρησιμοποιώντας ένα αίτημα POST
  • $ _COOKIE - περιέχει μια λίστα με όλα τα cookies που αποστέλλονται από το πρόγραμμα περιήγησης
  • $ _REQUEST - περιέχει όλους τους συνδυασμούς κλειδιών/τιμών που περιέχονται στους πίνακες $ _GET, $ _POST, $ _COOKIE
  • $ _FILES - περιέχει μια λίστα με όλα τα αρχεία που έχουν φορτωθεί από το πρόγραμμα περιήγησης
  • $ _SESSION - σας επιτρέπει να αποθηκεύετε και να χρησιμοποιείτε μεταβλητές περιόδου λειτουργίας για το τρέχον πρόγραμμα περιήγησης
  • $ _SERVER - περιέχει πληροφορίες σχετικά με τον διακομιστή, όπως το όνομα αρχείου του σεναρίου που εκτελείται και τη διεύθυνση IP του προγράμματος περιήγησης.
  • $ _ENV - Περιέχει μια λίστα μεταβλητών περιβάλλοντος που μεταβιβάζονται στην PHP, για παράδειγμα μεταβλητές CGI.
Για παράδειγμα, μπορείτε να χρησιμοποιήσετε το $ _GET για να λάβετε τις τιμές των μεταβλητών που περικλείονται στη συμβολοσειρά URL του αιτήματος σεναρίου και να τις εμφανίσετε στη σελίδα:

Εάν εκτελέσετε το παραπάνω σενάριο με τη συμβολοσειρά URL http://www.example.com/script.php?yourName=Fred, θα βγει:

Γεια Fred!

Προειδοποίηση!Σε ένα πραγματικό σενάριο, δεν πρέπει ποτέ να χρησιμοποιείτε τέτοια μεταφορά δεδομένων λόγω ασθενούς ασφάλειας. Θα πρέπει πάντα να ελέγχετε ή να φιλτράρετε τα δεδομένα σας.

Το $ GLOBALS superglobal είναι πολύ βολικό στη χρήση γιατί σας επιτρέπει να οργανώσετε την πρόσβαση σε καθολικές μεταβλητές σε μια συνάρτηση χωρίς να χρειάζεται να χρησιμοποιήσετε την καθολική λέξη-κλειδί. Για παράδειγμα:

";) sayHello (); // Εκτυπώνει" Γεια σου, Ζωή! "?>

Στατικές μεταβλητές: βρίσκονται κάπου κοντά

Όταν δημιουργείτε μια τοπική μεταβλητή μέσα σε μια συνάρτηση, αυτή υπάρχει μόνο όταν εκτελείται η συνάρτηση. Όταν τελειώσει η συνάρτηση, η τοπική μεταβλητή εξαφανίζεται. Όταν καλείται ξανά η συνάρτηση, δημιουργείται μια νέα τοπική μεταβλητή.

Αυτό λειτουργεί εξαιρετικά στις περισσότερες περιπτώσεις. Με αυτόν τον τρόπο οι συναρτήσεις είναι αυτόνομες και λειτουργούν πάντα το ίδιο κάθε φορά που καλούνται.

Ωστόσο, υπάρχουν περιπτώσεις όπου θα ήταν βολικό να δημιουργήσετε μια τοπική μεταβλητή που "θυμάται" την τιμή της μεταξύ των κλήσεων συναρτήσεων. Μια τέτοια μεταβλητή ονομάζεται στατική.

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

Συνάρτηση myFunction () (στατική $ myVariable = 0;)

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


"; echo createWidget ()." έχουμε ήδη δημιουργήσει.
"; echo createWidget ()." έχουμε ήδη δημιουργήσει.>
"; ?>

Όμως, δεδομένου ότι η μεταβλητή $ numWidgets δημιουργείται κάθε φορά που καλείται η συνάρτηση, θα έχουμε το ακόλουθο αποτέλεσμα:

Δημιουργούμε μερικά widget ... 1 έχουμε ήδη δημιουργήσει. 1 έχουμε ήδη δημιουργήσει. 1 έχουμε ήδη δημιουργήσει.

Αλλά χρησιμοποιώντας μια στατική μεταβλητή, μπορούμε να αποθηκεύσουμε την τιμή από τη μία κλήση συνάρτησης στην επόμενη:

"; echo createWidget ()." έχουμε ήδη δημιουργήσει.
"; echo createWidget ()." έχουμε ήδη δημιουργήσει.
"; echo createWidget ()."> έχουμε ήδη δημιουργήσει.
"; ?>

Το σενάριο θα παράγει τώρα την αναμενόμενη έξοδο:

Δημιουργούμε μερικά widget ... 1 έχουμε ήδη δημιουργήσει. 2 έχουμε ήδη δημιουργήσει. 3 έχουμε ήδη δημιουργήσει.

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

Αυτό είναι όλο! Ελέγχετε συχνά την τεκμηρίωση της PHP.