Dieser Artikel wurde von Younes Rafie geprüft. Vielen Dank an alle Peer -Rezensenten von SitePoint, die SitePoint -Inhalte so gut wie m?glich gemacht haben!
Inspiriert von einem kürzlich durchgeführten Artikel darüber, wie Ruby Code ausgeführt wird, deckt dieser Artikel den Ausführungsprozess für PHP -Code ab.
Key Takeaways
- PHP -Codeausführung umfasst vier Stufen: Lexing, Parsen, Zusammenstellung und Interpretation. Jede Stufe ist entscheidend beim Konvertieren von PHP-Quellcode in maschinelles Lesbarer Code.
- Lexing oder Tokens ist der Prozess, einen String (PHP -Quellcode) in eine Sequenz von Token zu verwandeln. Jedes Token ist ein benannter Kenner für den Wert, den er übereinstimmte. Diese Phase speichert auch das Lexeme und die Zeilennummer des übereinstimmten Tokens.
- Die Parsing -Stufe überprüft die Gültigkeit der Token -Ordnung und erzeugt den abstrakten Syntaxbaum (AST). Der AST ist eine Baumansicht des Quellcodes, die w?hrend der Kompilierungsphase verwendet werden.
- Die Kompilierungsphase emittiert Opcodes, indem sie das AST durchqueren und Optimierungen wie Aufl?sungsaufrufe mit buchst?blichen Argumenten und faltungsübergreifenden mathematischen Ausdrücken durchführen. Die Ausgabe dieser Phase kann mit Opcache, VLD und PHPDBG geprüft werden.
- Die Interpretationsphase ist die letzte Phase, in der die Opcodes auf dem Zend Engine (ZE) VM ausgeführt werden. Die Ausgabe dieser Phase ist das, was Ihr PHP -Skript über Befehle wie Echo, Druck, var_dump usw. ausgibt.
Einführung
, wenn wir ein Stück PHP -Code ausführen, ist viel los. Im Gro?en und Ganzen durchl?uft der PHP -Interpreter vier Stufen, wenn der Code ausgeführt wird:
- Lexing
- Parsing
- Compilation
- Interpretation
Dieser Artikel wird durch diese Phasen überfliegen und zeigen, wie wir die Ausgabe aus jeder Phase anzeigen k?nnen, um wirklich zu sehen, was los ist. Beachten Sie, dass einige der verwendeten Erweiterungen bereits Teil Ihrer PHP-Installation sein sollten (z.
Stufe 1 - LexingLexing (oder Tokenisierung) ist der Prozess, einen String (PHP -Quellcode, in diesem Fall) in eine Abfolge von Token zu verwandeln. Ein Token ist einfach eine benannte Kennung für den Wert, den es übereinstimmte. PHP verwendet RE2C, um seinen Lexer aus der Definitionsdatei zend_language_scanner.l zu generieren.
wir k?nnen die Ausgabe der Lexingstufe über die Tokenizer -Erweiterung sehen:
$code = <<<'code' <span><span><?php </span></span><span><span>$a = 1; </span></span><span>code<span>; </span></span><span> </span><span><span>$tokens = token_get_all($code); </span></span><span> </span><span><span>foreach ($tokens as $token) { </span></span><span> <span>if (is_array($token)) { </span></span><span> <span>echo "Line <span><span>{$token[2]}</span>: "</span>, token_name($token[0]), " ('<span><span>{$token[1]}</span>')"</span>, PHP_EOL; </span></span><span> <span>} else { </span></span><span> <span>var_dump($token); </span></span><span> <span>} </span></span><span><span>} </span></span>Ausg?nge:
$code = <<<'code' <span><span><?php </span></span><span><span>$a = 1; </span></span><span>code<span>; </span></span><span> </span><span><span>$tokens = token_get_all($code); </span></span><span> </span><span><span>foreach ($tokens as $token) { </span></span><span> <span>if (is_array($token)) { </span></span><span> <span>echo "Line <span><span>{$token[2]}</span>: "</span>, token_name($token[0]), " ('<span><span>{$token[1]}</span>')"</span>, PHP_EOL; </span></span><span> <span>} else { </span></span><span> <span>var_dump($token); </span></span><span> <span>} </span></span><span><span>} </span></span>
Es gibt ein paar bemerkenswerte Punkte aus der obigen Ausgabe. Der erste Punkt ist, dass nicht alle Teile des Quellcodes als Token bezeichnet werden. Stattdessen werden einige Symbole an und für sich als Token angesehen (wie z. B. =,;,:,? Usw.). Der zweite Punkt ist, dass der Lexer tats?chlich etwas mehr tut, als nur einen Tokenstrom auszugeben. In den meisten F?llen speichert es auch das Lexem (der vom Token übereinstimmende Wert) und die Zeilennummer des übereinstimmenden Tokens (der für Stapelspuren verwendet wird).
Stufe 2 - Parsing
Der Parser wird ebenfalls generiert, diesmal mit Bison über eine BNF -Grammatikdatei. PHP verwendet eine kontextfreie Grammatik von LALR (1) (nach vorne, links nach rechts). Der Aussichtsteil bedeutet einfach, dass der Parser in der Lage ist, N -Token (1, in diesem Fall) voranzutreiben, um Unklarheiten zu l?sen, auf die er w?hrend der Parsen begegnen kann. Der Teil von links nach rechts bedeutet, dass er den Token-Stream von links nach rechts analysiert.
Die erzeugte Parserstufe nimmt den Token -Stream aus dem Lexer als Eingabe und hat zwei Jobs. Es überprüft zun?chst die Gültigkeit des Token -Ordens, indem versucht wird, sie gegen eine der in seiner BNF -Grammatikdatei definierten Grammatikregeln zu vereinen. Dies stellt sicher, dass die Token im Token -Strom gültige Sprachkonstrukte gebildet werden. Der zweite Auftrag des Parsers besteht darin, die abstrakte Syntaxbaum (AST) zu generieren - eine Baumansicht des Quellcodes, der w?hrend der n?chsten Stufe verwendet wird (Zusammenstellung).
Wir k?nnen eine Form von den vom Parser erzeugten AST mit der PHP-Ast-Erweiterung anzeigen. Der interne AST ist nicht direkt freigelegt, da es nicht besonders ?sauber“ ist, mit (in Bezug auf Konsistenz und allgemeine Benutzerfreundlichkeit) zu arbeiten, und daher führt die PHP-Ast-Erweiterung einige Transformationen durch, um es sch?ner zu machen, mit zu arbeiten.
Schauen wir uns das AST für ein rudiment?res Stück Code an:
Line 1: T_OPEN_TAG ('<?php ') Line 2: T_VARIABLE ('$a') Line 2: T_WHITESPACE (' ') string(1) "=" Line 2: T_WHITESPACE (' ') Line 2: T_LNUMBER ('1') string(1) ";"
Ausgabe:
$code = <<<'code' <span><span><?php </span></span><span><span>$a = 1; </span></span><span>code<span>; </span></span><span> </span><span><span>print_r(ast<span>\parse_code</span>($code, 30)); </span></span>
Die Baumknoten (die typischerweise vom Typ Astnode sind) haben mehrere Eigenschaften:
- Art - ein ganzzahliger Wert, der den Knotentyp darstellt; jeweils hat eine entsprechende Konstante (z. Flags - Eine Ganzzahl, die überlastetes Verhalten angibt (z. B. ein Astast_Binary_OP -Knoten wird Flags haben, um zu unterscheiden, welche Bin?roperation auftritt)
- LINENO - Die Zeilennummer, wie aus den Token -Informationen früher
- festgestellt wird
- Kinder - Subknoten, typischerweise Teile des Knotens weiter nach unten (z. B. ein Funktionsknoten haben die Kinder: Parameter, Rückgabetyp, K?rper usw.)
Die AST -Ausgabe dieser Phase ist praktisch für Tools wie statische Codeanalysatoren (z. B. Phan).
Stufe 3 - Zusammenstellung
Die Kompilierungsphase verbraucht das AST, wo sie Opcodes durch rekursives Durchqueren des Baumes emittiert. Diese Phase führt auch einige Optimierungen durch. Dazu geh?ren die Aufl?sung einiger Funktionsaufrufe mit w?rtlichen Argumenten (wie Strlen ("ABC") bis int (3)) und Faltungskonstante mathematische Ausdrücke (wie 60 * 60 * 24 bis int (86400)).
Wir k?nnen die Opcode -Ausgabe in dieser Phase in vielerlei Hinsicht inspizieren, einschlie?lich Opcache, VLD und PHPDBG. Ich werde VLD dafür verwenden, da ich der Meinung bin
Lassen Sie uns sehen, wie die Ausgabe für das folgende Datei -Skript ist:
$code = <<<'code' <span><span><?php </span></span><span><span>$a = 1; </span></span><span>code<span>; </span></span><span> </span><span><span>$tokens = token_get_all($code); </span></span><span> </span><span><span>foreach ($tokens as $token) { </span></span><span> <span>if (is_array($token)) { </span></span><span> <span>echo "Line <span><span>{$token[2]}</span>: "</span>, token_name($token[0]), " ('<span><span>{$token[1]}</span>')"</span>, PHP_EOL; </span></span><span> <span>} else { </span></span><span> <span>var_dump($token); </span></span><span> <span>} </span></span><span><span>} </span></span>Ausführen des folgenden Befehls:
Line 1: T_OPEN_TAG ('<?php ') Line 2: T_VARIABLE ('$a') Line 2: T_WHITESPACE (' ') string(1) "=" Line 2: T_WHITESPACE (' ') Line 2: T_LNUMBER ('1') string(1) ";"Unsere Ausgabe ist:
$code = <<<'code' <span><span><?php </span></span><span><span>$a = 1; </span></span><span>code<span>; </span></span><span> </span><span><span>print_r(ast<span>\parse_code</span>($code, 30)); </span></span>Die Opcodes ?hneln irgendwie dem ursprünglichen Quellcode, um den Grundvorg?ngen zu folgen. (Ich werde mich nicht mit den Details von Opcodes in diesem Artikel befassen, da dies mehrere gesamte Artikel an sich annehmen würde.) Auf Opcode -Ebene im obigen Skript wurden keine Optimierungen angewendet - aber wie wir sehen k?nnen, k?nnen wir die Kompilierungsphase sehen hat einige gemacht, indem er die konstante Bedingung aufl?st (php_version === '7.1.0-dev') zu true.
opcache kann mehr als nur Opcodes zwischengespeichern (damit die Lexing-, Parsen- und Kompilierungsstufen umgehen). Es packt auch viele verschiedene Optimierungsstufen mit sich. Lassen Sie uns die Optimierungsstufe auf vier P?sse erheben, um zu sehen, was herauskommt:
Befehl:
ast\Node Object ( [kind] => 132 [flags] => 0 [lineno] => 1 [children] => Array ( [0] => ast\Node Object ( [kind] => 517 [flags] => 0 [lineno] => 2 [children] => Array ( [var] => ast\Node Object ( [kind] => 256 [flags] => 0 [lineno] => 2 [children] => Array ( [name] => a ) ) [expr] => 1 ) ) ) )Ausgabe:
<span>if (PHP_VERSION === '7.1.0-dev') { </span> <span>echo 'Yay', PHP_EOL; </span><span>} </span>Wir k?nnen sehen, dass der konstante Zustand entfernt wurde und die beiden Echo -Anweisungen in eine einzige Anweisung zusammengefasst wurden. Dies sind nur ein Vorgeschmack auf die vielen Optimierungen, die Opcache bei der Ausführung von Passer über die Opcodes eines Skripts gilt. Ich werde die verschiedenen Optimierungsstufen in diesem Artikel jedoch nicht durchgehen, da dies auch ein Artikel für sich w?re.
Stufe 4 - Interpretation
Die letzte Phase ist die Interpretation der Opcodes. Hier werden die Opcodes auf dem Zend Engine (ZE) VM ausgeführt. In dieser Phase gibt es tats?chlich nur sehr wenig zu sagen (zumindest aus hoher Perspektive). Die Ausgabe ist so ziemlich das, was Ihr PHP -Skript über Befehle wie Echo, Print, var_dump usw. ausgibt.
, anstatt zu diesem Zeitpunkt in irgendetwas Komplexes zu graben, ist hier eine lustige Tatsache: PHP ben?tigt sich selbst als Abh?ngigkeit, wenn er seine eigene VM generiert. Dies liegt daran
Schlussfolgerung
Wir haben einen kurzen Blick durch die vier Stufen, die der PHP -Interpreter beim Ausführen von PHP -Code durchl?uft. Dies hat die Verwendung verschiedener Erweiterungen (einschlie?lich Tokenizer, PHP-Ast, Opcache und VLD) zur Manipulation und Sichtweise der Ausgabe jeder Stufe beinhaltet.
.Ich hoffe, dieser Artikel hat Ihnen dazu beigetragen, Ihnen ein besseres ganzheitliches Verst?ndnis des Interpreters von PHP zu vermitteln und die Bedeutung der Opcache -Erweiterung (sowohl für seine Ausgeschnittene als auch für Optimierungsf?higkeiten) zu zeigen.
h?ufig gestellte Fragen (FAQs) zum PHP -Ausführungsprozess
Welche Rolle spielt der PHP -Interpreter im Ausführungsprozess? Es ist verantwortlich für die Konvertierung des PHP-Quellcodes in maschinelles Lesbarer Code. Der Interpreter liest die PHP -Skriptzeile nach Zeile, interpretiert jede Zeile und führt die erforderlichen Vorg?nge aus. Es ist auch verantwortlich für die Behandlung von Fehlern und Ausnahmen w?hrend des Ausführungsprozesses. Der PHP -Interpreter ist eine Schlüsselkomponente der PHP -Laufzeitumgebung, die auch den Webserver und die PHP -Erweiterungen umfasst. Der PHP -Ausführungsprozess. Es ist dafür verantwortlich, das PHP -Skript zu analysieren, in Bytecode zu kompilieren und dann die Bytecode auszuführen. Die PHP-Engine verwendet einen zweistufigen Prozess, um PHP-Skripte auszuführen. Zun?chst analysiert es das PHP -Skript und konvertiert es in einen abstrakten Syntaxbaum (AST). Dann kompiliert es das AST in Bytecode und führt es aus. Die PHP-Engine enth?lt au?erdem einen Speichermanager und einen Müllsammler, um die Speicherverwendung w?hrend des Ausführungsprozesses zu verwalten. -Line Interface (CLI) und Webserverschnittstelle sind zwei verschiedene M?glichkeiten, um PHP -Skripte auszuführen. Die CLI wird zum Ausführen von PHP -Skripten aus der Befehlszeile verwendet, w?hrend die Webserverschnittstelle zum Ausführen von PHP -Skripten als Antwort auf Webanforderungen verwendet wird. Der Hauptunterschied zwischen den beiden Schnittstellen ist die Art und Weise, wie sie Eingang und Ausgabe behandeln. In der CLI wird die Eingabe aus der Befehlszeile gelesen und die Ausgabe in die Konsole geschrieben. In der Webserverschnittstelle wird die Eingabe aus der HTTP -Anforderung gelesen, und die Ausgabe wird in die HTTP -Antwort geschrieben. Mechanismus, der es ihm erm?glicht, Fehler w?hrend des Ausführungsprozesses zu bew?ltigen. Wenn ein Fehler auftritt, generiert PHP eine Fehlermeldung und sendet sie an den Fehlerhandler. Der Fehlerhandler kann entweder die Fehlermeldung anzeigen, sie protokollieren oder ignorieren, abh?ngig von den Fehlerberichterstattungseinstellungen. PHP unterstützt auch die Ausnahmeregelung, sodass es Fehler auf strukturiertere und überschaubare Weise behandelt.
Welche Rolle spielt die PHP -Erweiterungen im Ausführungsprozess? Sie werden w?hrend des Ausführungsprozesses in die PHP -Laufzeitumgebung geladen und k?nnen verwendet werden, um eine Vielzahl von Aufgaben aus dem Datenbankzugriff bis zur Bildverarbeitung auszuführen. PHP -Erweiterungen werden in C geschrieben und in den Maschinencode zusammengestellt, wodurch sie sehr schnell und effizient sind. Sie sind eine Schlüsselkomponente des PHP -?kosystems und tragen zu seiner Flexibilit?t und Leistung bei.
Wie optimiert PHP den Ausführungsprozess? Eine dieser Techniken ist das Opcode -Caching, bei dem die von der PHP -Engine im Speicher erzeugte Bytecode gespeichert werden, damit sie in nachfolgenden Ausführungen wiederverwendet werden kann. Dadurch wird die Notwendigkeit beseitigt, das PHP -Skript jedes Mal zu analysieren und zu kompilieren, wenn es zu erheblichen Leistungsverbesserungen führt. PHP verwendet auch Just-in-Time-Zusammenstellung (Just-in-Time), bei der Bytecode zur Laufzeit in den Maschinencode kompiliert wird, um die Leistung weiter zu verbessern. PHP verfügt über einen integrierten Speichermanager, der w?hrend des Ausführungsprozesses die Speicherzuweisung und Deallokation übernimmt. Der Speichermanager weist nach Bedarf den Speicher für Variablen und Datenstrukturen zu und bearbeitet den Speicher, wenn er nicht mehr ben?tigt wird. PHP hat auch einen Müllsammler, der den Speicher automatisch befreit, der nicht mehr verwendet wird. Dies hilft, Speicherlecks zu verhindern und die Speicherverwendung unter Kontrolle zu halten.
Welche Rolle spielt der Webserver im PHP -Ausführungsprozess? Verfahren. Es ist verantwortlich für die Behandlung von HTTP -Anfragen, das Ausführen von PHP -Skripten als Antwort auf diese Anfragen und das Senden von HTTP -Antworten an den Client. Der Webserver arbeitet eng mit dem PHP -Interpreter und der PHP -Engine zusammen, um PHP -Skripte auszuführen und dynamische Webseiten zu generieren. Die am h?ufigsten verwendeten Webserver für PHP sind Apache und Nginx. MySQL, Postgresql und SQLite. Es verwendet datenbankspezifische Erweiterungen, um w?hrend des Ausführungsprozesses mit diesen Datenbanken zu interagieren. Diese Erweiterungen bieten eine Reihe von Funktionen, mit denen eine Verbindung zur Datenbank hergestellt, SQL -Abfragen ausgeführt, Ergebnisse abgerufen und Fehler verarbeitet werden k?nnen. PHP unterstützt auch die Erweiterung der PDO (PHP-Datenobjekte), die eine Datenbank-Agnostic-Schnittstelle für Datenbankinteraktionen bereitstellt.
Wie verarbeitet PHP das Sitzungsmanagement w?hrend des Ausführungsprozesses? Wenn eine Sitzung gestartet wird, erstellt PHP eine eindeutige Sitzungs -ID und speichert sie in einem Cookie im Browser des Kunden. Diese Sitzungs -ID wird dann mit jeder nachfolgenden Anforderung an den Server zurückgesandt, sodass PHP den Client identifizieren und die entsprechenden Sitzungsdaten abrufen kann. Die Sitzungsverwaltungsfunktionen von PHP erleichtern die Implementierung der Benutzerauthentifizierung, Einkaufswagen und andere staatliche Funktionen in Webanwendungen.
Das obige ist der detaillierte Inhalt vonWie PHP ausführt - vom Quellcode zum Rendern. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Hei?e KI -Werkzeuge

Undress AI Tool
Ausziehbilder kostenlos

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem v?llig kostenlosen KI-Gesichtstausch-Tool aus!

Hei?er Artikel

Hei?e Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

H?ufige Probleme und L?sungen für den variablen PHP -Umfang umfassen: 1. Die globale Variable kann innerhalb der Funktion nicht zugegriffen werden, und sie muss bei der Verwendung des globalen Schlüsselworts oder Parameters übergeben werden. 2. Die statische Variable wird statisch deklariert und nur einmal initialisiert und der Wert wird zwischen mehreren Aufrufen beibehalten. 3.. Hyperglobale Variablen wie $ _get und $ _post k?nnen direkt in jedem Bereich verwendet werden, aber Sie müssen auf eine sichere Filterung achten. 4. Die anonymen Funktionen müssen über das Schlüsselwort verwenden, und wenn Sie externe Variablen ?ndern, müssen Sie eine Referenz übergeben. Das Beherrschen dieser Regeln kann dazu beitragen, Fehler zu vermeiden und die Code -Stabilit?t zu verbessern.

Um PHP -Datei -Uploads sicher zu verarbeiten, müssen Sie die Quelle und die Type und die Eingabe des Dateinamens und des Pfades überprüfen, Serverbeschr?nkungen festlegen und Mediendateien zweimal verarbeiten. 1. überprüfen Sie die Upload -Quelle, um CSRF durch Token zu verhindern, und erkennen Sie den realen MIME -Typ über die Finfo_file mithilfe der Whitelist -Steuerung. 2. Benennen Sie die Datei in eine zuf?llige Zeichenfolge um und bestimmen Sie die Erweiterung, um sie gem?? dem Erkennungstyp in einem Verzeichnis ohne Web zu speichern. 3. Die PHP -Konfiguration begrenzt die Hochladengr??e und das tempor?re Verzeichnis Nginx/Apache verbietet den Zugriff auf das Upload -Verzeichnis. 4. Die GD -Bibliothek stellt die Bilder neu, um potenzielle b?swillige Daten zu l?schen.

Es gibt drei g?ngige Methoden für den PHP -Kommentarcode: 1. Verwenden Sie // oder #, um eine Codezeile zu blockieren, und es wird empfohlen, // zu verwenden. 2. Verwenden Sie /.../, um Codebl?cke mit mehreren Zeilen zu wickeln, die nicht verschachtelt werden k?nnen, aber gekreuzt werden k?nnen. 3.. Kombinationskenntnisse Kommentare wie die Verwendung / if () {} / Um Logikbl?cke zu steuern oder um die Effizienz mit Editor -Verknüpfungsschlüssel zu verbessern, sollten Sie auf die Schlie?ung von Symbolen achten und das Verschachteln bei der Verwendung vermeiden.

AgneeratorinphpiSamemory-effizientes WaytoiterateOverlargedatasetsByyieldingValueatimeinsteadofReturningThemallatonce.1.GeneratorsusetheyieldKeywordtoproduktenvaluesonDemand, ReducingMemoryUsage.2.TheyareusefulforfulforfulfordlingBiglopploups, Lesebiglochen, Leselungen, Lesebigs, Leselung, oder

Der Schlüssel zum Schreiben von PHP -Kommentaren liegt in der Kl?rung des Zwecks und der Spezifikationen. Kommentare sollten "Warum" und nicht "was getan" erkl?ren, um Redundanz oder zu Einfachheit zu vermeiden. 1. Verwenden Sie ein einheitliches Format wie Docblock (/*/) für Klassen- und Methodenbeschreibungen, um die Lesbarkeit und die Kompatibilit?t der Werkzeuge zu verbessern. 2. Betonen Sie die Gründe für die Logik, z. B. warum JS -Sprünge manuell ausgeben müssen. 3. Fügen Sie eine übersichtsbeschreibung vor komplexem Code hinzu, beschreiben Sie den Prozess in Schritten und helfen Sie, die Gesamtidee zu verstehen. V. Gute Anmerkungen k?nnen die Kommunikationskosten senken und die Effizienz der Code -Wartung verbessern.

Toinstallphpquickly, usexampponwindowsorhomebrewonmacos.1.onwindows, download undInstallxampp, SelectComponents, Startapache und PlaceFilesinhtdocscs.2.Anternativ, manuellinstallphpfrfr

In PHP k?nnen Sie quadratische Klammern oder lockige Klammern verwenden, um Zeichenfolgenspezifikationsspezifische Indexzeichen zu erhalten, aber quadratische Klammern werden empfohlen. Der Index startet von 0 und der Zugriff au?erhalb des Bereichs gibt einen Nullwert zurück und kann keinen Wert zugewiesen; MB_SUBSTR ist erforderlich, um Multi-Byte-Zeichen zu verarbeiten. Zum Beispiel: $ str = "Hallo"; echo $ str [0]; Ausgabe H; und chinesische Zeichen wie Mb_Substr ($ str, 1,1) müssen das richtige Ergebnis erzielen. In den tats?chlichen Anwendungen sollte die L?nge der Zeichenfolge vor dem Schleifen überprüft werden, dynamische Zeichenfolgen müssen für die Gültigkeit verifiziert werden, und mehrsprachige Projekte empfehlen, Multi-Byte-Sicherheitsfunktionen einheitlich zu verwenden.

Tolearnphpeffectival, startbysettingupalocalerverenVironmentusexs -LikexamppandacodeeditorikevScode.1) InstallxamppForapache, MySQL und Php.SeacodeeditorForsyntaxSupport.3) testyourscludingveliktingveliktelaThbiliodble.Neclyble.NektFile
