Ασχολείστε με τη δημιουργία και την προώθηση ενός ιστότοπου υπό τον έλεγχο του CMS Joomlaκαι ξαφνικά έχεις την ανάγκη να κάνεις remake με το γούστο και τη διάθεσή σου σχεδιάζοντας το υλικό με επεξεργασία των τυπικών προτύπων του στοιχείου com_content? Το στοιχείο είναι υπεύθυνο για τη δημιουργία περιεχομένου. Ας ρίξουμε μια ματιά στη δομή του ίδιου του στοιχείου.

Θέση του τυπικού προτύπου υλικού

Αρχικά αρχεία στοιχείων com_contentπου βρίσκεται στο components\com_content\views\View\tmpl. Εάν τα αρχεία στοιχείων αντιγράφονται στον κατάλογο \templates\template\html\com_content\ που χρησιμοποιείτε, τότε το πρότυπο υλικού θα ληφθεί από τα αρχεία αυτού του φακέλου.

Καταλόγους και αρχεία προτύπων

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

ντοσιέ αρχείο

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

ντοσιέ άρθρο - Υλικό

ντοσιέ εξώφυλλο - Κύρια σελίδα

  • προεπιλογή.phpΊδια αρχή με την κατηγορία\blog.php;
  • default_item.phpΊδια αρχή με την κατηγορία\blog_item.php;
  • default_links.phpΊδια αρχή με την κατηγορία\blog_links.php;

ντοσιέ Ενότητα - Κεφάλαιο

  • blog.phpΠρότυπο ιστολογίου ενότητας. Ίδια αρχή με την κατηγορία\blog.php;
  • blog_item.phpΈνα πρότυπο για ένα ξεχωριστό άρθρο από την ενότητα του ιστολογίου. Ίδια αρχή με την κατηγορία\blog_item.php;
  • blog_links.phpΠρότυπο για την παρουσίαση συνδέσμων κάτω από την ενότητα ιστολόγιο. Ίδια αρχή με την κατηγορία\blog_links.php;
  • προεπιλογή.phpΤυπικό πρότυπο ενότητας. Εμφανίζει τον τίτλο της κατηγορίας, την περιγραφή της, τον αριθμό των στοιχείων. Αφού κάνετε κλικ στον τίτλο της κατηγορίας, η σελίδα επεξεργάζεται κατά κατηγορία\default.php;

Ένα παράδειγμα επεξεργασίας προτύπου. Εμφανίζει τον αριθμό των προβολών του υλικού.

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

item->επιτυχίες ?>

Τώρα πρέπει να βρείτε στο αρχείο προτύπου κατηγορίας\blog_item.php το μέρος όπου θα εισαγάγετε αυτόν τον κώδικα. Για παράδειγμα, πριν εμφανιστεί η ημερομηνία της τελευταίας επεξεργασίας του υλικού. Ψάχνετε για τη γραμμή:

item->modified) !=0 && $this->item->params->get("show_modify_date")) : ?>

Και πριν από αυτό, εισάγετε μια γραμμή με τον κωδικό.

Παράδειγμα καταχώριση κατηγοριών σε πολλές στήλες .

Δείτε ακούσια ... Λεξικό ρωσικών συνωνύμων και εκφράσεων παρόμοιας σημασίας. υπό. εκδ. N. Abramova, M .: Russian λεξικά, 1999. ασυνείδητα από ένστικτο, χωρίς να το καταλάβω, αυθόρμητα, πανικόβλητος, ενστικτωδώς, χωρίς να το καταλάβω, χωρίς να το καταλάβω, ... ... Συνώνυμο λεξικό

Ανεξήγητα, ενστικτωδώς, αυτόματα, αυθόρμητα, τυφλά. Εκ … Συνώνυμο λεξικό

Ακούσια, ασυνείδητα, ασυνείδητα, ενστικτωδώς, μηχανικά, μηχανικά, τυφλά, αυθόρμητα. τυχαία, ακούσια? Θέλει και μη, θέλει ή όχι (volens nolens), από ανάγκη Έπρεπε να το κάνει αυτό λόγω πραγμάτων που ήταν πέρα ​​από τον έλεγχό του... ... Συνώνυμο λεξικό

Τυφλά, υποσυνείδητα, ενδόμυχα, χωρίς να το καταλάβω, χωρίς να το συνειδητοποιήσω, αυθόρμητα, ασυνείδητα, χωρίς να το συνειδητοποιήσω, ασυνείδητα, μηχανικά, ασυνείδητα, ασυνείδητα, διαισθητικά, ασυνείδητα, έκτη αίσθηση, ενστικτωδώς Λεξικό των Ρώσων ... ... Συνώνυμο λεξικό

Δείτε ακούσια ... Λεξικό ρωσικών συνωνύμων και εκφράσεων παρόμοιας σημασίας. υπό. εκδ. N. Abramova, M .: Russian dictionaries, 1999. τυφλά ασυνείδητα, ακούσια; ακαθόριστα, απερίσκεπτα, ασυνείδητα, αυθόρμητα, ενστικτωδώς, δουλικά, ασυνείδητα, ασαφή, ... ... Συνώνυμο λεξικό

adv. στους ακαταλόγιστους. [Η μητέρα] ήθελε να γυρίσει πίσω, αλλά ασυναίσθητα πήγε ξανά μπροστά. Μ. Γκόρκι, Μητέρα. Ο [Judushka] παρακάλεσε την καλή του φίλη μητέρα να διαχειριστεί την περιουσία του σιωπηρά. Saltykov Shchedrin, κύριοι Golovlevs ... Μικρό Ακαδημαϊκό Λεξικό

UNREPORTABLE, unaccountable, uncountable; (κοντό αρσενικό δεν χρησιμοποιείται) ακαταλόγιστος, ακαταλόγιστος. 1. Δεν υπόκειται σε κανέναν έλεγχο, δεν υποχρεούται να αναφέρει. Αυτός σιωπηρά (επίρρ.) διέθεσε στο κατάστημα. 2. Δεν εξαρτάται από εύλογες εκτιμήσεις, ... ... ΛεξικόΟ Ουσάκοφ

- (Ελληνικά). Άτομο που του ανατίθεται να εμπορεύεται χωρίς να λογοδοτεί, σε βάρος άλλου προσώπου. Λεξικό ξένων λέξεων που περιλαμβάνονται στη ρωσική γλώσσα. Chudinov A.N., 1910. ANAGALIST Πρόσωπο στο οποίο ανατίθεται να εμπορεύεται σε βάρος άλλου ατόμου χωρίς ευθύνη. Εξήγηση…… Λεξικό ξένων λέξεων της ρωσικής γλώσσας

Αλόγιστα, ασυνείδητα, μηχανικά, ακούσια, αυτόματα, μηχανικά, αυτόματα, μηχανικά, αυτόματο πιλότο Λεξικό ρωσικών συνωνύμων. δείτε αυτόματα Λεξικό συνωνύμων της ρωσικής γλώσσας. Πρακτικός οδηγός. Μ.: Ρώσος... Συνώνυμο λεξικό

Δείτε ακούσια ... Λεξικό ρωσικών συνωνύμων και εκφράσεων παρόμοιας σημασίας. υπό. εκδ. N. Abramova, M.: Russian dictionaries, 1999. ενστικτωδώς, ασυνείδητα, ακούσια; ακούσια, ασυνείδητα, ενδόμυχα, αυθόρμητα, αυθόρμητα, ασυνείδητα, τυφλά, ... ... Συνώνυμο λεξικό

Βιβλία

  • Ταξίδι μέσω της Τσεχοσλοβακίας, J. Marko, M. Peterka, Πράγα, 1959. Άρτια. Με πολλές φωτογραφικές απεικονίσεις. Δέσμευση εκδότη. Η ασφάλεια είναι καλή. Ο μαγεμένος περιπλανώμενος οποιασδήποτε χώρας του κόσμου, εμβαθύνοντας σε αυτό το όμορφο βιβλίο, θα μπορέσει να ... Κατηγορία: Σημειώσεις περιηγητών, απομνημονεύματα, έρευνες Εκδότης: Artia,
  • Board, or Meetings on the Sennaya, Gennady Grigoriev, Sergey Nosov, Υπάρχουν μέρη στην Αγία Πετρούπολη που είναι απλά φαντασμαγορικά. Η πλατεία Sennaya είναι ένα από αυτά. "Sennaya - το λίκνο της φαντασμαγορίας". Οι ίδιοι οι συγγραφείς φαίνονται έκπληκτοι από αυτό που τους συνέβη στο Sennaya. Ναι και... Κατηγορία: Κλασική και σύγχρονη πεζογραφία Σειρά: Πετρούπολη πρόσωπα της εποχής μαςΕκδότης:

Σε πολλούς ανθρώπους αρέσει να γράφουν τέτοιες κατασκευές με τη μία ή την άλλη μορφή, όλοι έχουν συναντήσει:
foreach ($items ως &$item) ( $item += 2; )
Αλλά δεν γνωρίζουν πολλοί τον κίνδυνο που ελλοχεύει εδώ.
Εξετάστε ένα παράδειγμα.

Ο Βάσια Πούπκιν πήρε μια σειρά, πέρασε μέσα από αυτήν, αυξάνοντας όλα τα στοιχεία κατά δύο:
$items = array("a" => 10, "b" => 20, "c" => 30,); foreach ($items ως &$item) ( $item += 2; ) print_r($items);
Κοίταξα τη χωματερή, είδα ότι η εργασία είχε λυθεί και έφυγα ικανοποιημένος:
Πίνακας([a] => 12[b] => 22[c] => 32)
Μετά από αρκετό καιρό, ο Petrovich αποφάσισε να συμπληρώσει αυτό το τμήμα κώδικα με μια άλλη απαρίθμηση, προσθέτοντας παρακάτω:
$newitems = πίνακας("a" => 10, "b" => 20, "c" => 30,); foreach ($newitems ως $key=>$item) ( $newitems[$key] += 5; ) print_r($newitems);
Κοίταξε ότι το έργο του είχε επίσης λυθεί και με μια αίσθηση ολοκλήρωσης έκλεισε το αρχείο:
Πίνακας ([a] => 15 [b] => 25 [c] => 35)
Μετά από λίγο καιρό, άρχισαν να βγαίνουν ανεξήγητα σφάλματα. Γιατί;
Ας κάνουμε var_dump($items) στο τέλος του κώδικα:
πίνακας(3) ( ["a"]=> int(12) ["b"]=> int(22) ["c"]=> &int(30) )
τριάντα! Ο Βάσια Πούπκιν ορκίζεται ότι έλεγξε. Γιατί ήταν 32, και μετά τον κωδικό του Πέτροβιτς 30;

Ο λόγος βρίσκεται στο σύμφωνο. Αναφέρει ότι τα επισημασμένα δεδομένα αναφέρονται από κάποιον άλλο. Φεύγοντας, ο Βάσια δεν σκούπισε την προσωρινή μεταβλητή πίσω του, την οποία χρησιμοποίησε για την απαρίθμηση ($item). Η μεταβλητή χρησιμοποιήθηκε με άδεια αλλαγής της πηγής ("&"), η οποία ονομάζεται επίσης "ανάθεση με αναφορά". Ήταν σίγουρος ότι η μεταβλητή θα χρησιμοποιηθεί μόνο μέσα στον βρόχο. Ο Πέτροβιτς, χρησιμοποιώντας μια μεταβλητή με το ίδιο όνομα, κατά τη διάρκεια της απαρίθμησής του, άλλαξε την τιμή της και κάθε φορά άλλαζε το μέρος όπου ήταν αποθηκευμένη αυτή η μεταβλητή. Και αποθηκεύτηκε στην ίδια θέση με το τελευταίο στοιχείο του πίνακα Pupkin.

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

Πώς μπορείτε να το ξεπεράσετε αυτό;

  • Καταστρέψτε τις προσωρινές μεταβλητές μετά τη χρήση, ειδικά εάν έχουν οποιαδήποτε σύνδεση με τα δεδομένα που χρησιμοποιούνται:
    foreach ($items ως &$item) $item += 2; unset($item);
  • Να είστε προσεκτικοί με μεταβλητές που έχουν ήδη χρησιμοποιηθεί από κάποιον.
  • Ενσωματώστε τις ενέργειές σας σε μεμονωμένες συναρτήσεις, μεθόδους ή χώρους ονομάτων.
  • Χρησιμοποιήστε var_dump αντί για print_r και δώστε προσοχή στο συμπλεκτικό σύμβολο. Για την απόρριψη σε ένα αρχείο αντί για το πρόγραμμα περιήγησης, μια εναλλακτική λύση αντί του print_r($var,true) θα ήταν:
    συνάρτηση dump() ( ob_start(); foreach(func_get_args() ως $var) var_dump($var); return ob_get_clean(); )
Εν κατακλείδι, θα πω ότι σφάλματα που σχετίζονται με συνδέσμους δεν μπορούν να υπάρχουν μόνο στο foreach. Και όλα αυτά κάποτε συζητήθηκαν. Ωστόσο, αυτή η περίπτωση, αν κρίνω από την εμπειρία μου, είναι τόσο συνηθισμένη στην πράξη που αξίζει ιδιαίτερης προσοχής.

Πολλά μοιραία και ανακτήσιμα μοιραία σφάλματα έχουν μετατραπεί σε εξαιρέσεις στην PHP 7. Αυτές οι εξαιρέσεις σφαλμάτων κληρονομούνται από την κλάση Error, η οποία υλοποιεί η ίδια τη διεπαφή Throwable (η νέα βασική διεπαφή κληρονομούν όλες οι εξαιρέσεις).

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

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

// Κώδικας εποχής PHP 5 που θα σπάσει.
χειριστής συνάρτησης (Εξαίρεση $e ) ( ... )
set_exception_handler("handler");

// Συμβατό με PHP 5 και 7.
χειριστής συναρτήσεων ($e ) ( ... )

// PHP 7 μόνο.
χειριστής συνάρτησης (Throwable $e ) ( ... )
?>

Οι εσωτερικοί κατασκευαστές βάζουν πάντα εξαιρέσεις σε περίπτωση αποτυχίας

Προηγουμένως, κάποιες εσωτερικές τάξεις θα επέστρεφαν ΜΗΔΕΝΙΚΟή ένα μη χρησιμοποιήσιμο αντικείμενο όταν ο κατασκευαστής απέτυχε. Όλες οι εσωτερικές κλάσεις θα δημιουργήσουν τώρα μια Εξαίρεση σε αυτήν την περίπτωση με τον ίδιο τρόπο που έπρεπε ήδη να κάνουν οι κλάσεις χρήστη.

Το E_STRICT παρατηρεί αλλαγές σοβαρότητας

Ολα τα E_STRICTοι προκηρύξεις έχουν αναταξινομηθεί σε άλλα επίπεδα. E_STRICTσταθερά διατηρείται, άρα κλήσεις όπως error_reporting(E_ALL|E_STRICT)δεν θα προκαλέσει σφάλμα.

E_STRICTπαρατηρήστε αλλαγές σοβαρότητας
Κατάσταση Νέο επίπεδο/συμπεριφορά
Ευρετηρίαση από έναν πόρο E_ΣΗΜΕΙΩΣΗ
Αφηρημένες στατικές μέθοδοι
«Επαναπροσδιορισμός» ενός κατασκευαστή Η ειδοποίηση αφαιρέθηκε, δεν ενεργοποιεί κανένα σφάλμα
Αναντιστοιχία υπογραφής κατά την κληρονομιά E_ΠΡΟΕΙΔΟΠΟΙΗΣΗ
Χρησιμοποιείται η ίδια (συμβατή) ιδιότητα σε δύο χαρακτηριστικά Η ειδοποίηση αφαιρέθηκε, δεν ενεργοποιεί κανένα σφάλμα
Μη στατική πρόσβαση στη στατική ιδιότητα E_ΣΗΜΕΙΩΣΗ
Μόνο οι μεταβλητές πρέπει να εκχωρούνται με αναφορά E_ΣΗΜΕΙΩΣΗ
Μόνο οι μεταβλητές πρέπει να περνούν με αναφορά E_ΣΗΜΕΙΩΣΗ
Στατική κλήση μη στατικών μεθόδων E_ΚΑΤΑΡΓΗΜΕΝΟ

Αλλαγές στον μεταβλητό χειρισμό

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

Αλλαγές στον χειρισμό έμμεσων μεταβλητών, ιδιοτήτων και μεθόδων

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

Παλαιά και νέα αξιολόγηση έμμεσων εκφράσεων
έκφραση Ερμηνεία PHP 5 Ερμηνεία PHP 7
$$foo["bar"]["baz"] $($foo["bar"]["baz"]) ($$foo)["bar"]["baz"]
$foo->$bar["baz"] $foo->($bar["baz"]) ($foo->$bar)["baz"]
$foo->$bar["baz"]() $foo->($bar["baz"])() ($foo->$bar)["baz"]()
Foo::$bar["baz"]() Foo::($bar["baz"])() (Foo::$bar)["baz"]()

Ο κώδικας που χρησιμοποιούσε την παλιά σειρά αξιολόγησης από τα δεξιά προς τα αριστερά πρέπει να ξαναγραφεί για να χρησιμοποιηθεί ρητά αυτή η σειρά αξιολόγησης με σγουρά άγκιστρα (δείτε την παραπάνω μεσαία στήλη). Αυτό θα καταστήσει τον κώδικα συμβατό και προς τα εμπρός με PHP 7.x και προς τα πίσω συμβατό με PHP 5.x.

var_dump (1 >> - 1 );
?>

Θανατηφόρο σφάλμα: Μη καταγεγραμμένο αριθμητικό Σφάλμα: Μετατόπιση bit από αρνητικό αριθμό στο /tmp/test.php:2 Ίχνος στοίβας: #0 (κύριο) τοποθετημένο στο /tmp/test.php στη γραμμή 2

Bitshifts εκτός εύρους

Μετατοπίσεις bitwise (σε οποιαδήποτε κατεύθυνση) πέρα ​​από το πλάτος bit του an ακέραιος αριθμόςθα έχει πάντα ως αποτέλεσμα 0. Προηγουμένως, η συμπεριφορά τέτοιων μετατοπίσεων ήταν εξαρτημένη αρχιτεκτονική.

Αλλαγές στη διαίρεση με μηδέν

Προηγουμένως, όταν το 0 χρησιμοποιήθηκε ως διαιρέτης είτε για τους τελεστές divide (/) είτε για το modulus (%), θα εκπέμπονταν μια E_WARNING και ψευδήςθα επέστρεφε. Τώρα, ο τελεστής διαίρεσης επιστρέφει ένα float ως +INF, -INF ή NAN, όπως καθορίζεται από το IEEE 754. Ο τελεστής συντελεστή E_WARNING έχει αφαιρεθεί και θα δημιουργήσει μια εξαίρεση DivisionByZeroError.

var_dump(3/0);
var_dump(0 / 0 );
var_dump(0 % 0 );
?>

Έξοδος του παραπάνω παραδείγματος στην PHP 5:

Προειδοποίηση: Διαίρεση με το μηδέν σε %s στη γραμμή %d bool(false) Προειδοποίηση: Διαίρεση με το μηδέν σε %s στη γραμμή %d bool(false) Προειδοποίηση: Διαίρεση με το μηδέν σε %s στη γραμμή %d bool(false)

Έξοδος του παραπάνω παραδείγματος στην PHP 7:

Προειδοποίηση: Διαίρεση με το μηδέν σε %s στη γραμμή %d float(INF) Προειδοποίηση: Διαίρεση με μηδέν σε %s στη γραμμή %d float(NAN) PHP Μοιραίο σφάλμα: Uncapped DivisionByZeroError: Modulo με μηδέν στη γραμμή %s %d

$str = "0xffff" ;
$int = filter_var ($str , FILTER_VALIDATE_INT , FILTER_FLAG_ALLOW_HEX );
αν (λάθος === $int ) (
ρίχνει νέα Εξαίρεση ("Μη έγκυρος ακέραιος!" );
}
var_dump($int ); // int(65535)
?>

\u(μπορεί να προκαλέσει σφάλματα

Λόγω της προσθήκης της νέας σύνταξης διαφυγής κωδικού σημείου Unicode , συμβολοσειρές που περιέχουν κυριολεκτική \u(ακολουθούμενη από μη έγκυρη ακολουθία θα προκαλέσει μοιραίο σφάλμα. Για να αποφευχθεί αυτό, θα πρέπει να αποφευχθεί η κύρια ανάστροφη κάθετο.

Καταργήθηκαν λειτουργίες

Καταργήθηκαν οι οδηγίες INI

xsl.security_prefs

Η οδηγία xsl.security_prefs έχει καταργηθεί. Αντίθετα, το XsltProcessor::setSecurityPrefs()μέθοδος θα πρέπει να κληθεί να ελέγχει τις προτιμήσεις ασφαλείας σε βάση ανά επεξεργαστή.

Άλλες μη συμβατές αλλαγές προς τα πίσω

Τα νέα αντικείμενα δεν μπορούν να εκχωρηθούν με αναφορά

Το αποτέλεσμα του νέοςΗ δήλωση δεν μπορεί πλέον να εκχωρηθεί σε μια μεταβλητή με αναφορά:

κατηγορία Γ()
$c =& new C ;
?>

Έξοδος του παραπάνω παραδείγματος στην PHP 5:

Καταργήθηκε: Η εκχώρηση της επιστρεφόμενης τιμής του new με αναφορά καταργείται στο /tmp/test.php στη γραμμή 3

Έξοδος του παραπάνω παραδείγματος στην PHP 7:

Σφάλμα ανάλυσης: σφάλμα σύνταξης, μη αναμενόμενο "νέο" (T_NEW) στο /tmp/test.php στη γραμμή 3

Μη έγκυρα ονόματα κλάσεων, διεπαφής και χαρακτηριστικών

Τα ακόλουθα ονόματα δεν μπορούν να χρησιμοποιηθούν για την ονομασία κλάσεων, διεπαφών ή χαρακτηριστικών:

  • bool
  • ενθ
  • φλοτέρ
  • σειρά
  • ΜΗΔΕΝΙΚΟ
  • ΑΛΗΘΗΣ
  • ΨΕΥΔΗΣ

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

  • αντικείμενο
  • μικτός
  • αριθμητικός

Οι ετικέτες ASP και script PHP καταργήθηκαν

Η υποστήριξη για τη χρήση ετικετών ASP και script για την οριοθέτηση του κώδικα PHP έχει καταργηθεί. Οι ετικέτες που επηρεάζονται είναι:

Καταργήθηκαν ετικέτες ASP και σεναρίου
ετικέτα ανοίγματος Ετικέτα κλεισίματος
<% %>
<%= %>

Καταργήθηκαν οι κλήσεις από ασυμβίβαστο περιβάλλον

Οι στατικές κλήσεις που πραγματοποιήθηκαν σε μια μη στατική μέθοδο με μη συμβατό περιβάλλον, που είχαν καταργηθεί στο παρελθόν στην PHP 5.6, θα έχουν πλέον ως αποτέλεσμα η καλούμενη μέθοδος να έχει απροσδιόριστο $αυτόμεταβλητή και εκδίδεται προειδοποίηση κατάργησης.

τάξη Α (
δημόσια δοκιμή συνάρτησης() ( var_dump($this); )
}

// Σημείωση: ΔΕΝ επεκτείνει το Α
τάξη Β (
δημόσια συνάρτηση callNonStaticMethodOfA() ( A::test(); )
}

(νέο B)-> callNonStaticMethodOfA();
?>

Έξοδος του παραπάνω παραδείγματος στην PHP 5.6:

Καταργήθηκε: Η μη στατική μέθοδος A::test() δεν πρέπει να καλείται στατικά, υποθέτοντας $this από μη συμβατό περιβάλλον στο /tmp/test.php στη γραμμή 8 αντικείμενο(B)#1 (0) ( )

Έξοδος του παραπάνω παραδείγματος στην PHP 7:

Καταργήθηκε: Η μη στατική μέθοδος A::test() δεν πρέπει να καλείται στατικά στο /tmp/test.php στη γραμμή 8 Σημείωση: Μη καθορισμένη μεταβλητή: αυτή στο /tmp/test.php στη γραμμή 3 NULL

Το yield είναι πλέον ένας σωστός συσχετιστικός τελεστής

Η κατασκευή απόδοσης δεν απαιτεί πλέον παρενθέσεις και έχει αλλάξει σε δεξιό τελεστή συσχέτισης με προτεραιότητα μεταξύ Τυπώνωκαι => . Αυτό μπορεί να οδηγήσει σε αλλαγή συμπεριφοράς:

απόδοση ηχούς - 1 ;
ηχώ (απόδοση ) - 1 ;
// Και τώρα ερμηνεύεται ως
απόδοση ηχούς (-1);

Απόδοση $foo ή πεθάνει?
// Ερμηνεύτηκε προηγουμένως ως
απόδοση ($foo or die);
// Και τώρα ερμηνεύεται ως
(απόδοση $foo ) ή πεθάνει?
?>

Οι παρενθέσεις μπορούν να χρησιμοποιηθούν για να αποσαφηνιστούν αυτές οι περιπτώσεις.

Οι συναρτήσεις δεν μπορούν να έχουν πολλές παραμέτρους με το ίδιο όνομα

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

function foo ($a , $b , $unused , $unused ) (
}
?>

Λειτουργίες που επιθεωρούν ορίσματα αναφέρουν το ρεύματιμή παραμέτρου

func_get_arg(), func_get_args(), debug_backtrace()και τα backtraces εξαίρεσης δεν θα αναφέρουν πλέον την αρχική τιμή που μεταβιβάστηκε σε μια παράμετρο, αλλά θα παρέχουν την τρέχουσα τιμή (η οποία μπορεί να έχει τροποποιηθεί).

Function Foo ($x) (
$x++;
var_dump(func_get_arg(0));
}
foo(1); ?>

Έξοδος του παραπάνω παραδείγματος στην PHP 5:

Έξοδος του παραπάνω παραδείγματος στην PHP 7:

Οι δηλώσεις διακόπτη δεν μπορούν να έχουν πολλαπλά προεπιλεγμένα μπλοκ

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

διακόπτης (1 ) {
Προκαθορισμένο:
Διακοπή;
Προκαθορισμένο:
Διακοπή;
}
?>

Η επέκταση JSON αντικαταστάθηκε με JSOND

Η επέκταση JSON έχει αντικατασταθεί με JSOND, προκαλώντας τρεις μικρές διακοπές BC. Πρώτον, ένας αριθμός δεν πρέπει να τελειώνει σε δεκαδικό ψηφίο (δηλ. 34. πρέπει να αλλάξει σε ένα από τα δύο 34.0 ή 34 ). Δεύτερον, όταν χρησιμοποιείται επιστημονική σημειογραφία, το μιο εκθέτης δεν πρέπει να ακολουθεί αμέσως μια υποδιαστολή (δηλ. 3.e3πρέπει να αλλάξει σε ένα από τα δύο 3.0e3ή 3e3). Τέλος, μια κενή συμβολοσειρά δεν θεωρείται πλέον έγκυρη JSON.

Αποτυχία εσωτερικής λειτουργίας σε υπερχείλιση

Προηγουμένως, οι εσωτερικές συναρτήσεις περικόβαναν σιωπηλά αριθμούς που παράγονται από καταναγκασμούς float σε ακέραιο όταν ο float ήταν πολύ μεγάλος για να αναπαρασταθεί ως ακέραιος. Τώρα, θα εκδοθεί μια E_WARNING και ΜΗΔΕΝΙΚΟθα επιστραφεί.

Διορθώνει τις τιμές επιστροφής προσαρμοσμένου χειριστή συνεδρίας

Τυχόν συναρτήσεις κατηγορήματος που υλοποιούνται από προσαρμοσμένους χειριστές συνεδρίας που επιστρέφουν είτε ΨΕΥΔΗΣή -1 θα είναι μοιραία λάθη. Εάν οποιαδήποτε τιμή από αυτές τις συναρτήσεις εκτός από ένα boolean, -1 , ή 0 επιστρέφεται, τότε θα αποτύχει και θα εκδοθεί μια E_WARNING.

Ταξινόμηση ίσων στοιχείων

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

Μην βασίζεστε στη σειρά των στοιχείων που συγκρίνονται ως ίσα, μπορεί να αλλάξει ανά πάσα στιγμή.

Εσφαλμένες δηλώσεις διακοπής και αλλαγής

Διακοπήκαι να συνεχίσειδηλώσεις εκτός βρόχου ή διακόπτηςΗ δομή ελέγχου ανιχνεύεται τώρα στο χρόνο μεταγλώττισης αντί για τον χρόνο εκτέλεσης όπως πριν, και ενεργοποιεί ένα E_COMPILE_ERROR.

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

1. Δημιουργία συναρτήσεων με μεταβλητό αριθμό ορισμάτων

Πιθανότατα γνωρίζετε ήδη ότι η PHP μας επιτρέπει να δημιουργήσουμε συναρτήσεις με προαιρετικά ορίσματα. Τώρα θα δείξω μια συνάρτηση στην οποία ο αριθμός των ορισμάτων μπορεί να αλλάζει από περίπτωση σε περίπτωση.

Αλλά πρώτα, ας θυμηθούμε πώς δημιουργούμε συναρτήσεις με τον συνηθισμένο τρόπο:

// συνάρτηση με δύο προαιρετικές παραμέτρους function foo($arg1 = "", $arg2 = "") ( echo "arg1: $arg1\n"; echo "arg2: $arg2\n"; ) foo("γεια σου", "κόσμος"); /* έξοδος: arg1: γεια arg2: κόσμος */ foo(); /* έξοδος: arg1: arg2: */

Τώρα ας δούμε πώς μπορείτε να γράψετε μια συνάρτηση με απεριόριστο αριθμό ορισμάτων. Για αυτό, θα χρησιμοποιηθεί η μέθοδος func_get_args():

// δεν προσδιορίζετε ορίσματα Η συνάρτηση foo() ( // επιστρέφει έναν πίνακα από περασμένα ορίσματα $args = func_get_args(); foreach ($args ως $k => $v) ( echo "arg".($k+1) ." : $v\n"; ) ) foo(); /* έξοδος τίποτα */ foo("hello"); /* έξοδος arg1: hello */ foo("hello", "world", "again"); /* έξοδος arg1: γεια arg2: κόσμος arg3: ξανά */

2. Χρησιμοποιήστε το Glob() για να βρείτε αρχεία

Συχνά τα ονόματα των συναρτήσεων μιλούν από μόνα τους. Δεν μπορούμε να πούμε το ίδιο για τη συνάρτηση glob().

Χωρίς να υπεισέλθω σε λεπτομέρειες, η λειτουργικότητά του είναι παρόμοια με τη μέθοδο scandir(). Σας επιτρέπει να βρείτε το απαιτούμενο αρχείο από το μοτίβο:

// βρείτε όλα τα αρχεία php $files = glob("*.php"); print_r($αρχεία); /* έξοδος: Πίνακας ( => phptest.php => pi.php => post_output.php => test.php) */

Για να βρείτε αρχεία πολλών τύπων, πρέπει να γράψετε ως εξής:

// βρείτε όλα τα αρχεία php και txt $files = glob("*.(php,txt)", GLOB_BRACE); print_r($αρχεία); /* έξοδος: Πίνακας ( => phptest.php => pi.php => post_output.php => test.php => log.txt => test.txt) */

Μπορείτε επίσης να καθορίσετε τη διαδρομή στο πρότυπο:

$files = glob("../images/a*.jpg"); print_r($αρχεία); /* έξοδος: Πίνακας ( => ../images/apple.jpg => ../images/art.jpg) */

Για να λάβετε την πλήρη διαδρομή σε ένα έγγραφο, χρησιμοποιήστε τη μέθοδο realpath():

$files = glob("../images/a*.jpg"); // Εφαρμόστε τη συνάρτηση "realpath" σε κάθε στοιχείο του πίνακα $files = array_map("realpath",$files); print_r($αρχεία); /* έξοδος: Πίνακας ( => C:\wamp\www\images\apple.jpg => C:\wamp\www\images\art.jpg) */

3. Πληροφορίες για τη χρησιμοποιούμενη μνήμη

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

Η PHP διαθέτει ένα ισχυρό εργαλείο παρακολούθησης μνήμης. Σε διαφορετικά μέρη του σεναρίου, τα φορτία μπορεί να είναι διαφορετικά. Για να λάβετε την τιμή της μνήμης που χρησιμοποιείται σε αυτή τη στιγμή, θα πρέπει να χρησιμοποιήσουμε τη μέθοδο memory_get_usage(). Για να διορθώσετε τη μέγιστη ποσότητα μνήμης που χρησιμοποιείται, χρησιμοποιήστε memory_get_peak_usage()

echo "Initial: ".memory_get_usage()." bytes \n"; /* Αρχικό: 361400 byte */ // δίνουν ένα μικρό φορτίο για ($i = 0; $i< 100000; $i++) { $array = md5($i); } // и ещё for ($i = 0; $i < 100000; $i++) { unset($array[$i]); } echo "Final: ".memory_get_usage()." bytes \n"; /* Final: 885912 bytes */ echo "Peak: ".memory_get_peak_usage()." bytes \n"; /* Peak: 13687072 bytes */

4. Πληροφορίες επεξεργαστή

Για να το κάνετε αυτό, πρέπει να χρησιμοποιήσετε τη μέθοδο getrusage(). Σημειώστε όμως ότι αυτή η δυνατότητα δεν θα λειτουργήσει στα Windows.

Print_r(getrusage()); /* εκτυπώνει Πίνακα ( => 0 => 0 => 2 => 3 => 12692 => 764 => 3864 => 94 => 0 => 1 => 67 => 4 => 0 => 0 => 0 => 6269 => 0) */

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

  • ru_oublock: αριθμός εγγραφών μπλοκ
  • ru_inblock: αριθμός αναγνωσμένων μπλοκ
  • ru_msgsnd: αριθμός απεσταλμένων μηνυμάτων
  • ru_msgrcv: αριθμός ληφθέντων μηνυμάτων
  • ru_maxrss: μέγιστο μέγεθος μη σελιδοποιημένου συνόλου
  • ru_ixrss: συνολική κοινόχρηστη μνήμη
  • ru_idrss: συνολικός αριθμός μη κοινοποιημένων δεδομένων
  • ru_minflt: αριθμός σελίδων μνήμης που χρησιμοποιούνται
  • ru_majflt: αριθμός σφαλμάτων σελίδας
  • ru_nsignals: αριθμός ληφθέντων σημάτων
  • ru_nvcsw: αριθμός εναλλαγών περιβάλλοντος ανά διαδικασία
  • ru_nivcsw: αριθμός αναγκαστικών διακοπτών περιβάλλοντος
  • ru_nswap: αριθμός προσβάσεων στο δίσκο κατά τη διάρκεια της σελιδοποίησης
  • ru_utime.tv_usec: χρόνος που δαπανάται σε λειτουργία χρήστη (μικροδευτερόλεπτα)
  • ru_utime.tv_sec: χρόνος που δαπανάται σε λειτουργία χρήστη (δευτερόλεπτα)
  • ru_stime.tv_usec: χρόνος προνομιακής λειτουργίας (μικροδευτερόλεπτα)
  • ru_stime.tv_sec: χρόνος προνομιακής λειτουργίας (δευτερόλεπτα)

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

Κάπως μπερδεμένο. Εδώ είναι ένα παράδειγμα:

// ξεκούραση 3 δευτερόλεπτα ύπνος(3); $data = getrusage(); echo "Χρόνος χρήστη: ". ($data["ru_utime.tv_sec"] + $data["ru_utime.tv_usec"] / 1000000); echo "Ώρα συστήματος: ". ($data["ru_stime.tv_sec"] + $data["ru_stime.tv_usec"] / 1000000); /* εκτυπώσεις Χρόνος χρήστη: 0,011552 Ώρα συστήματος: 0 */

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

Εδώ είναι ένα άλλο παράδειγμα:

// περπατήστε 10 εκατομμύρια φορές για ($i=0;$i<10000000;$i++) { } $data = getrusage(); echo "User time: ". ($data["ru_utime.tv_sec"] + $data["ru_utime.tv_usec"] / 1000000); echo "System time: ". ($data["ru_stime.tv_sec"] + $data["ru_stime.tv_usec"] / 1000000); /* выводит User time: 1.424592 System time: 0.004204 */

Το σενάριο χρειάστηκε 1,4 δευτερόλεπτα χρόνου CPU. Σε αυτήν την περίπτωση, οι χρόνοι κλήσεων συστήματος είναι γενικά χαμηλοί.

Ο χρόνος προνομιακής λειτουργίας (System Time) είναι ο χρόνος που αφιερώνει ο επεξεργαστής για την εκτέλεση αιτημάτων συστήματος στον πυρήνα για λογαριασμό του προγράμματος. Παράδειγμα:

$start = microtime(true); // κλήση microtime κάθε 3 δευτερόλεπτα while(microtime(true) - $start< 3) { } $data = getrusage(); echo "User time: ". ($data["ru_utime.tv_sec"] + $data["ru_utime.tv_usec"] / 1000000); echo "System time: ". ($data["ru_stime.tv_sec"] + $data["ru_stime.tv_usec"] / 1000000); /* выводит User time: 1.088171 System time: 1.675315 */

Τώρα ο χρόνος του συστήματος έχει δαπανηθεί πολύ περισσότερο από ό,τι στο προηγούμενο παράδειγμα. Όλα χάρη στη μέθοδο microtime (), η οποία χρησιμοποιεί πόρους συστήματος.

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

5. Μαγικές σταθερές

Υπάρχουν πολλές μαγικές σταθερές στην PHP, όπως ο τρέχων αριθμός γραμμής (__LINE__), η διαδρομή αρχείου (__FILE__), η διαδρομή καταλόγου (__DIR__), το όνομα συνάρτησης (__FUNCTION__), το όνομα κλάσης (__CLASS__), το όνομα της μεθόδου (__METHOD__) και οι χώροι ονομάτων (__NAMESPACE__) .

Δεν θα τα εξετάσουμε όλα. Ας δούμε μόνο ένα ζευγάρι:

// αυτό το σενάριο εξαρτάται από την τρέχουσα θέση του αρχείου και // μπορεί να προκαλέσει προβλήματα εάν χρησιμοποιηθεί από διαφορετικούς καταλόγους require_once("config/database.php"); // αυτό το σενάριο δεν θα προκαλέσει προβλήματα require_once(dirname(__FILE__) . "/config/database.php");

Χρησιμοποιήστε __LINE__ κατά τον εντοπισμό σφαλμάτων σεναρίων:

// code // ... my_debug("some debug message", __LINE__); /* έξοδος Γραμμή 4: κάποιο μήνυμα εντοπισμού σφαλμάτων */ // περισσότερος κώδικας // ... my_debug("άλλο μήνυμα εντοπισμού σφαλμάτων", __LINE__); /* έξοδος Γραμμή 11: άλλο μήνυμα εντοπισμού σφαλμάτων */ συνάρτηση my_debug($msg, $line) ( echo "Line $line: $msg\n"; )

6. Δημιουργία μοναδικών αναγνωριστικών

Υπάρχουν φορές που χρειάζεται να δημιουργήσετε μια μοναδική συμβολοσειρά. Πολλές φορές έχω δει ότι η συνάρτηση md5() χρησιμοποιείται για την επίλυση αυτού του προβλήματος:

// δημιουργεί μια τυχαία συμβολοσειρά echo md5(time() . mt_rand(1,1000000));

Αλλά στην πραγματικότητα, η PHP έχει μια ειδική συνάρτηση uniqid() για αυτό το σκοπό.

// δημιουργεί μια τυχαία συμβολοσειρά echo uniqid(); /* βγάζει 4bd67c947233e */ // άλλη μια φορά echo uniqid(); /* εκτυπώνει 4bd67c9472340 */

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

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

// με πρόθεμα echo uniqid("foo_"); /* έξοδος foo_4bd67d6cd8b8f */ // με δεύτερη παράμετρο echo uniqid("",true); /* βγάζει 4bd67d6cd8b926.12135106 */ // και τα δύο echo uniqid("bar_",true); /* εκτυπώσεις bar_4bd67da367b650.43684647 */

Αυτή η μέθοδος δημιουργεί γραμμές μικρότερες από md5, ώστε να μπορείτε να εξοικονομήσετε χώρο.

7. Σειριοποίηση

Χρειάστηκε ποτέ να αποθηκεύσετε σύνθετα δεδομένα σε μια βάση δεδομένων ή ένα αρχείο; Προκειμένου να μετατραπεί ένα αντικείμενο σε συμβολοσειρά, η PHP παρέχει μια ειδική λειτουργία.

Σε γενικές γραμμές, αυτές οι μέθοδοι είναι 2: serialize() και unserialize()

// σύνθετος πίνακας $myvar = array("hello", 42, array(1,"two"), "apple"); // μετατροπή σε συμβολοσειρά $string = serialize($myvar); echo $string; /* έξοδος a:4:(i:0;s:5:"γεια";i:1;i:42;i:2;a:2:(i:0;i:1;i:1;s :3:"δύο";)i:3;s:5:"μήλο";) */ // λάβετε την αρχική τιμή $newvar = unserialize($string); print_r($newvar); /* εκτυπώνει Array ( => γεια => 42 => Array ( => 1 => δύο) => apple) */

Έτσι λειτουργούν αυτές οι λειτουργίες. Ωστόσο, λόγω της ταχείας αύξησης της δημοτικότητας του JSON, προστέθηκαν 2 μέθοδοι json_encode() και json_decode() στην PHP 5.2. Η δουλειά τους είναι παρόμοια με το serialize():

// σύνθετος πίνακας $myvar = array("hello", 42, array(1,"two"), "apple"); // μετατροπή σε συμβολοσειρά $string = json_encode($myvar); echo $string; /* εκτυπώνει ["hello",42,"apple"] */ // επαναφέρει την αρχική τιμή $newvar = json_decode($string); print_r($newvar); /* εκτυπώνει Array ( => γεια => 42 => Array ( => 1 => δύο) => apple) */

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

8. Συμπίεση χορδών

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

Στο παρακάτω παράδειγμα, θα δείξουμε τη λειτουργία των συναρτήσεων gzcompress() και gzuncompress():

$string = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc ut elit id mi ultricies adipiscing. Nulla facilisi. Praesent pulvinar, sapien vel feugiat vestibulum, nulla dui pretium orci, non ultricies elit elitsum an lacus. , consectetur adipiscing elit. Aliquam pretium ullamcorper urna quis iaculis. Etiam ac massa sed turpis tempor luctus. Curabitur sed nibh eu elit mollis congue. metus, at lacinia augue. Sed magna nisi, ornare in mollis in, mollis sed nunc. Etiam at justo in leo congue mollis. Nullam in neque eget metus hendrerit scelerisque eu non enim. Ut malesuada lacus eu nulla bibendum id euismod urna " ; $compressed = gzcompress($string); echo "Πρωτότυπο μέγεθος: ". strlen($string)."\n"; /* εκτυπώσεις Μέγεθος πρωτοτύπου: 800 */ echo "Compressed size: ". strlen($compressed)."\n"; /* έξοδος Συμπιεσμένο μέγεθος: 418 */ // return $original = gzuncompress($compressed);

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

9. Εκτελέστε πριν την ολοκλήρωση

Η PHP έχει μια συνάρτηση register_shutdown_function() που σας επιτρέπει να εκτελέσετε κάποιο κώδικα πριν την έξοδο του σεναρίου.

Ας υποθέσουμε ότι θέλετε να μάθετε κάποιες πληροφορίες... Χρόνος εκτέλεσης σεναρίου:

// ώρα έναρξης $start_time = microtime(true); // ορισμένες λειτουργίες // ... // εκτύπωση του χρόνου εκτέλεσης ηχώ "η εκτέλεση έλαβε: ". (microtime(true) - $start_time). "δευτερόλεπτα."

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

Όταν χρησιμοποιείτε τη μέθοδο register_shutdown_function(), ο κώδικας θα εκτελεστεί ούτως ή άλλως:

$start_time = microtime(true); register_shutdown_function("my_shutdown"); συνάρτηση my_shutdown() ( καθολική $start_time; echo "η εκτέλεση έλαβε χώρα: ". (microtime(true) - $start_time). " δευτερόλεπτα."; )

συμπέρασμα

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