2017-02-15 35 views
0

これはPHPへの私の最初の本当の進出であり、なぜエラーメッセージが表示されているのか理解しがたいです。私は機能を定義しましたが、私はそうしていないと言われています。関数が明確に定義されていても「致命的なエラー:呼び出しは未定義の関数に呼び出されます」

私は関数の名前を変更しようとしましたが、関数がクラス内に表示される順番を変更しようとしましたが(違いはありませんでしたが)、私はこの作業を行うために何かできるとは思いません。コードは私にとってまったくうまく見えますが、エラーメッセージはあまり効果がありません。

<?php 

class PinNumberGenerator { 

private $pins; 
private $disallowedPins = array(0000,1111,2222,3333,4444,5555,6666,7777,8888,9999,1234,5678,2468); // Obvious pins 

function __construct($amount) { 
    $pins = $this->createPinsArray($amount); 
} 

function generatePin() { 
    return rand(0,9).rand(0,9).rand(0,9).rand(0,9); 
} 

private function createPinsArray($amount) { 

    $currentPin; 
    $pinsArray = array(); 

    while(count($pinsArray) < $amount) { 

     $currentPin = generatePin(); 

     if (in_array($currentPin, $disallowedPins)) { 
      continue; 
     } else { 
      $pinsArray[] = $currentPin; 
     } 
    } 

    return $pinsArray; 
} 

public function getPins() { 

    foreach($pin as $pins) { 
    echo $pin . "<br>"; 
    } 

} 
} 

$pins = new PinNumberGenerator(10); 
$pins->getPins(); 

?> 
+0

どの機能が未定義ですか?それは知るのに役立つだろう。 –

+0

PHPがあなたに何かが定義されていないと言ったら、間違いなく定義しています。 – castis

+0

generatePin関数 – LegendEater

答えて

1

generatePin()は、クラスのインスタンスメソッドです。それは$thisとの参照である必要があります。

$currentPin = generatePin(); 

変更:

$currentPin = $this->generatePin(); 

$pinsへのすべての参照のために同じ操作を行います。

変更:

$this->pins = $this->createPinsArray($amount); 

と変更:

$pins = $this->createPinsArray($amount); 

foreach($pin as $pins) { 

へ:

foreach($this->pins as $pin) { 

そして最後に、変更:

if (in_array($currentPin, $disallowedPins)) { 

if (in_array($currentPin, $this->disallowedPins)) { 

へのすべてのクラスのメンバーは $thisで参照する必要があります。

+0

それがそのクラスの一部であると仮定します。このコードの書き方はわかりません。 –

+0

はい、あります。インデントされていないだけです。しかし、それは間違いなく 'PinNumberGenerator'クラスにあります。 – Asaph

+0

Notepad ++でインデントされていますが、ここでは表示されません。それはうまく貼り付けられなかったようです、申し訳ありません。 – LegendEater

0

クラス内のすべてのメソッドは、あなたが$この

ます$ this-> generatePin()を使用してgeneratePin()関数 にアクセスする必要がありPinNumberGeneratorあなたのクラスの中ので、$この

を使用してアクセスする必要があります。

関連する問題