2017-02-15 2 views
0

Dies ist mein erster richtiger Ausflug in PHP und ich habe Mühe zu verstehen, warum eine Fehlermeldung erscheint. Ich habe eine Funktion definiert und mir wird gesagt, dass ich das nicht getan habe."Fataler Fehler: Aufruf zu undefinierter Funktion", obwohl die Funktion eindeutig definiert ist

Ich habe versucht, den Namen der Funktion zu ändern und die Reihenfolge der Funktionen in der Klasse erscheinen (die ich wusste, würde keinen Unterschied machen), aber ich kann nicht denken, etwas anderes könnte ich tun, um dies zu arbeiten. Der Code sieht für mich absolut gut aus, und die Fehlermeldung gibt nicht viel Arbeit.

<?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

Welche Funktion ist nicht definiert? Das würde helfen zu wissen. –

+0

Wenn PHP Ihnen sagt, dass etwas nicht definiert ist, haben Sie es definitiv nicht definiert. – castis

+0

Es war die generatePin Funktion – LegendEater

Antwort

1

generatePin() ist eine Instanz Methode einer Klasse. Es muss Referenzen mit $this sein. Wechsel:

$currentPin = generatePin(); 

zu:

$currentPin = $this->generatePin(); 

Machen Sie dasselbe für alle Verweise auf $pins.

Wechsel:

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

zu:

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

und ändern:

foreach($pin as $pins) { 

zu:

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

Und schließlich ändern:

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

zu

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

Alle Klassenmitglieder müssen mit $this referenziert werden.

+0

Angenommen, es ist Teil dieser Klasse. Wie dieser Code geschrieben ist, wissen wir nicht. –

+0

Ja, wir tun es. Es ist nur nicht eingerückt. Aber es ist definitiv in der 'PinNumberGenerator' Klasse. – Asaph

+0

Es ist in Notepad ++ eingerückt, nur nicht hier. Es scheint, dass es nicht gut passte, sorry. – LegendEater

0

Alle Methoden in einer Klasse sollte

so in Ihrer Klasse mit diesem $ zugegriffen werden PinNumberGenerator Sie generatePin zugreifen sollte() Funktion $ this

$ this-> generatePin mit();

Verwandte Themen