0

初めてクラスとオブジェクトを試しているので、Books などを格納できる 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のバージョン。

配列の逆参照(返された配列への参照)は、PHP5.4でのみ追加されました。

以前のバージョンを使用している場合は、次のことを行う必要があります。

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

編集

Booksをボックスにプッシュしているので$books[2]、Bookオブジェクトのインスタンスを返します。エコーは文字列を出力するために使用されるため、エラーが発生します。

本の特定のプロパティをエコーするか、次のようにしてすべてのプロパティを印刷することができます。

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 に答える