我已经进行了很长时间的程序化,从不自己上课。制作了我自己的功能,但从不制作对象。课程让我很困惑,我现在迷失在我的代码中。我不明白他们应该如何让事情变得更容易和更有效率。有人可能会根据我在这里的编码方式指出我做错了什么的正确方向吗?
在前面的例子中,我正在制作一个盒子,里面放了一些东西。图书。书籍有不同的尺寸方式来安排它们放入盒子中,所以我想要在放入时以任何方式对齐它以确定您可以放入多少。LimitDeterminer 确定如果它们都放在相同的方向上可以容纳多少,然后将与那里已经存在的东西进行比较。只是一个简报,代码不完整,因为我很沮丧和困惑,这让我在这里纠正我的错误。我也认为我做错了什么,因为我必须不断地为我的函数指定对象......
谢谢
<?php
function feetToInches($feet){ //Converts feet to inches
//$feet = $feet * 12;
return $feet;
}
class Book{
var $l = 7;
var $w = 5;
var $h = 1;
var $name = "Book";
function getDimensions($x){ //Return specified dimension, input as string.
$dimensionArray = array(
"l" => $this->l,
"w" => $this->w,
"h" => $this->h
);
return $dimensionArray[$x];
}
}
class Box{
//This is a box. It has length, width, and height, and you can put things in it.
var $length = 0;
var $width = 0;
var $height = 0;
var $storedArray = array();
var $totalPerms = array();
//Set length,width,height
function setDimensions($l, $w, $h){
$this->length = feetToInches($l);
$this->width = feetToInches($w);
$this->height = feetToInches($h);
}
function storedPerms($array){
$this->totalPerms[] = $array;
//results in order
//lhw
//hlw
//wlh
//whl
//hwl
//lwh
}
function storeThings($thing, $way){
$ori = $this->totalPerms[$way];
var_dump($ori);
$this->storedArray[] = $thing;
$this->CalcArrange($ori[0],$ori[1],$ori[2],$thing);
}
function getThings($key = null) {
if ($key) {
return isset($this->storedArray[$key]) ? $this->storedArray[$key] : null;
} else {
return $this->storedArray;
}
}
//Set what's against box length to x, width to y, and height to z. Possible values are "l","w","h".
function CalcArrange($x,$y,$z,$Thing){
$lengthDiv = 0;
$widthDiv = 0;
$heightDiv = 0;
$lengthDiv = $this->length / $Thing->getDimensions($x); // 24/7 5 5 7
$widthDiv = $this->width / $Thing->getDimensions($y); //14/5 7 1 1
$heightDiv = $this->height / $Thing->getDimensions($z); //10/1 1 7 5
$lengthDiv = intval($lengthDiv);
$widthDiv = intval($widthDiv);
$heightDiv = intval($heightDiv);
echo "<br />" . "Length " . $lengthDiv . " times " . "width " . $widthDiv . " times" . " height " . $heightDiv . " is " . ($lengthDiv * $widthDiv * $heightDiv) . "<br />";
}
}
$thatBook = new Book;
$BookBox = new Box;
$amount = 96;
$BookBox->setDimensions(24,14,10);
//Put objects in box
function putInBox($obj, $box){
$box->storeThings($obj, 3);
}
$books = $BookBox->getThings();
foreach ($books as $v){
echo $v->name . "<br />";
}
function CalcTotalLWH($books){
foreach($books as $book){
$lengthSum += $book->l;
$widthSum += $book->w;
$heightSum += $book->h;
}
echo $lengthSum . "<br />";
echo $widthSum . "<br />";
echo $heightSum . "<br />";
//echo $BookBox->length;
}
echo "<br />";
/*
for($i=0; $i < $possible; $i++){
$addVal = array_pop($dimArray);
array_unshift($dimArray, $addVal);
//var_dump($dimArray);
$BookBox->CalcArrange($dimArray[0],$dimArray[1],$dimArray[2], $thatBook);
}
*/
function findPerm($array, $map){
$tmp = $array[$map[2]];
$array[$map[2]] = $array[$map[1]];
$array[$map[1]] = $tmp;
return $array;
//012
}
function echoAllArray($array){
echo "Now trying with ";
foreach($array as $v){
echo $v . " ";
}
}
//Determine possible limits of Box to Object
function LimitDetermine($Obj, $Box){
$dimArray = array("l","w","h");
$possible = (count($dimArray)) * 2; //for possibilities. DOING IT RONG USE FACTORIALS.
$map = array(0,1,2);
foreach($dimArray as $k => $try){
//012
//021
for($i=0; $i < 2; $i++){
$dimArray = findPerm($dimArray,$map);
echoAllArray($dimArray);
$Box->CalcArrange($dimArray[0],$dimArray[1],$dimArray[2], $Obj);
$Box->storedPerms($dimArray);
$addVal = array_pop($map);
array_unshift($map, $addVal);
}
//120
//102
//201
//210
}
}
LimitDetermine($thatBook,$BookBox);
putInBox($thatBook, $BookBox);
/*
$BookBox->CalcArrange("l","w","h", $thatBook); //Face up flat length to length 60
$BookBox->CalcArrange("w","l","h", $thatBook); //Face up flat width to length 80
$BookBox->CalcArrange("w","h","l", $thatBook); //Width to length, standing. 56
$BookBox->CalcArrange("l","h","w", $thatBook); //The way I usually do it. 84
$BookBox->CalcArrange("h","w","l", $thatBook);
*/
var_dump($BookBox->totalPerms);
?>