Ben sınıfları fonksiyonları bir sayfada daha sonra 1 kez kullanmak için yeni bir nesne oluşturmak için gereken MUSUNUZ?

4 Cevap php

Şu anda bu FilterHTML($string) Ben olsa kullanmak istiyorum bir SINIF buldu ve ben de tüm OOP ve sınıfları hakkında çok şey bilmiyorum gibi PHP bazı HTML filtrelemek için bir işlev çağırın.

Ben bu yüzden bu gibi yapmak istiyorum işlevi zaten dosyanın bir sürü site çapında denir çünkü sadece benim varolan bir işlev çağrısı bu sınıf kullanmak istiyorum:

function FilterHTML($string) {
    $filter = new HtmlFilter;
    $safeHTML = $filter->filter($contents);
    echo $safeHTML . "\n";
}

FilterHTML($string);

FilterHTML($string);

FilterHTML($string);

FilterHTML($string);
...

Ben $ filter = new HtmlFilter gerçekleştirmek; yeni bir nesne oluşturma ama ben kaybettim nerede olduğunu,

Ben new HtmlFilter Bu yeni bir nesne oluşturma olmak gerek, FilterHTML ($ string) fonksiyonunu aynı sayfada 10 kez aramak diyelim; Bütün 10 kez ya da 1 defa denebilecek sonra bu sınıfları 10 kez fonksiyonları kullanabilir veya yeni bir nesne REATE ve sonra tüm 10 kez işlevlerini kullanmak?

Bu gibi ya da yukarıdaki gibi kullanabilirsiniz

$filter = new HtmlFilter;

function FilterHTML($string) {
    $safeHTML = $filter->filter($contents);
    echo $safeHTML . "\n";
}

FilterHTML($string);

FilterHTML($string);

FilterHTML($string);

FilterHTML($string);
...

4 Cevap

Hayır, sadece bir kez örneğini ve tekrar tekrar aramak gerekir. örneğin:

$filter->filter($contents);
$filter->filter($anotherString);
...

Bu işlev için daha mantıklı filtre sınıfı içinde static olarak ilan edilmesi için yapacak, böylece daha sonra bir HtmlFilter örneğini gerekmez, ancak yerine durağan filter işlevini çağırdığınızda Bir şey filtrelemek istiyorum:

<?php
    class HTMLFilter {
        public static function filter($html) {
           ...
        }
    }
?>

echo HTMLFilter::filter($contents);

Eğer bulduk sınıfını değiştirmek için gerek kalmadan tekrar tekrar nesneyi kullanmak için birçok seçenek vardır.

1) You can pass the object to your function.
2) Use a static function variable

function FilterHTML($string) {
  static $filter = null;
  if ( is_null($filter) ) {
    $filter = new HtmlFilter;
  }
  $safeHTML = $filter->filter($contents);
  echo $safeHTML . "\n";
}

Nesnelerinin her has bir HtmlFilter nesne (yeniden) kullanın böylece 3) kendi sınıf Yazın

class MyFilter {
  protected $htmlfilter;
  public function __construct() {
    $this->htmlFilter = new HtmlFilter;
    // $this->htmlFilter->setOptions(...);
    // $this->htmlFilter->foo(...);
  }
  public function filter($contents) {
    return $this->htmlFilter->filter($contents);
  }
}

4) ...

Neden $ filtre değişken küresel yapmak değil mi? Istediğiniz gibi bir kez sınıf oluşturduktan sonra, birçok kez olarak işlevini çağırabilirsiniz yolu.

    $filter = new HtmlFilter;

    function filterHTML($string) {
        global $filter;
        $safeHTML = $filter->filter($contents);
        echo $safeHTML . "\n";
    }
.
.
.
$x = filterHTML($a);
$y = filterHTML($b);
$z = filterHTML($c);
.
.
.

Duruma göre değişir. Bu sınıfa kadar tamamen bulunuyor ve nasıl yapılır.

Bu durumda, looks Tüm bu sınıf yok gibi bir argüman olarak bir dize alır tek bir yöntem, filter(), maruz olduğu. Neredeyse kesinlikle filtre yeni dizeler geçirmek () yöntemi ve işe sahip olmaya devam edebilirsiniz.

Eğer inşaat sırasında HTML geçmek olsaydı şimdi, diğer taraftan, (yeni HtmlFilter (...)), sonra her zaman tekrar nesnesi örneğini, ya da bulmak gerekebilir ya ihtiyaç olabilir nesnenin devlet yeni bir dizi ile sıfırlanabilir eğer.

Diğer bir deyişle, sınıf ile gelen belgeleri okuyun. Hiçbir belge varsa, bu tür HTML Purifier gibi, yerine başka bir şey kullanarak düşünebilirsiniz


Edit: Ben ilanıyla biraz sırasında sorunun doğası değişti, bu yüzden bu geçerli ifadeler% 100 geçerli değildir. :)