2013-07-12 6 views
-1

Я получил эти две ошибки в своем коде:Неопределенная переменная:

Notice: Undefined переменной: p1 в C: \ Program Files (x86) \ Zend \ Apache2 \ HTDOCS \ ttt.php на линии 61

Примечание: Попытка получить свойство не-объекта в C: \ Program Files (x86) \ Zend \ Apache2 \ HTDOCS \ ttt.php на линии 61 это поворот «s:

соответствующий код находится здесь:

//this is within the Board object 
function updateBoard(){ 
    if($this->xTurn == True){ 
     echo "It is " . $p1->username . "'s turn: "; //line 61 
    } elseif($this->xTurn == False){ 
     echo "It is " . $p2->username . "'s turn: "; 
    } 
} 

//This is within the Player object 
function __construct($name){ 
    $this->username = $name; 
} 

$a = new Board(); 
$p1 = new Player($name); 
$p2 = new Player($name); 
$new = new Game(); 
$a->updateBoard 

Всякий раз, когда я запускаю это, он не отвечает за $ p1-> username. Любые мысли о том, как исправить это, потому что я понятия не имею об этом.

Обновление: Woops. Я забыл какой-то важный код.

+0

объяснить, какой объект вызовы, которые и каким образом. – Aris

+2

Ошибка говорит вам точно, что не так, вы пытаетесь получить доступ к '' имени пользователя '$ p1', когда' $ p1' не существует. Вы проверили, чтобы убедиться, что '$ p1' инициализирован в пределах вашего первого фрагмента кода, прежде чем вы попытаетесь его использовать? –

+0

что такое $ this-> xTurn –

ответ

1

Update плата не имеет $p1 или $p2 объявленная внутри функции, так что они не существуют. Вам нужно либо передать объекты игрока в конструктор платы, установить их с помощью метода сеттера, либо передать их в метод updateBoard. Первые два варианта означают, что вам придется изменить их на $this->p1 и $this->p2 после назначения объектов этим свойствам.

function updateBoard($p1, $p2){ 
    if($this->xTurn == True){ 
     echo "It is " . $p1->username . "'s turn: "; //line 61 
    } elseif($this->xTurn == False){ 
     echo "It is " . $p2->username . "'s turn: "; 
    } 
} 

$a = new Board(); 
$p1 = new Player($name); 
$p2 = new Player($name); 
$new = new Game(); 
$a->updateBoard($p1, $p2); 

http://php.net/manual/en/language.variables.scope.php

+0

Спасибо. Это прекрасно работает! –

0

это работает прекрасный матч с вашим кодом, что вы пропустили: -

class Player 
{ 
var $username; 
function __construct($name){ 
     $this->username = $name; 
     } 
} 
$name='rajeev ranjan'; 
$p1 = new Player($name); 
echo $p1->username; 
+0

Я фактически объявил переменную имени пользователя в начале класса проигрывателя, но она все еще не работает. Я даже повторил переменную имени пользователя вне любого объекта, как вы. Еще ничего. –