0

我是第一次尝试类和对象,我想我会为一个可以存储诸如书籍之类的东西的 Box 制作一个模板。(根据现实世界的项目思考)

<?php

function feetToInches($feet){
    $feet = $feet * 12;
    return $feet;
}



class Book{
    var $l = 6;
    var $w = 5;
    var $h = 1;
}

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();

    function setDimensions($l, $w, $h){
        $this->length = feetToInches($l);
        $this->width = feetToInches($w);
        $this->height = feetToInches($h);
    }


    function storeThings($thing){
        $this->storedArray[] = $thing;
    }

    function getThings(){
       return $this->storedArray;
    }

}



$thatBook = new Book;
$BookBox = new Box;


$BookBox->setDimensions(6,5,1);


for($i = 0; $i < 5; $i++){
    $BookBox->storeThings($thatBook);
}


echo $BookBox->getThings() . "<br />";

/*
foreach($BookBox->getThings() as $item){
echo $item;
}
*/


var_dump($BookBox);

?>

所以我在这里很简单,你有一个维度的盒子,你把固定维度的书扔进去。

把东西放进去没问题,但是当我试图取回它们时,我要么得到错误,要么什么也没有发生。当我尝试为数组指定一个键时

echo $BookBox->getThings()[2];

我收到一个错误,它不是数组或其他东西。

那么有人可以在这里为我指出正确的方向吗?

通常课程是一个单独的文件,但我只是在这里学习。

4

3 回答 3

3

您使用的是什么版本的 PHP。

数组解引用(引用返回的数组)仅在 PHP 5.4 中添加。

如果您使用的是以前的版本,则必须这样做:

$books = $BookBox->getThings();
echo $books[2];

编辑

由于您将 Books 推入一个盒子,$books[2]因此返回 Book 对象的一个​​实例。Echo 用于输出字符串,因此会出现错误。

您可以回显该书的特定属性,也可以通过执行以下操作打印出所有属性:

print_r($books[2]);
于 2012-06-01T05:41:48.957 回答
2

首先,你不能做,echo因为你得到的不是字符串而是对象。使用print_r()var_dump()代替。

其次,就像这里的其他答案一样,你应该这样做。

$books = $BookBox->getThings();
print_r($books[2]);

但我建议你getThings()接受一个变量来获取指定的数组元素:

function getThings($key = null) {
  if ($key) {
    return isset($this->storedArray[$key]) ? $this->storedArray[$key] : null;
  } else {
    return $this->storedArray;
  }
}

// Then you can do this
// print_r($BookBox->getThings(2));
于 2012-06-01T05:50:37.060 回答
0

当您调用 $BookBox->getThings() 时,您所调用的实际上是一个对象,而不是一个数组。

您可以尝试以下方式:

$books = $BookBox->GetThings();
echo $books[2];
于 2012-06-01T05:41:48.730 回答