- Moderatör
- #1
- Kayıtlı
- 1 Yıl 9 Ay 26 Gün
- Katılım
- 10 Ocak 2025
- Konular
- 163
- Mesajlar
- 257
- Tepkime puanı
- 36
- Online süresi
- 11h 19m
- Puan
- 53
- Konum
- Türkiye
- Web sitesi
- www.zyncra.shop
PHP Heredoc ve Nowdoc: Çok Satırlı Metinler ile Çalışmak
Heredoc, çok satırlı stringler oluşturmak için kullanılan bir yöntemdir. Bu yapı
Buradaki
# Heredoc ile HTML Şablonları Oluşturmak
HTML blokları içerisine değişkenler yerleştirmek için Heredoc kullanmak en temiz yöntemdir; çünkü metin biçimlendirmesini korur ve karakter kaçırma (escaping) işlemini gerektirmez. Kodu çalıştırdığınızda sonuç HTML olduğu için tarayıcı görünümünde net bir şekilde izlenebilir.
Bu örnekte iki önemli detay bulunmaktadır: Dizi elemanları
Güvenlik için, kullanıcıdan alınan veriler HTML içerisine yerleştirilmeden önce mutlaka kaçırılmalıdır. Bu işlemin detayları için
# Nowdoc: Değişken İşlemeyen Metinler
Nowdoc yönteminde tanımlayıcı tek tırnak içerisine alınır:
# Kapanış İşaretinde Girinti Kullanımı
PHP 7.3 sürümüyle birlikte, kapanış işaretinin girintili yazılmasına imkan tanınmıştır. Bu durumda, kapanış işaretindeki girinti miktarı gövdedeki her satırdan otomatik olarak silinir. Bu özellik sayesinde, bir
Ancak, gövdedeki bir satır kapanış işaretinden daha az girintiye sahipse, bu durum bir ayrıştırma hatasına yol açar:
# Heredoc İçinde Nesneler, Diziler ve Metot Çağrıları
Heredoc kullanımı çift tırnak kurallarıyla aynıdır. Basit değişkenler doğrudan çalışırken; tırnaklı dizi anahtarları, iç içe diziler, nesne özellikleri ve metot çağrıları için süslü parantez kullanımı zorunludur.
# Heredoc Yapısını Fonksiyon Argümanı Olarak Kullanmak
PHP 7.3'ten itibaren kapanış işaretinden sonra aynı satırda başka kodlar yer alabilir. Bu sayede bir Heredoc bloğu doğrudan bir fonksiyona parametre olarak gönderilebilir veya bir dizinin içine yerleştirilebilir.
# Sık Yapılan Hatalar: Noktalı Virgül Eksikliği veya İşaretten Sonraki Metinler
Kapanış tanımlayıcısı, açılışta kullanılanla tamamen aynı (büyük/küçük harf duyarlı) olmalıdır ve bu işaretten sonra gelen tüm ifadeler geçerli PHP kodu olmalıdır.
Benzer şekilde, gövdedeki bir satır tanımlayıcı ile başlayıp boşluk veya noktalama işaretiyle devam ederse (örneğin
Sıkça Sorulan Sorular (SSS)
Konu İçeriği — Hızlı Bakış (
cPanel / Web • ⏱ ~5 dk okuma •
Kod: PHP)
01. Heredoc ile HTML Şablonları Oluşturmak
02. Nowdoc: Değişken İşlemeyen Metinler
03. Kapanış İşaretinde Girinti Kullanımı
04. Heredoc İçinde Nesneler, Diziler ve Metot Çağrıları
05. Heredoc Yapısını Fonksiyon Argümanı Olarak Kullanmak
06. Sık Yapılan Hatalar: Noktalı Virgül Eksikliği veya İşaretten Sonraki Metinler
Heredoc, çok satırlı stringler oluşturmak için kullanılan bir yöntemdir. Bu yapı
<<<EOT şeklinde başlatılır, metin alt satırlara yazılır ve kendi satırında yer alan EOT; ifadesiyle sonlandırılır. İçerisinde yer alan değişkenler, tıpkı çift tırnakla tanımlanmış stringlerde olduğu gibi işlenir ve değerleriyle değiştirilir.PHP:
<?php
$name = "Ada";
$items = 3;
$message = <<<EOT
Hello, $name.
You have $items items in your cart.
Quotes "like these" and 'these' need no escaping.
EOT;
echo $message;Buradaki
EOT gibi tanımlayıcılar; bir harf veya alt çizgi ile başlayıp ardından harf, rakam veya alt çizgi ile devam eder. Genellikle içeriğin niteliğini belirten HTML, SQL veya TEXT gibi isimler tercih edilir. PhpStorm gibi bazı geliştirme ortamları, tanımlayıcı HTML veya SQL olarak seçildiğinde gövde metnini ilgili dilin sözdizimine göre renklendirir.# Heredoc ile HTML Şablonları Oluşturmak
HTML blokları içerisine değişkenler yerleştirmek için Heredoc kullanmak en temiz yöntemdir; çünkü metin biçimlendirmesini korur ve karakter kaçırma (escaping) işlemini gerektirmez. Kodu çalıştırdığınızda sonuç HTML olduğu için tarayıcı görünümünde net bir şekilde izlenebilir.
PHP:
<?php
$product = [
"name" => "Mechanical keyboard",
"price" => 89.5,
"tags" => ["usb-c", "hot-swap", "rgb"],
];
$tagList = "";
foreach ($product["tags"] as $tag) {
$tagList .= "<li>$tag</li>";
}
$price = number_format($product["price"], 2);
echo <<<HTML
<style>
.card { font-family: sans-serif; border: 1px solid #ccc; padding: 12px; width: 240px; }
.price { color: #0a7; font-weight: bold; }
</style>
<div class="card">
<h2>{$product['name']}</h2>
<p class="price">\$$price</p>
<ul>$tagList</ul>
</div>
HTML;Bu örnekte iki önemli detay bulunmaktadır: Dizi elemanları
{$product['name']} şeklinde süslü parantez içine alınmış ve metindeki gerçek dolar işareti \$ şeklinde kaçırılmıştır. Tanımlayıcıyı değiştirip kodu tekrar çalıştırarak sonuçları görebilirsiniz.Güvenlik için, kullanıcıdan alınan veriler HTML içerisine yerleştirilmeden önce mutlaka kaçırılmalıdır. Bu işlemin detayları için
htmlspecialchars fonksiyonu incelenmelidir.# Nowdoc: Değişken İşlemeyen Metinler
Nowdoc yönteminde tanımlayıcı tek tırnak içerisine alınır:
<<<'EOT'. Bu yapıda metin içerisindeki hiçbir ifade işlenmez; dolayısıyla dolar işaretleri ve ters eğik çizgiler yazıldığı gibi kalır. Özellikle düzenli ifadeler, kod örnekleri veya içerisinde $ karakteri geçen metinler için Nowdoc kullanılması uygundur.PHP:
<?php
$name = "Ada";
$heredoc = <<<EOT
Hello, $name\tTab
EOT;
$nowdoc = <<<'EOT'
Hello, $name\tTab
EOT;
echo $heredoc . "\n";
echo $nowdoc . "\n";# Kapanış İşaretinde Girinti Kullanımı
PHP 7.3 sürümüyle birlikte, kapanış işaretinin girintili yazılmasına imkan tanınmıştır. Bu durumda, kapanış işaretindeki girinti miktarı gövdedeki her satırdan otomatik olarak silinir. Bu özellik sayesinde, bir
if bloğu veya fonksiyon içerisinde kullanılan Heredoc yapıları, string içeriğine fazladan boşluk eklemeden kodun genel girinti düzenine uyum sağlayabilir.PHP:
<?php
function welcome(string $name): string
{
return <<<TEXT
Hi $name,
this line keeps 2 extra spaces.
Bye.
TEXT;
}
echo welcome("Grace");
echo "\n---\n";
echo json_encode(welcome("Grace"));json_encode satırı, sonucun karakter bazlı görünmesini sağlar: Kapanıştaki TEXT; ifadesi 8 boşluk içeride olduğu için her satırdan 8 boşluk kaldırılmıştır.Ancak, gövdedeki bir satır kapanış işaretinden daha az girintiye sahipse, bu durum bir ayrıştırma hatasına yol açar:
PHP:
$html = <<<HTML
<p>Hello</p>
HTML;PHP:
PHP Parse error: Invalid body indentation level (expecting an indentation level of at least 4) in /home/index.php on line 3# Heredoc İçinde Nesneler, Diziler ve Metot Çağrıları
Heredoc kullanımı çift tırnak kurallarıyla aynıdır. Basit değişkenler doğrudan çalışırken; tırnaklı dizi anahtarları, iç içe diziler, nesne özellikleri ve metot çağrıları için süslü parantez kullanımı zorunludur.
PHP:
<?php
$order = ["id" => 1042, "items" => ["pen", "ink"]];
$date = new DateTimeImmutable("2026-03-14 09:30");
// A plain function cannot be called inside the string,
// but a variable holding a function name or closure can.
$upper = 'strtoupper';
$count = fn(array $a) => count($a);
echo <<<TEXT
Order #{$order['id']}
First item: {$order['items'][0]}
Placed: {$date->format('Y-m-d H:i')}
Items: {$count($order['items'])}
Shout: {$upper('done')}
TEXT;# Heredoc Yapısını Fonksiyon Argümanı Olarak Kullanmak
PHP 7.3'ten itibaren kapanış işaretinden sonra aynı satırda başka kodlar yer alabilir. Bu sayede bir Heredoc bloğu doğrudan bir fonksiyona parametre olarak gönderilebilir veya bir dizinin içine yerleştirilebilir.
sprintf kullanımıyla, yer tutucuları daha sonra doldurulan dinamik şablonlar oluşturmak mümkündür.PHP:
<?php
$template = <<<TEXT
Dear %s,
your invoice #%05d for %.2f EUR is due on %s.
TEXT;
echo sprintf($template, "Ada", 42, 129.9, "2026-04-01"), "\n\n";
$lines = [<<<A
first entry
A, "second entry"];
print_r($lines);# Sık Yapılan Hatalar: Noktalı Virgül Eksikliği veya İşaretten Sonraki Metinler
Kapanış tanımlayıcısı, açılışta kullanılanla tamamen aynı (büyük/küçük harf duyarlı) olmalıdır ve bu işaretten sonra gelen tüm ifadeler geçerli PHP kodu olmalıdır.
EOT; bir ifadeyi sonlandırırken, EOT, bir argüman listesinin devam ettiğini gösterir. İşaretten hemen sonra gelen bir harf veya rakam (EOTX;), tanımlayıcıyı gizler; bu durumda string dosyanın sonuna kadar devam eder ve PHP syntax error, unexpected end of file hatası verir.Benzer şekilde, gövdedeki bir satır tanımlayıcı ile başlayıp boşluk veya noktalama işaretiyle devam ederse (örneğin
EOT is the marker), string erken sonlandırılır ve satırın kalanı PHP kodu olarak yorumlanmaya çalışılır (syntax error, unexpected identifier "is"). Bu sorunları önlemek için, metin içerisinde satır başında hiç yer almayacak HTML veya SQL gibi tanımlayıcılar seçmeniz önerilir.Sıkça Sorulan Sorular (SSS)
Soru 1: Paylaşılan PHP örneği canlı (production) ortamda kullanılabilir mi?
Evet. Konudaki kod bloğu bellek güvenliği, hata yakalama ve performans kriterleri gözetilerek hazırlanmıştır; kendi proje mimarinize uyarlayarak doğrudan kullanabilirsiniz.
Soru 2: PHP Heredoc ve Nowdoc: Çok Satırlı Metinler ile Çalışmak uygulamasında en sık yapılan hata nedir?
Girdi doğrulamasını (validation) ve zaman aşımı/kaynak sınırlarını varsayılan değerlerde bırakmaktır. Rehberdeki yapılandırma adımlarını eksiksiz uygulayarak olası darboğazları önleyebilirsiniz.
Evet. Konudaki kod bloğu bellek güvenliği, hata yakalama ve performans kriterleri gözetilerek hazırlanmıştır; kendi proje mimarinize uyarlayarak doğrudan kullanabilirsiniz.
Soru 2: PHP Heredoc ve Nowdoc: Çok Satırlı Metinler ile Çalışmak uygulamasında en sık yapılan hata nedir?
Girdi doğrulamasını (validation) ve zaman aşımı/kaynak sınırlarını varsayılan değerlerde bırakmaktır. Rehberdeki yapılandırma adımlarını eksiksiz uygulayarak olası darboğazları önleyebilirsiniz.

