Bu PHP sınıfı kullanmak için uygun bir yolu var mı?

5 Cevap php
class MyImageTestClass{  
    var $url = "nfl2.jpg";  
    var $ID = "one";  

    function __construct() {  

    }  

    function setUrl($value){  
        $this->url = $value;  
    }  

    function setID($newid){  
        $this->ID = $newid ;  
    }  

    function loadImg($value,$newid){  
        $this->setID($newid);  
        $this->setUrl($value);  
        print "<img id=\"$this->ID\" src=\"$this->url\"/>";  
    }  
}  

$n = new MyImageTestClass();  

$n->loadImg("peterson.jpg","two");  

Ya da ben, sonra yazmak loadImg işlevinin dışına setID () ve setURL tutmalı ve

$n->setID();  
$n->setUrl();  
$n->loadImg();  

5 Cevap

Yerine "var" nin "özel" veya "korumalı" veya "kamu" kullanırsınız. Yukarıda özel vb gibi özelliklerini ilan ettikten sonra da, ben yapıcı yöntemine varsayılan bırakacağım.

Şahsen, bu bunu nasıl yapacağını, ama ben PHP yaptık bu yana bir yıl ya da iki oldu ...

class ImageBuilder{  
    private $url;    
    private $ID;    

    function __construct($url, $ID) {  
        $this->setUrl($url); 
        $this->setID($ID);   
    }  

    function setUrl($url){  
        if($url == NULL){
            $this->url = "nfl2.jpg";
        }else{
            $url = htmlentities($url, ENT_QUOTES);
            $this->url = $url;
        }
    }  

    function setID($ID){  
        if($ID == NULL){  
            $this->ID = "one";  
        }else{
            $this->ID = $ID;  
        }   
    }  

    function setImg($url, $ID){  
        $this->setUrl($url);
        $this->setIId($ID);
    }   

    function printImg(){  
        print "<img id=\"{$this->ID}\" src=\"{$this->url}\"/>";  
    }  
}  

$n = new ImageBuilder("peterson.jpg", "two");  

$n->printImg();

Ayrıca, veritabanı döngüsünde kullanmak istedim:

//pretend this is coming out of your DB
$db_img = array(array("url" => "url.png", "id" => "1"), array("url" => "blah.gif", "id" => "2"));

$image = new ImageBuilder();

foreach($db_img as $img){
    $image->setImg($img["url"], $img["id"]);
    $image->printImg();        
} 

Ya bir yol gidebilirsiniz; ana şey, tüm fonksiyonları sınıfın kendi içinde kalmasıdır. Yani gitmek herhangi bir şekilde hiçbir sorun yoktur.

Ama kod, ben sadece tek bir işlevi gerekir şüpheli:

function loadImg($value,$newid){
      print "<img id=\"$newid\" src=\"$value\"/>";
}

Diğer işlevler için gerek yok.

  1. Genel bir kural olarak, yürütülebilir kod HTML embed asla. Muhtemelen bir çiftleşmiş sistem ile daha iyi olurdu.
  2. Açıkça alıcı / ayarlayıcı yöntemlerini beyan etmek istiyorsanız, bu gelen özelliklerini korumalı yapmak mantıklı. Aksi yöntemleri atlar ve okuma / doğrudan özelliklerini yazmak için sizi durdurmak için hiçbir şey ya da başka biri var.
  3. Ne setUrl geçirilen değer () sağlıksız girişi içeriyorsa? Işlenen var Her dinamik bir değer Htmlentities beslenen () veya olmalıdır. Imagine:

    setUrl ('http://somesite.org/dir/?param1 =