У меня есть простой класс «размеры», содержащий свойство width / height и конструктор для их установки.
У меня есть функция (для изменения размеров), которая принимает два объекта измерений - один для изменения размера, а другой содержит максимальный размер. Следует уменьшить размеры первого параметра, чтобы они «вписывались» во второй параметр.
Затем возвращается первый, только что измененный размер.
Вызывающий объект передает объект измерений и возвращает возвращаемое значение в другое - потому что он должен сохранить исходный объект. Но тот, который передается в функцию, модифицируется.
Это было удивительно, так как я не взял это по ссылке:
private function scale_image_dimensions(Dimensions $dimensions, Dimensions $max_size) {
if( $dimensions->width > $max_size->width ) {
$dimensions->height = $dimensions->height / ($dimensions->width / $max_size->width);
$dimensions->width = $max_size->width;
}
if( $dimensions->height > $max_size->height ) {
$dimensions->width = $dimensions->width / ($dimensions->height / $max_size->height);
$dimensions->height = $max_size->height;
}
return $dimensions;
}
Как указать, что я хочу, чтобы функция делала копию переданных в нее объектов, а затем возвращала один из них?
обновление
Кажется, что-то еще подозрительно - я изменил аргумент с $dimensions
на $adimensions
и поставил $dimensions = $adimensions
в начале функции.
Но переменная вызывающего все еще изменяется! Работает ли задание также по ссылке? Я имею в виду ... Нет способа перегрузить оператор присваивания или конструктор копирования, так что ... что мне делать? Если мне нужна копия, я должен явно инициализировать одну каждый раз ?