Ben basit bir 'boyutlarınızın bir genişlik / yükseklik özelliği içeren sınıf ve bunları ayarlamak için bir kurucuya sahip.
Ben nesneleri iki boyutu alır bir işlevi (re-boy ölçüleri) var - bir yeniden-ölçekli ve maksimum boyutu içeren biri. Onlar ikinci parametre 'uyması' gibi ilk parametresinde boyutlarını azaltmak gerekir.
Daha sonra, birinci, yeni yeniden boyutlandırılmış bir döner.
Arayan ölçüleri içinde itiraz geçer ve farklı bir birine dönüş değeri alır - bu orijinal nesneyi korumak için vardır çünkü. Fakat fonksiyon geçirilen bir değiştirilmiş olur.
Ben referans olarak almadım çünkü bu şaşırtıcı oldu:
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;
}
Nasıl ben işlevi içine geçirilen nesnelerin bir kopyasını yapmak istediğinizi belirtin ve sonra bunlardan birini iade edebilirim?
update
Ben fonksiyonunun başında $dimensions = $adimensions
$adimensions
için $dimensions
den savını değiştirdi, ve koyun - başka bir şey balık görünüyor.
Ancak arayanın değişken still değiştirilmiş olur! Ayrıca referans atama çalışır mı? Yani ... Bir atama operatörü aşırı veya kopya kurucu yani ... Ben ne yapmalıyım yapmak için olmayan bir yolu yok mu? Ben bir kopyasını istiyorsanız ben açıkça bir every time başlatmak zorunda?