まあ..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');
を。
しかし、コンストラクタで計算/作業を行うことは悪い習慣と考えられます。それはそのクラスを事実上テストすることができません。代わりに、オブジェクトをコードの残りの部分に「解放」する前にある計算を実行する必要がある場合は、ファクトリを使用する必要があります。線に沿って何か:もちろん
$factory = new ImageFactory;
$image = $factory->build($file, '/uploads/');
のインスタンスを:あなたはあなたが新しいオブジェクトを作成する必要がある場合に今
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.....
}
:
class ImageFactory
{
public function build($image, $location)
{
$instance = new Image($image, $location);
$instance->prepare();
return $instance;
}
}
クラスはいくつかの変更が必要になりますImageFactoryは再利用可能で、すべての画像が同じ$location
を使用している場合は、その変数を初期化時にファクトリに渡します。そして、工場は「それを覚えている」と、それが作成するすべての画像に渡すことができるようになります:
$factory = new ImageFactory('/uploads/');
$img1 = $factory->build($file);
$img2 = $factory->build($something_else);
これは、1つはすべて同じDB接続インスタンスへのアクセスを必要とする複数のオブジェクトを作成して対処すべきか、実際にあります。
エラーログを確認する方法を学ぶ必要があります。 500内部サーバーエラーは、アクセス権のあるログのコンテキストなしでは無意味です。ロギングの場所については、PHP.iniを確認してください。多くの場合、ログは有効になっていません。それを有効にする必要があります。 – Brad
メソッドを呼び出すのはうまくいきます(ただし、単純な例でこれを確認できました)。 –
Huh ???何???私は質問(またはprobの情報がたくさんありません)を取得しません。 – PeeHaa