Well ..выполняется фрагмент кода будет работать, как ожидалось:
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);
Это на самом деле, как следует иметь дело с созданием нескольких объектов, которые все нуждаются в доступе к тому же экземпляру соединения DB.
Вы должны научиться проверять свои журналы ошибок. 500 Внутренняя ошибка сервера не имеет смысла без контекста из журналов, к которым у вас есть доступ. Проверьте свой PHP.ini для местоположения ведения журнала. Часто время регистрации не разрешено. Вы должны включить его. – Brad
методы вызова в порядке (но вы могли бы проверить это с помощью простого примера ..) –
Huh ??? Какие??? У меня не возникает вопрос (или проблема с отсутствием большого количества информации). – PeeHaa