好..this的代碼段將工作:
class Foo
{
protected $secret = null;
public function __construct($data)
{
$this->secret = $this->makeSecret($data);
}
public function makeSecret($data)
{
return md5($data);
}
}
$bar = new Foo('lorem ipsum');
這是沒有問題的。
但是你應該知道,這被認爲是一種不好的做法 - 在構造函數中進行計算/工作。它使得這個類幾乎不可測試。相反,如果需要在將對象「釋放」到代碼的其餘部分之前執行一些計算,則應該使用工廠。沿着線的東西:
class ImageFactory
{
public function build($image, $location)
{
$instance = new Image($image, $location);
$instance->prepare();
return $instance;
}
}
類將需要一些變化:
class Image
{
protected $_image; // you were leaking abstraction
protected $_extension;
protected $_mime;
protected $_size;
protected $_location;
protected $_description;
public function __construct($image, $location)
{
$this->_image = $image;
$this->_location = $location;
}
public function prepare()
{
$this->_extension = $this->getExtension();
$this->_mime = $this->getMime();
$this->_size = $this->getSize();
}
private functions fallow.....
}
現在,當您需要創建新的對象,你這樣做:
$factory = new ImageFactory;
$image = $factory->build($file, '/uploads/');
當然實例ImageFactory可以重複使用,並且如果所有圖像使用相同的$location
,那麼您將在初始化時將該變量傳遞給工廠。而工廠將能夠「記得」,並通過它創建的所有圖像:
$factory = new ImageFactory('/uploads/');
$img1 = $factory->build($file);
$img2 = $factory->build($something_else);
這實際上是一個應該如何處理創建多個對象,這都需要訪問同一個數據庫連接實例。
你應該學會檢查你的錯誤日誌。 500內部服務器錯誤是沒有意義的沒有您有權訪問的日誌的上下文。檢查你的PHP.ini的記錄位置。通常情況下,日誌記錄未啓用。你應該啓用它。 – Brad 2012-03-31 23:55:11
調用方法是好的(但你可以通過一個簡單的例子驗證這個)。 – 2012-03-31 23:55:19
呃???什麼???我沒有得到這個問題(或者錯過很多信息)。 – PeeHaa 2012-03-31 23:56:09