2016-08-09 4 views
-3

У меня есть публичный метод на внешнем классеНевозможно назначить метод переменной PHP

public function nextStep() 
    { 
     return $this->step++; 
    } 

Объект $this->step является публичной

public $step; 

поручаю значение его на методе конструкта

public function __construct($step) 
    { 
     $this->step = $step; 
    } 

Я вызываю этот метод из другого класса, где я определяю

public $step = 0; 

Тогда я сделать

$call = new StasisFlash\StasisFlash($this->step); 
$nextStep = $call->nextStep(); 

Это должно возвращать 1, но вместо этого он возвращается 0. Я пытался непосредственно напечатать $call->nextStep() и возвращает 1, но если я пытаюсь присвоить значение переменной или объект, который возвращает 0, даже если я печатаю и в то же время

Цените помощь

+3

'' '$ i ++' '' возвращает '' '$ i''' до того, как он будет увеличиваться. Если '' '++ $ i''' возвращает' '' '$ i''' после того, как он увеличивается. Возможно, попробуйте вернуть '' '++ $ this-> step'''; – iyop45

+0

_ Объект '$ this-> step public'_ Вы имеете в виду свойство' $ this-> step' является общедоступным? – RiggsFolly

ответ

1

Это происходит потому, что оператор $i++ возвращает значение до он увеличивается.

$i = 0; 
echo $i++; 

выход: 0

В то время как оператор ++$i вернется $iпосле он увеличивает.

$i = 0; 
echo ++$i; 

выход: 1


Чтобы сделать код более читаемым может быть лучше, чтобы добавить дополнительную строку. Он также устраняет любую неопределенность в том, что вы пытаетесь сделать.

public function nextStep() 
{ 
    $this->step++; 
    return $this->step; 
} 
+0

Спасибо! это был правильный ответ, я не знаю, что нужно всем, чтобы опросить вопрос, если бы я знал это в первую очередь, почему я потрудился спросить? –

+0

@ DouglasRoos Возможно, было бы неплохо включить весь ваш код в его трудное для понимания место, где вы объявляете переменные и в каких классах и т. Д. Хороший вопрос, но, возможно, это и есть недостатки. – iyop45

+0

спасибо, я буду в следующий раз, но по предыдущим вопросам люди здесь downvoted меня для размещения много кода = | –

1

Способ использования $this недействителен. Этот суффикс доступен только в пределах класса.

Взгляните на следующий пример.

class Duck 
{ 
    // Set the default leg amount 
    public $legs = 0; 

    // This is called when creating a 'new Duck()' object 
    public function __construct($legs = false) 
    { 
     // If a different amount of legs is set... 
     if (false !== $legs) { 
      $this->legs = $legs; 
     } 
    } 
} 

$duckOne = new Duck(5); 

echo "The duck has ".$duckOne->legs." legs."; 
// Returns: The duck has 5 legs. 

$duckTwo = new Duck(); 

echo "The duck has ".$duckTwo->legs." legs."; 
// Returns: The duck has 0 legs. 

Что вы, по сути пытается сделать это:

echo $hello; 
$hello = "Good day!"; 

Вы используете $this в то время как он не существует.

Class Example 
{ 
    public function method() 
    { 
     // You can only use $this here 
    } 
} 

// You cannot use $this here because it is not defined 
$example = new Example(); 
Смежные вопросы