PHP Nasıl Çalışır?

PHP, Laravel ve Symfony gibi önemli PHP frameworklerinin popülerlik istatistiklerinin de kanıtladığı gibi, hala yaygın olarak kullanılan bir programlama dilidir.

İlk konu olarak PHP'nin nasıl çalıştığı konusunu seçtim çünkü daha ileri konulara geçmeden önce (ki bu konuda da yazmayı planlıyorum) dilin nasıl çalıştığına dair kavramsal bir anlayışa sahip olmanın önemli olduğuna inanıyorum.

PHP Programlama Dilinin Tarihçesi

PHP ismi " PHP: Hypertext Preprocessor" (PHP: Hipermetin Ön İşlemcisi) anlamına gelir, bu da onu yinelemeli bir kısaltma yapar ve bu da kısaltmanın bir kısmının ( PHP ) aynı zamanda bir kısaltma olduğu anlamına gelir. Ancak, başlangıçta (90'larda) PHP, PHP/FI (Kişisel Ana Sayfa/Form Yorumlayıcısı) adlı bir dizi betik olarak tanıtıldı.

O zamandan beri PHP, web teknolojisi pazarında önemli bir paya sahip olgun bir dile dönüştü. "Olgunlaşması" boyunca PHP sıklıkla önemli değişikliklere uğradı. Örneğin, PHP 4'ten PHP 5'e geçiş, nesne yönelimli programlama desteğinde büyük değişiklikler getirdi ve PHP 5'ten PHP 7'ye geçiş, argüman yazımına destek getirdi.

Ama bu hikayeyi uzatmadan, şimdi PHP'nin nasıl çalıştığına geçeceğim.

PHP programlama dili nasıl çalışır?

Bir PHP dosyasının işlenmesi, birbirini izleyen 4 ana aşamaya ayrılabilir:

  1. Sözcüksel analiz (tokenizasyon).
  2. Sözdizimi analizi (ayrıştırma).
  3. Derleme.
  4. Uygulamak.

PHP kod yorumlamasının kavramsal akışı aşağıdaki diyagramda gösterilmektedir.

php nasıl çalışır

PHP kod yorumlama sürecini gösteren diyagram.

Yukarıdaki diyagramda açık mavi dikdörtgenler aşamaları, açık yeşil eşkenar dörtgen ise her aşamanın sonucunda üretilen verileri temsil ediyor.

Sözcüksel analiz (tokenizasyon), kaynak kodunu mantıksal birimlere (lexemes/tokens olarak adlandırılır) bölme işlemidir. Lexemes örnekleri programlama dili anahtar sözcükleridir (örneğin if, for, function). Bu analizin amacı, yorumlama açısından alakasız olan şeyleri atlayarak kodu daha fazla işleme için daha erişilebilir bir forma dönüştürmektir.

Basit bir örnek, temel bir PHP betiği için sözcük birimlerinin (token) gösterimidir:

<?php 

$x = 0;
$x++;
echo $x;

?>

Bu da yaklaşık olarak aşağıdaki token kümesine karşılık gelecektir:

T_OPEN_TAG ('<?php') 
T_DEĞİŞKEN ('$x')
T_BEYAZ BOŞLUK (' ')
=
T_BEYAZ BOŞLUK (' ')
T_LNUM ('0')
;
T_DEĞİŞKEN ('$x')
T_INC ('++')
;
T_ECHO ('echo')
T_BEYAZ BOŞLUK (' ')
T_DEĞİŞKEN ('$x')
T_CLOSE_TAG ('?>')

Kodun tokenlara dönüştürülmesi süreci PHP yorumlayıcısı kaynak dosyasında görülebilir. Tokenların tam listesi PHP belgelerinde mevcuttur.

PHP dilinin kendisi de belirteçleri görüntülemeyi destekler; bu, PHP belgelerinde iyi bir şekilde gösterilmiştir; burada verilen kod dizesini PHP dili belirteçlerine ayrıştıran ve görüntüleyen basit bir betik vardır.

Bir sonraki aşama sözdizimi analizidir (ayrıştırma). Özünde, önceki aşamada çıkarılan belirteçlerden Soyut Sözdizimi Ağacı (AST) olarak bilinen uygun bir hiyerarşik yapı oluşturmaktan oluşur . Ağaç oluşturulurken sözdizimi kuralları doğrulanır, bu da sözdizimi hatalarının erken bir aşamada yakalanmasına olanak tanır. Bu aşamanın sonucu olan AST ağacı, bir sonraki aşamada kod derlemesi için kullanılacaktır.

Örneğin, yukarıda sunulan betik durumunda, AST ağacı sırasıyla değer atama, artış ve görüntülemeyi temsil eden 3 düğümden oluşacaktır.

Bu durumu görselleştirmek için, belirli bir betik için AST ağacının nasıl göründüğüne dair iyi bir temsil veren https://phpast.com/ aracını kullandım :

php ast ağacı örneği

Verilen PHP betiği için AST ağacı örneği.

Sunulan görüntüde 3 düğümü açıkça görebilirsiniz. İlk düğüm (indeks 0), $x değişkenine 0 değerinin atanmasına karşılık gelir. İkinci düğüm (indeks 1), $x değişkeninin değerini artırmaktan sorumludur. Son düğüm (indeks 2), $x değişkeninin değerini görüntülemekten sorumludur.

Analiz aşaması tamamlandıktan sonra, oluşturulan AST ağacı PHP betiğinin işlenmesinin bir sonraki aşaması olan derlemede kullanılır.

Bir PHP betiğinin işlenmesinin sondan bir önceki aşaması , betiğin önceki aşamada oluşturulan AST ağacına göre OPcode biçimine derlendiği derlemedir. OPcode'lar, Zend Engine sanal makinesi tarafından yürütülmesi amaçlanan düşük seviyeli talimatlardır. OPcode, önceden derlenmiş bir kod biçimi içerir, bu nedenle bir sonraki çalıştırışınızda önceki aşamaları atlayıp OPcode'ları doğrudan OPcache'den alabilirsiniz.

OPcache hakkında daha fazla ayrıntı ve düzgün şekilde nasıl yapılandırılacağı PHP belgelerinde mevcuttur.

Yorumlama sürecindeki son adım, daha önce oluşturulan OP kodlarının Zend Engine sanal makinesinde yürütülmesidir. Komut dosyası yürütülürken, sonucu üretilir. Basit bir durumda, bazı bilgileri görüntülüyor olabilir, ancak PHP'nin ana kullanımını göz önünde bulundurarak - web uygulamaları oluşturma - sonuç çoğunlukla HTML kodu veya web uygulamalarında veri alışverişi için kullanılan JSON veya XML gibi yapılandırılmış bir veri biçimi olacaktır.

Çözüm

PHP, uzun yıllar boyunca evrim geçirmiş bir dildir, bu yüzden köklü bir konuma sahiptir ve kullanıma hazır geniş bir özellik yelpazesi sunar. Bu yönleri ve PHP'nin düşük giriş bariyerini göz önünde bulundurarak, temel kavramlar olmasına rağmen dilin nasıl çalıştığına dair bir anlayış genellikle göz ardı edilir. PHP'nin nasıl çalıştığına dair bilgi, verimli ve güvenli kod yazmak için olmazsa olmazdır.