
# Giriş
Phasis, saf-PHP bir JavaScript motorudur. ECMAScript'i ana uygulamadaki PHP sürecinde belirteçlere ayırır, ayrıştırır ve çalıştırır; `exec('node …')`, FFI veya özel bir ikili uzantı olmadan. Üç standart PHP uzantısı gerektirir: `ext-mbstring`, `ext-bcmath` ve `ext-curl` (varsayılan `fetch()` aktarımı). `ext-intl` ve `ext-openssl` isteğe bağlıdır. `bcmath` özelliğini içermeyen derlemeler için [Başlarken](https://phasis.inline0.dev/tr/docs/getting-started) bölümüne bakın.

- **Gömülebilir** — `Phasis\Engine` sınıfı aracılığıyla herhangi bir PHP uygulamasına, çerçevesine veya CLI aracına bir JS çalışma zamanı ekleyin.
- **Belirtime uygun** — resmi test262 paketini her kategoride atlama olmadan 100 % başarıyla geçer.
- **Web API'leri** — tam **Web Platform Pack** (URL, TextEncoder/Decoder, atob/btoa, structuredClone, performance, DOMException), tam **Fetch Pack** (fetch, Request, Response, Headers, Body, AbortController/Signal, Blob, File, FormData, EventTarget, tam WHATWG Streams, navigator), ayrıca `crypto` + `SubtleCrypto`, `WebSocket`, `XMLHttpRequest` ve gerçek bir olay döngüsü. İçe aktarılan Web Platform Tests'in 100 %'i geçer.
- **Modern arayüz** — ok işlevleri, sınıflar, async/await, Promises, generators, Symbol, BigInt, Proxy, Reflect, Temporal, Intl, TypedArrays, tam modül desteği.
- **PHP↔JS birlikte çalışabilirliği** — PHP skaler ve dizileri JS içine aktarın (diziler kopyalanır), PHP closure'larını JS işlevleri olarak bağlayın ve JS işlevlerini PHP üzerinden çağırın. PHP nesneleri henüz JS ile paylaşılamaz; bkz. [Paylaşılan nesneler](https://phasis.inline0.dev/tr/docs/interop/shared-objects).

## Phasis neden var

Kullanıcıların sağladığı JavaScript kodunu çalıştırması gereken PHP uygulamaları — şablon motorları, ön uç SSR uyarlamaları, veri doğrulama kuralları, içerik korumalı alanları, başsız test çalıştırıcıları — genellikle Node.js komutunu harici süreç olarak çalıştırır veya bu özelliği atlar. Her iki yol da ek operasyonel karmaşıklık getirir: ikinci bir çalışma zamanı, serileştirme sınırı, alt süreçler arasında boru ağı ve paylaşımlı barındırma için riskli bir dağıtım süreci.

Phasis bu boşluğu kapatır. PHP kodunuz, yalnızca PHP 8.2+ ile `mbstring`, `bcmath` ve `curl` kullanarak JavaScript kodunu belirteçlere ayırabilir, ayrıştırabilir ve çalıştırabilir. Motor bir Composer paketi olarak sunulur ve küçük bir API arayüzü sağlar.

## Ne yapar?

- ECMAScript standart kitaplığının tamamını uygular: `Array`, `String`, `Object`, `Math`, `JSON`, `Date`, `RegExp`, `Map`, `Set`, `Promise`, `Proxy`, `Reflect`, `Symbol`, `BigInt`, `TypedArray`, `Temporal`, `Intl`, generators, async iterators, modules.
- Gerçek dünya JS kitaplıklarının önceden varlığını kontrol ettiği **Web Platform** API'lerini sunar: `URL`, `URLSearchParams`, `TextEncoder`/`TextDecoder`, `atob`/`btoa`, `structuredClone`, `performance`, `DOMException`. Tüm API'ler için [Web API'leri](https://phasis.inline0.dev/tr/docs/compatibility/web-apis) bölümüne bakın.
- Tam Fetch ailesini içeren **`fetch`**'i sunar: `Request`, `Response`, `Headers`, gövde tüketicileri, `AbortController`/`AbortSignal`, `Blob`, `File`, `FormData`, `EventTarget`/`Event` ve tam WHATWG Streams (`ReadableStream`, `WritableStream`, `TransformStream`, BYOB, kuyruklama stratejileri). Gerçek HTTP, PHP'ın `ext-curl` özelliği sayesinde kutudan çıktığı gibi çalışır.
- **`crypto`** + tam `SubtleCrypto` sunar (SHA ailesi, HMAC, AES-GCM/CBC/CTR, RSA-OAEP/PSS/PKCS1, ECDSA, ECDH, HKDF, PBKDF2), **`WebSocket`** (RFC 6455 + değiştirilebilir aktarım) ve **`XMLHttpRequest`** (aynı fetch aktarımı üzerine katmanlı).
- Gerçek bir **olay döngüsü** sunar: `setTimeout`, `setInterval`, `clearTimeout`, `clearInterval`, `queueMicrotask` ve eşzamansız sınırlar arasında değer aktarımı için Stage-3 `AsyncContext`.
- Modern sözdizimini destekler: parçalama, spread/rest, hesaplanan özellikler, isteğe bağlı zincirleme, nullish birleştirme, şablon dizeleri, etiketli şablonlar, sınıflar (özel alanlar, statik bloklar ve dekoratörlerle), üst düzey await.
- Değerleri PHP↔JS sınırında dönüştürür. Skalerler ve diziler içeri kopyalanır, PHP çağrılabilirleri JS işlevlerine dönüşür ve JS sonuçları PHP skalerleri ve dizileri olarak geri döner. Kesin kurallar için [Değer dönüştürme](https://phasis.inline0.dev/tr/docs/interop/values) bölümüne bakın.
- Ana uygulama denetiminde çalışır. Ana uygulama, `fetch` aktarımına ve politika kancalarına sahiptir; olay döngüsü sanal zamanda çalışır ve sabit bir çağrı yığını tavanı, kontrolsüz özyinelemeyi durdurur. Döngü yineleme sınırı vardır; ancak bayt kodu VM'nin çalıştırdığı döngülere henüz uygulanmaz. Dize uzunluğu, çıktı veya duvar saati sınırları yoktur; bkz. [API: setLimit](https://phasis.inline0.dev/tr/docs/api#setlimit).
- Node.js (V8) ile doğrulanır. CI, `main` dalına her gönderimde ve her çekme isteğinde birim ve oracle paketlerini çalıştırır; Web Platform Tests ve popüler paket paketleri ise motor kaynak kodu değiştiğinde çalıştırılır. Tam test262 matrisi elle çalıştırılır ve anlık görüntüsü `COMPAT.md`'e gönderilir. Bkz. [Uyumluluk](https://phasis.inline0.dev/tr/docs/compatibility).

## Ne değildir

Phasis bir JIT derleyicisi değildir. Fırsat buldukça bayt kodu VM'sini kullanan, ağaç üzerinde yürüyen bir yorumlayıcıdır. Dağıtım ağırlıklı iş yüklerinde V8 çalışma zamanının yaklaşık 100 katını bekleyin. Karşılığında sıfır bağımlılık, saf PHP ve ana uygulamanın denetlediği yürütme sunar; doğruluğun ve yalıtımın ham verimden önemli olduğu PHP uygulamalarına JavaScript gömmek için idealdir.

## Nereden başlamalı

- [Başlarken](https://phasis.inline0.dev/tr/docs/getting-started) — yükleyin ve ilk betiğinizi çalıştırın.
- [CLI](https://phasis.inline0.dev/tr/docs/cli) — dosyaları çalıştırma, kaynak kodunu değerlendirme ve AST'yi dökme için `bin/phasis`.
- [API](https://phasis.inline0.dev/tr/docs/api) — PHP uygulamanıza `Phasis\Engine` gömün.
- [Birlikte çalışabilirlik](https://phasis.inline0.dev/tr/docs/interop) — PHP değerlerini ve çağrılabilirleri JavaScript'e aktarın.
- [Uyumluluk](https://phasis.inline0.dev/tr/docs/compatibility) — test262 kapsamı ve desteklenen özellikler.
- [Ayrıştırıcı](https://phasis.inline0.dev/tr/docs/parser) — JavaScript kodunu çalıştırmadan tipli bir AST'ye veya ESTree'ye ayrıştırın.
- [Biçimlendirici](https://phasis.inline0.dev/tr/docs/formatter) — JavaScript, JSON ve CSS kodlarını prettier uyumlu düzenle biçimlendirin.
- [Gelişmiş](https://phasis.inline0.dev/tr/docs/advanced) — mimari, bayt kodu VM, kıyaslamalar ve oracle test modeli.
