PHP sunucuda çalışır: sayfayı oluşturur, hazır HTML'i gönderir ve durur. JavaScript ziyaretçinin tarayıcısında çalışır; tıklamalara tepki verir ve sayfayı yüklendikten sonra değiştirir. Node.js ile sunucuda da çalışabilir. Yani ikisi rakipten çok ortaktır: tipik bir site sunucuda PHP (veya Node.js), tarayıcıda JavaScript kullanır.
Bu PHP kodu sunucuda çalışır. Tarayıcı yalnızca onun yazdırdığını alır ve Page sekmesi bu sonucu gösterir:
Output sekmesine bakın: içinde hiç PHP kalmamış, yalnızca HTML var. Aynı listenin tarayıcıda JavaScript ile oluşturulmuş hâli şöyle görünür:
const products = [
{ name: "Keyboard", price: 49 },
{ name: "Mouse", price: 19 },
{ name: "Monitor", price: 189 },
];
const ul = document.querySelector("#cart"); // an empty <ul id="cart"> in the HTML
for (const p of products) {
const li = document.createElement("li");
li.textContent = `${p.name}: $${p.price}`;
ul.append(li);
}
PHP sürümü tam bir sayfa gönderir; arama motorları ve yavaş telefonlar onu hemen okur. JavaScript sürümü ise listeyi daha sonra, sayfayı yeniden yüklemeden güncelleyebilir; örneğin ziyaretçi bir ürünü kaldırdığında.
Her dil nerede çalışır
| PHP | JavaScript | |
|---|---|---|
| Çalıştığı yer | web sunucusu (veya bir terminal) | tarayıcı; Node.js, Deno veya Bun ile sunucu |
| Erişebildikleri | dosyalar, veritabanları, ortam, gizli bilgiler | sayfa (DOM), tıklamalar, tarayıcının depolama alanı |
| Ömrü | istek başına bir çalışma | sayfa açık olduğu sürece (tarayıcı) ya da uzun süren tek bir süreç (Node.js) |
| Tipik işi | sayfa oluşturmak, formları işlemek, API'ler, veritabanıyla konuşmak | etkileşim, canlı güncellemeler, tek sayfalık uygulamalar, Node.js sunucuları |
| Ziyaretçi kodu okuyabilir mi | hayır | evet, tarayıcıda |
Son satır güvenlik açısından önemlidir: tarayıcıdaki JavaScript'te olan her şeyi ziyaretçi görebilir; bu yüzden parolalar, API anahtarları ve fiyat kontrolleri sunucuda olmalıdır.
Yan yana sözdizimi
İki dil birbirine benzer, çünkü ikisi de C'den ödünç alır: süslü parantezler, if, for, while, function, return. Farklar ayrıntılardadır:
| Görev | PHP | JavaScript |
|---|---|---|
| Değişken | $name = "Ada"; | let name = "Ada"; |
| Sabit | const MAX = 10; | const MAX = 10; |
| String birleştirme | "Hi " . $name | "Hi " + name |
| Şablon string | "Hi $name" | `Hi ${name}` |
| Liste | ["a", "b"] | ["a", "b"] |
| Anahtar/değer | ["id" => 1] | { id: 1 } |
| Uzunluk | count($list), strlen($s) | list.length, s.length |
| Döngü | foreach ($list as $item) | for (const item of list) |
| Ok fonksiyonu | fn($x) => $x * 2 | (x) => x * 2 |
| Yazdırma | echo "Hi"; | console.log("Hi"); |
İşte PHP'de callback alan bir fonksiyon:
Ve map ile filter'ın dizi metotları olduğu JavaScript'te:
const prices = [12.5, 8, 30, 4.25];
const withTax = prices.map((p) => Math.round(p * 1.2 * 100) / 100);
const cheap = withTax.filter((p) => p < 15);
console.log(withTax.join(", "));
console.log("Under 15: " + cheap.join(", "));
+ operatörü: klasik tuzak
JavaScript'te + hem sayıları toplar hem de stringleri birleştirir; bu yüzden herhangi bir yerdeki bir string toplamayı birleştirmeye çevirir. PHP ikisini ayrı tutar: + her zaman toplar, . her zaman birleştirir.
console.log("10" + 5); // "105"
console.log("10" - 5); // 5
console.log("3" * "4"); // 12
console.log(0.1 + 0.2 === 0.3); // false
İki dilde de gevşek == ve katı === vardır. Tavsiye ikisinde de aynıdır: türler arasında karşılaştırma yapmayı kastetmiyorsanız === kullanın.
PHP'den JavaScript'e veri aktarmak
PHP önce çalışır, bu yüzden tarayıcıdaki JavaScript'in kullanması için veriyi doğrudan sayfaya yazabilir. json_encode bir PHP dizisini geçerli JavaScript'e çevirir:
Output sekmesi, verisi zaten doldurulmuş üretilen betiği gösterir. JSON_HEX_TAG bayrağı < ve > karakterlerini kaçırır; böylece </script> içeren bir değer betiği erken bitiremez. Seçenekler hakkında daha fazlası json_encode sayfasında.
Diğer yön HTTP üzerinden çalışır: tarayıcıdaki JavaScript fetch("/api/cart.php") çağırır, PHP betiği çalışır ve JSON ile yanıt verir:
<?php
// api/cart.php
header('Content-Type: application/json');
echo json_encode(['items' => 3, 'total' => 257]);
const res = await fetch("/api/cart.php");
const cart = await res.json();
console.log(cart.total); // 257
Sunucuda PHP vs Node.js
JavaScript sunucuda Node.js üzerinden çalıştığında karşılaştırma gerçek bir seçime dönüşür.
| PHP | Node.js | |
|---|---|---|
| Model | istek başına temiz bir çalışma, hiçbir şey paylaşılmaz | olay döngüsüne sahip, uzun süre çalışan tek bir süreç |
| I/O beklerken | o isteği bloklar (diğer istekler başka worker'larda çalışır) | bloklamaz, async/await |
| İyi olduğu alan | sunucuda oluşturulan siteler, içerik yönetim sistemleri, klasik CRUD uygulamaları | gerçek zamanlı uygulamalar, websocket'ler, çok sayıda boşta bağlantı |
| Hosting | her paylaşımlı hosting, PHP-FPM | bir Node süreç yöneticisi ya da Vercel gibi bir platform |
| Büyük framework'ler | Laravel, Symfony, WordPress | Express, NestJS, Next.js |
| Ön ve arka yüzde tek dil | hayır | evet |
PHP'nin modeli hoşgörülüdür: bir hata veya bellek sızıntısı yalnızca bir isteği etkiler ve her istek temiz başlar. Node'un modeli durumu ve bağlantıları açık tutabilir; bu sohbet ve canlı panellere uygundur, ama bir çökme veya bloklayan bir döngü o sürecin tüm kullanıcılarını etkiler.
Hangisini öğrenmeli
Etkileşimli her web sayfası için JavaScript'e ihtiyacınız olacak, çünkü tarayıcıların çalıştırdığı tek dil odur. Asıl soru sunucuda neyin çalışacağıdır:
- WordPress, Laravel veya mevcut birçok PHP sitesiyle çalışmak istiyorsanız ya da ucuz bir hostingde dinamik bir site yayınlamanın en basit yolunu arıyorsanız sırada PHP öğrenin. PHP'nin ne olduğu ile başlayın.
- Tüm yığın için tek bir dil istiyorsanız ya da gerçek zamanlı özellikler geliştiriyorsanız JavaScript (Node.js) ile devam edin.
Yaygın bir yol önce HTML ve CSS, sonra tarayıcıda JavaScript, sonra bir sunucu dilidir. Hangi sunucu dilini seçerseniz seçin formlar, oturumlar, veritabanları ve JSON API'leri aynı HTTP fikirleriyle çalışır, bu yüzden bilgi aktarılabilir.
Sıkça Sorulan Sorular
JavaScript, PHP'nin yerini alabilir mi?
Sunucuda evet: Node.js (Express, Next.js veya benzerleriyle) PHP ile aynı işleri yapar. Tarayıcıda ise PHP, JavaScript'in yerini hiç alamaz, çünkü tarayıcılar yalnızca JavaScript çalıştırır. Birçok sitenin sunucuda PHP veya Node, tarayıcıda JavaScript kullanmasının nedeni budur.
Bir PHP değişkenini JavaScript'e nasıl aktarırım?
Sayfaya JSON olarak yazdırın: <script>const user = <?= json_encode($user, JSON_HEX_TAG) ?>;</script>. json_encode stringler, sayılar, diziler ve nesneler için geçerli JavaScript üretir; JSON_HEX_TAG ise verinin içindeki bir </script> ifadesinin etiketi kapatmasını engeller.
JavaScript bir PHP fonksiyonunu çağırabilir mi?
Doğrudan çağıramaz, çünkü PHP sunucuda, JavaScript tarayıcıda çalışır. JavaScript fetch('/api.php?id=3') ile bir HTTP isteği gönderir, PHP betiği çalışır ve bir yanıt (genellikle JSON) yazdırır, JavaScript de bunu okur.
PHP, Node.js'ten hızlı mı?
İş yüküne bağlıdır. Node.js, olay döngüsü sayesinde aynı anda çok sayıda yavaş bağlantıyı (sohbet, websocket'ler) iyi idare eder. OPcache ile PHP 8 sıradan istek ve yanıt sayfalarında hızlıdır. Çoğu sitede darboğaz dil değil, veritabanıdır.