2017-02-15 2 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.

Изменение:

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

к:

$this->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

Все методы внутри класса должны быть доступны через $ это

так внутри класса PinNumberGenerator вы должны получить доступ к функции generatePin(), используя $ это

$ this-> generatePin();

Смежные вопросы