Bu PHP kodu geliştirilebilir?

8 Cevap

Aşağıda bu basit görevi yapmak için daha iyi bir yolu var mı? Bir dizi ya da başka bir yöntemle gibi?

<?PHP
// current way
if ($city != NULL) {
    $city = FilterALLHTML($city);
}
if ($state != NULL) {
    $state = FilterALLHTML($state);
}
if ($title != NULL) {
    $title = FilterALLHTML($title);
}
if ($division != NULL) {
    $division = FilterALLHTML($division);
}
?>

İşte benim şimdiki işlevi

function FilterALLHTML($document) {
    //old array line //"'<[\/\!]*?[^<>]*//?//>'si",// strip html
    $text = strip_tags($document);
    $search = array ("/f.?u.?c.?k/i",
    			 "/(s|$).?h.?i.?t/i",
    			 '/(potspace|mycrib|palbolt)/i');
    $text = preg_replace ($search, '', $text);	
    return $text;
}


UPDATE - Ok my new function after the suggestions from this post thanks guys

function FilterALLHTML($var) {
    //old array line //"'<[\/\!]*?[^<>]*//?//>'si",// strip html
    if ($var != null){
    	$text = strip_tags($var);
    	$search = array ("/f.?u.?c.?k/i",
    				 "/(s|$).?h.?i.?t/i",
    				 '/(potspace|mycrib|palbolt|pot space)/i');
    	$text = preg_replace ($search, '', $text);	
    	return $text;
    }
    return null;
}

8 Cevap

Change your FilterALLHTML function to do the null check and have it return null? Then you can throw away all the ifs.

Örnek:

function FilterALLHTML($input)
{
    if ($input === null)
    	return null;

    // Original code, I'll just use strip_tags() for a functional example
    return strip_tags($input);
}

Edit:

Ben dize değişmezleri yerine değişken adlarını kullanarak bir fikir gibi gerçekten yok gibi, değişken değişkenler için alternatif paylaşımı gibi hissettim. Kaynaklar tüm yol :)

function FilterALLHTML(&$text)
{
    if ($text !== null)
    {
    	// Omitted regex bit for simplicity
    	$text = strip_tags($text);
    }
}

$city = "<b>New York</b>";
$state = null;
$title = "<i>Mr.</i>";

$fields = array(&$city, &$state, &$title);
foreach ($fields as &$var)
    FilterALLHTML($var);

(note: FilterALLHTML uygulama ilk örnekte farklıdır )

Evet, PHP, en variable variables kullanın.

$vars = array('city','state','title','division');
foreach($vars as $v) {
    if ($$v != null) $$v = FilterAllHTML($$v);
}

Eğer tüm değişkenler önceden tanımlanmış bir gerçeği biliyorum, o zaman boş çek gerekmez. Aksi halde, boş çek tetiklemesini E_NOTICE hataları önleyecektir.

foreach (array('city', 'state', 'title', 'division') as $var) {
    if ($$var != null) {
        $$var = FilterALLHTML($$var);
    }
}

Gibi Thorarin yerine olsa boş için FilterALLHTML işlev kontrolünü sahip öneririm.

zombat cevabı iyi, ama sen gerçekten ya null için kontrol edilmesi gerektiğini eklemek istiyorum. Nedense FilterAllHTML o null olarak için kontrol koymak gerekir null değerleri ile ilgili bir sorun varsa, FilterAllHTML işlev tanımı.

$vars = array('city', 'state', 'title', 'division');
foreach($vars as $var) {
    $$var = FilterAllHTML($$var);
}

Eh, zaten tam olarak aynı şeyi dört kez çünkü bir işlevi yazma düşünebiliriz.

FilterALLHTML özel bir işlev değil varsayarsak.

function Filter($var)
{
    if ($var != null)
    {
        return FilterALLHTML($var);
    }
    return null;
}

Ya da sadece FilterALLHTML işlevi boş kontrolünü içerir ve gerekirse, oradan boş dönmek.

Eğer FilterALLHTML değiştirebilirsiniz Yani, o bunu şöyle yapardım:

function FilterALLHTML($var)
{
    if ($var == null)
    {
        return null;
    }
    else
    {
        //do your filtering
       return $filteredVar;
    }
}

Thorarin cevabı ekleme, girdi olarak bir dizi kabul etmek için sizin filterall işlevini değiştirmek ve diziler 'içeriğini değiştirmek olacaktır referansla geçirerek yapabilirsiniz.

$tofilter = array($city,$state,$division,$title);


filterall($tofilter);

Ben her zaman tekrarlanan atamaları atlamak için referans parametreler geçebileceği, bu sözü görmedim:

function FilterALLHTML(&$var)
{
    if ($var == null)
    {
        $var = null;
    }
    else
    {
        $var = strip_tags($var);
    }
}

Ben de dizide başvuruları saklayabilirsiniz inanıyorum ama bunu denemedim.

foreach (array(&$city, &$state, &$title, &$division) as $var)
{
  FilterALLHTML($var);
}

Seni performansını artırabilirsiniz sanmıyorum, ama sözdizimi kısaltabilir, ancak tercüman aynı varlık sona erecek

<?PHP
    $city = ($city == NULL) ? "default value" : FilterALLHTML($city);
    $state = ($state == NULL) ? "default value" : FilterALLHTML($state);
    $title = ($title == NULL) ? "default value" : FilterALLHTML($title);
    $division = ($division == NULL) ? "default value" : FilterALLHTML($division);
?>

"Varsayılan değer" değişken null eğer değer olmak istiyorum ne ile değiştirilmesi gereken