2010-02-21 20 views
14

HEREDOC sözdizimini seviyorum, örn. bir şablona koymaya değmeyen, oluşturulan HTML'nin kenar durumları için.HEREDOC kod girintisiyle çakışıyor

Yine de beni bu konuda rahatsız eden tek şey, içerik ve heredoc dizesinin kapanış belirtecinin ilk sütuna yapışmasıdır. Bu, iç içe kod düzenlerini vidalar:

Ne demek istediğimi anlıyorsunuz. Şimdi bu muhtemelen normal HEREDOC kullanılarak çözülebilir değildir. Bu konuda çalışan var mı? Rüyam, otomatik girinti ile HEREDOC sözdizimine sahip olmak olurdu. Ama sanırım bu, kaynak dosyalar için bir ön derleyici yazmadan mümkün değil.

Doğru muyum? Sık sık da var bir sorun

cevap

11

: Ben heredoc kullanıyorum ve gerçekten

bir kod bütün bloğu seçtiğinizde Bir "büyük" bir sorundur :-(yorumlu metin gibi, kodun, iyi girintili değildir (veya IDE'unuzdaki herhangi bir eşdeğerde) daha fazla girintilemek için daha fazla girintiye ya da başka bir şey eklediniz ... Ve heredoc dizelerini bozar: el ile bunları girintisiz bırakmanız gerekir :-(

Ne yazık ki, ben sizin tarif ettiğiniz gibi herhangi bir araç ... görmedim


Sanırım bir çözüm, heredoc dizesini başka bir dosyaya koymak ve buna dahil etmek - normal olarak girintili olabilir gibi dahil etmek; ama aynı zamanda kodun daha az net olmasını sağlayacak bir dosya daha yüklenecek anlamına geliyor.

+0

Yup, başka bir dosya da dahil olmak üzere çok fazla karışıklık getiriyor ... CSS için LESS gibi bir "pre-derleyici" oluşturmayı düşünüyorum, ama çok az kazanç için çok fazla çaba (ve ek bir adım) gibi görünüyor . Çok kötü! –

+6

Bir çeşit "ön derleyici" kullanmak, yazdığınız ve gördüğünüz kodun * (IDE/editörünüzde) * çalıştırılan kod olmadığını ve bunun bir gün veya başka bir karışıklık kaynağı olacağı anlamına gelir. ... –

+0

Konu dışı: Otomatik girinti koduna uygun ayrıştırma yeteneklerine sahip bir editör kullanmayı öneririm. İyi IDE'ler (PhpStorm gibi), açık sekmeler yazarken bile HEREDOC kapanış etiketlerini girmenize izin vermez. – TheOperator

6

FYI, bu sorununuzu çözmez, ancak Ruby programlama dili girintili metin belgelerini destekler.

PHP devlerine bir özellik isteği göndermek ve varolan bir dilin bu sorunu çözdüğünü kanıtlamak için Ruby doc'lerini örnek olarak kullanmak isteyebilirsiniz, bu yüzden PHP de neden olmasın? PHP'de heredocs veya nowdocs kimliklerini tanımlayamazsınız.

2

function foo() { 
    $a = 123; 
    $b = 456; 
    $sum = $a + $b; 
    $html = " 
     <div> 
     <h1>sum a, b</h1> 
     Number a is $a, number b is $b<br> 
     a+b equals <b>$sum<b> 
     </div> 
    "; 
    echo $html; 
} 

Bu oluşturulan html kodu için boşluk ekler ancak mod_pagespeed veya benzer apache mods kullanıyorsa, bu sunucu tüm Gereksiz boşlukları kaldırır: Bu benim çözümdür. okunabilirliği içinde

function bar($sql, $id) { 
    $q= " 
     SELECT 
     name 
     , address 
     , phone 
     FROM users 
     WHERE id = '$id' -- possible mysql inyection 
     LIMIT 1 
    "; 
    $sql->query($q); 
} 

kod kazançları:

Sen çok sıralı sql sorguları için aynı tekniği kullanabilirsiniz. Performansta bir etkisi yoktur ve SQL sorgularını (# veya -)

+2

Bu yaklaşımın olumsuz tarafı, çift tırnakların çıkarılması gerektiğidir. – Tag

1

olarak yorumlayabilirsiniz. Bunu nasıl yapacağınızı merak eden herkes için garip bir çözüm keşfettim. HEREDOC'u başlatan ilk hattınıza gir. HEREDOC'un ilk satırı olan ikinci çizginizde hiçbir boşluk olmamalı, boş bir satır olarak bırakın. Bundan sonra yeni bir satır başlatın, yazarak kodunuzu yazın. Daha sonra beyaz alan olmadan HEREDOC'u tamamlayın. Görsel olarak, HEREDOC'un tamamlanması haricinde tüm kodunuzu girintilendireceksiniz. Vurgu + TAB hala bir sorun, ama en azından kod şimdi kontrol döngüleri, vb, daha okunabilir.

  $html = <<< HTML     //indented line 
               //leave this line empty 
      <div>        //indented line 
       <div>$variable</div>   //indented line 
      </div>        //indented line 
HTML;           //no white space, not indented 
+1

Bu cevabı revizyon 1'e geri döndürdüm. @bgs tarafından yapılan düzenlemeler, Wes'in yapmaya çalıştığı noktayı tamamen yok etti. –

0

İstediğiniz gibi girintilemenizi sağlayan bir işlev yazdım. Aslında oldukça basit bir işlev. https://github.com/chiedolabs/moon-walk-php

Bunu beğendim çünkü kodum bu şekilde temiz kalır.

+0

Aşağıdaki meta yayını incelemenizi rica edebilir miyim? [Kişisel açık kaynaklı kütüphaneler nasıl sunuluyor?] (Https://meta.stackexchange.com/q/229085) –

+0

Evet, sadece @MartijnPieters oku! – Chiedo

+1

* With moonwalk ile: GitHub sayfanızdaki örnek hatalı biçimlendirilmiştir. HEREDOC için kapanış etiketi satırın başında görünmelidir, girinti mümkün değildir. – TheOperator

İlgili konular