
# Birlikte çalışabilirlik

Phasis, uygulamanızla aynı PHP sürecinde çalışır; bu nedenle değerler PHP ile JavaScript arasında JSON, boru hattı veya ikinci bir çalışma zamanı olmadan geçer. Geçiş **dönüştürme** yoluyla gerçekleşir: skalerler JS ilkel değerlerine eşlenir, PHP dizileri yeni JS dizilerine ve nesnelerine kopyalanır, JS sonuçları ise tekrar PHP dizilerine kopyalanır. JS'ın dönüştürülmüş bir dizide yaptığı değişiklik, PHP dizisinde görünmez. Canlı kalan tek istisna, doğrudan PHP içine çağrı yapan JS işlevlerine dönüşen PHP çağrılabilirleridir.

Bu bölüm kuralları ele alır.

## Sayfalar

- **[Değerler](https://phasis.inline0.dev/tr/docs/interop/values)** — sayıların, dizelerin, Boole değerlerinin, null/undefined değerlerinin, dizilerin, nesnelerin ve dönüştürülemeyen değerlerin iki yöndeki dönüştürme tabloları.
- **[Ana makine işlevleri](https://phasis.inline0.dev/tr/docs/interop/host-functions)** — PHP `callable` işlevlerini `$engine->setGlobal()` aracılığıyla JS işlevi olarak bağlama. Bağımsız değişken dönüşümü, dönüş değerleri ve istisnaların davranışı.
- **[Paylaşılan nesneler](https://phasis.inline0.dev/tr/docs/interop/shared-objects)** — bugün bir PHP nesnesini JS'e aktardığınızda ne olduğu (`undefined` olarak gelir) ve bunun yerine diziler ve kapanımlarla PHP durumu ile davranışını nasıl sunacağınız.
- **[Fetch aktarımı](https://phasis.inline0.dev/tr/docs/interop/fetch-transport)** — varsayılan `ext-curl` HTTP arka ucunu Guzzle, Symfony HttpClient, bir taklit veya tümünü reddeden bir aktarımla değiştirme. Ayrıca izin listesi, başlık ekleme ve kiracı başına bağlama için ilke kancası.
- **[Çerez kavanozu](https://phasis.inline0.dev/tr/docs/interop/cookie-jar)** — fetch'ler arasında çerezleri saklamak için `get(url)`/`set(url, header)` kavanozu bağlama. Bellek içi, Symfony BrowserKit veya JS tarafı `Map`.
- **[AbortController kalıpları](https://phasis.inline0.dev/tr/docs/interop/abort-patterns)** — zaman aşımı, yarış, yayılım, `AbortSignal.any` / `.timeout` ve özel bir PHP aktarımının aktarım sırasında sinyali nasıl yokladığı.

## Hızlı örnek

```php
$engine = new Phasis\Engine();

// 1. Bind a PHP callable as a JS function
$engine->setGlobal('greet', fn (string $name) => "Hello, $name!");
echo $engine->eval('greet("world")');  // → Hello, world!

// 2. Let JS change PHP state through a closure
$total = 0;
$engine->setGlobal('add', function (int $n) use (&$total): void { $total += $n; });
$engine->eval('add(2); add(3)');
echo $total;  // → 5

// 3. Call a JS function from PHP
$engine->eval('function add(a, b) { return a + b; }');
echo $engine->call('add', 2, 3);  // → 5
```

## Ayrıca bkz.

- [API başvurusu](https://phasis.inline0.dev/tr/docs/api) — tam `Phasis\Engine` kapsamı.
- [Web API'leri](https://phasis.inline0.dev/tr/docs/compatibility/web-apis) — Web Platform Pack ve Fetch Pack aynı birlikte çalışabilirlik katmanını kullanır.
