- Konu sahibi
- #1
PHP echo nedir?
PHP’de
echo, bir veya daha fazla ifadeyi çıktı akışına yazan dil yapısıdır. En sık HTML içine metin, değişken değeri veya hesaplama sonucunu yerleştirmek için kullanılır. Web ortamında çıktı HTTP yanıtına, komut satırında ise genellikle terminale gider; echo tek başına sayfaya kalıcı veri kaydetmez.Temel kullanım
PHP kodu
<?php ile başlatılır. Metin yazdırmak için değeri tek veya çift tırnak içine alabilirsiniz:
Kod:
<?php
echo "Merhaba dünya!";
?>
Bu kod çalıştırıldığında HTTP yanıtında
Merhaba dünya! metni oluşur ve PHP dosyasını çalıştıran web sunucusu bunu tarayıcıya gönderir. PHP dosyası sunucuda PHP desteği olan bir ortamda çalıştırılmalıdır; dosyayı yalnızca tarayıcıda açmak PHP kodunu çalıştırmaz.Değişken ve hesaplama yazdırma
echo, değişkenleri ve ifadelerin sonuçlarını da yazdırabilir:
Kod:
<?php
$kullanici = "Ayşe";
$urunAdedi = 3;
echo "Merhaba, " . $kullanici . "!";
echo "<p>Ürün adedi: " . $urunAdedi . "</p>";
echo "<p>Toplam: " . ($urunAdedi * 2) . "</p>";
?>
Burada nokta (
.) metinleri birleştirmek için kullanılır. Parantez içindeki çarpma işlemi önce hesaplanır, ardından sonuç yazdırılır. echo çıktıyı biçimlendirmez; HTML etiketi verirseniz tarayıcı bu etiketi HTML olarak yorumlar.echo ile print arasındaki temel fark
İkisi de çıktı üretir; ancak günlük kullanımda seçim yaparken şu ayrım yeterlidir:
| Özellik | echo | |
|---|---|---|
| Değer döndürme | Değer döndürmez | Başarılı çalışmada 1 döndürür |
| Birden fazla ifade | Virgülle birden fazla değer alabilir | Tek ifade alır |
| Yaygın kullanım | Basit çıktı ve HTML üretimi | Çıktı üretirken dönüş değerine ihtiyaç duyulan durumlar |
Örneğin birden fazla metni şu şekilde yazdırabilirsiniz:
Kod:
<?php
echo "Ad: ", $kullanici, "<br>Adet: ", $urunAdedi;
?>
Bu seçim performans garantisi veya güvenlik yöntemi değildir; kodun okunabilirliği ve ihtiyacınız belirleyici olmalıdır.
Kullanıcı verisini güvenli yazdırma
Form, URL veya başka bir dış kaynaktan gelen metni HTML içine doğrudan eklemek, özel karakterlerin HTML olarak yorumlanmasına yol açabilir. HTML bağlamında metin yazdırırken
htmlspecialchars() kullanın:
Kod:
<?php
$girdi = $_GET['ad'] ?? '';
$ad = is_string($girdi) ? $girdi : '';
echo htmlspecialchars($ad, ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8');
?>
Bu örneğin önkoşulu, PHP’nin çalıştığı bir web sunucusu ve bir tarayıcı isteğidir. Adres satırında
?ad=Ayşe gibi bir değerle denediğinizde beklenen çıktı, adın metin olarak görünmesidir. Özel karakterler kod yerine metin olarak görünüyorsa kaçış işlemi çalışıyordur. ?? '' eksik parametreyi karşılar; tür kontrolü yapmaz. ?ad[]=Ayşe gibi dizi gelen isteği is_string() kontrolüyle eleriz. ENT_SUBSTITUTE, bozuk UTF-8 dizilerini yerine koyma karakterine çevirir.Sık yapılan hatalar
- Tırnakları kapatmamak:
echo "Merhaba;gibi eksik tırnaklar sözdizimi hatasına neden olur. - Değişken adını tırnak içine almak:
echo '$kullanici';değişkenin değerini değil, değişken adını yazdırır. Değeri metin içine katmak için çift tırnak veya birleştirme kullanın. - PHP kodunu çalıştırmadan beklemek:
.phpdosyasını PHP yorumlayıcısı olmayan bir ortamda açarsanızechoçalışmaz. - Dış veriyi doğrudan HTML’e basmak: Kullanıcıdan gelen değeri uygun bağlama göre kaçışlamadan yazdırmayın.
Basit bir metin için
echo kullanın; HTML ile veri birleştirirken çıktının hangi bağlamda kullanılacağını belirleyin ve kullanıcı verisini HTML metni olarak basmadan önce kaçışlayın. Sonraki adım olarak değişken, koşul veya döngü çıktısını ayrı ayrı test ederek beklenen HTTP yanıtını doğrulayabilirsiniz.Sık sorulan sorular
echo ile HTML etiketi yazdırabilir miyim?
Evet.
echo "<strong>Başlık</strong>"; gibi bir kullanım HTML çıktısı üretir. Ancak dış veriyi etiket özniteliğine veya JavaScript koduna ekliyorsanız HTML metni için kullanılan kaçış yöntemi yeterli olmayabilir; kaçış işlemini hedef bağlama göre seçin.echo ile değişkenin türünü görebilir miyim?
echo değeri metne dönüştürerek yazdırır; ayrıntılı tür ve yapı incelemek için geliştirme sırasında var_dump() daha uygundur. Üretim çıktısında hata ayıklama bilgilerini kullanıcıya göstermeyin.