1

rand 関数をテストするプログラムの例:

<?php 
        class number {
           function number() {
               $occurences=0;
           }
           public $occurences;
           public $value;
        }
        $draws = 5000;
        $numOfInts = 10;
        //$integers = array();
        $integers [] = new number(); 
        //initialising loop
        for($i=0;$i<=$numOfInts;$i++)
            $integers[$i]->$value = $i;  //debugger points here
        
        for($i=0;$i<$draws;$i++) {
            $integers[rand(0,numOfInts)]->$occurences++;               
        }
        foreach($integers as $int)
            printf("%5d %5d  <br/>",$int->$value,$int->$occurences);       
 ?>

WAMP サーバーのエラー:

未定義の変数: 31 行目の C:\path\index.php の値

致命的なエラー: 31 行目の C:\path\index.php の空のプロパティにアクセスできません

何が原因で、どのように修正するのですか? $integers が間違って宣言されていると思います。

4

2 に答える 2

3

なんで?

//$integers = array();
$integers [] = new number(); 

ただあるべき

$integers = array();
for($i=0;$i<=$numOfInts;$i++) {
    $integers[$i] = new number();
}

PHPには型付き配列はありません

于 2012-07-17T19:39:22.807 に答える
3

次の構文でオブジェクトのメンバーにアクセスする必要があります。

$integers[$i]->value
$integers[$i]->occurences;

ただし、最初に配列を初期化する必要があります。つまり、最初の行のコメントを外して

$integers = array();

実際のところ、次のようにデータ構造を変更するより優れたOOPスタイルを使用していません。

class Number {
    private $value;
    private $occurences = 0;
    public function __construct($value = 0) {
        $this->value = $value;
    }
    public function getValue() {
        return $this->number;
    }
    public function addOccurence() {
        $this->occurences++;
    }
    public function getOccurences() {
        return $this->occurences;
    }
}

次に、次のようにメンバーにアクセスします。

// init part
$integers = array();
for($i = 0; $i < $numOfInts; $i++) {
    $integers[] = new Number($i);
}

// draws part
for($i=0; $i < $draws; $i++) {
    $integers[rand(0,$numOfInts-1)]->addOccurence();               
}

// print part
foreach($integers as $number) {
    printf("%5d %5d<br />", $number->getValue(), $number->getOccurences());
}
于 2012-07-17T19:41:44.047 に答える