Nun .this Codefragment wird wie erwartet:
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');
Das ist kein Problem.
Aber Sie sollten wissen, das wird als eine schlechte Praxis betrachtet - um Berechnung/Arbeit im Konstruktor zu tun. Es macht diese Klasse praktisch untestabil. Wenn Sie vor dem Freigeben des Objekts für den Rest des Codes einige Berechnungen durchführen müssen, sollten Sie stattdessen eine Factory verwenden. Etwas entlang der Linien von:
class ImageFactory
{
public function build($image, $location)
{
$instance = new Image($image, $location);
$instance->prepare();
return $instance;
}
}
Die Klasse würde einige Änderungen benötigen:
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.....
}
Nun, wenn Sie neue Objekt erstellen müssen Sie tun:
$factory = new ImageFactory;
$image = $factory->build($file, '/uploads/');
Natürlich ist die Instanz ImageFactory kann wiederverwendbar sein, und wenn alle Ihre Bilder dasselbe $location
verwenden, übergeben Sie diese Variable bei der Initialisierung an factory. Und die Fabrik der Lage wäre, „sich erinnern“ und übergeben an alle Bilder, die es schafft:
$factory = new ImageFactory('/uploads/');
$img1 = $factory->build($file);
$img2 = $factory->build($something_else);
Dies ist tatsächlich, wie man mit dem Erstellen von mehreren Objekten umgehen sollte, die alle Zugang brauchen, um gleiche DB-Verbindung Instanz.
Sie sollten lernen, Ihre Fehlerprotokolle zu überprüfen. 500 Interner Serverfehler ist bedeutungslos ohne Kontext von den Protokollen, auf die Sie Zugriff haben. Überprüfen Sie Ihre PHP.ini auf den Speicherort für die Protokollierung. Oft ist die Protokollierung nicht aktiviert. Sie sollten es aktivieren. – Brad
Aufruf Methoden ist in Ordnung (aber Sie könnten dies mit einem einfachen Beispiel verifiziert haben ..) –
Huh ??? Was??? Ich bekomme die Frage nicht (oder prob. Fehlt jede Menge Informationen). – PeeHaa