2017-02-08 5 views
-1

Возьмите этот класс:Public переменная не изменяется для функции класса ребенка

class A{ 
    public $test = ''; 

    public function B($param){ 
    $this->test = 'hello'; 
    echo $param; 
    } 

    public function C(){ 
    return "C() contains:" . $this->test; 
    } 
} 

Если я называю это таким образом, передавая выход C в B:

$obj = new A; 
$obj->B($obj->C()); 

я получаю этот выход:

C() contains: 

Я хотел бы, чтобы напечатать ниже, потому что B уже установлен $test к привет:

C() contains:hello 

Почему настройка общественного $test переменной объекта в B() не меняет значения, что вызов функции C() ребенок получает? Разве они не имеют доступа к одной и той же переменной $obj->test?

+1

Обратите внимание, что 'C' вызывается * перед *' B', поэтому значение устанавливается в конце. – Rizier123

+0

Как 'C' возвращает значение' B' * перед * 'B' устанавливает значение ...? * Когнитивный диссонанс усиливается * – deceze

+0

Мое плохое, плохое утро. Благодарю. –

ответ

1

Если Вы первый вызов C метода класса A который возвращает C() contains:, теперь вы передаете это как $param в методе B, теперь $test имеет значение hello, но вы просто повторили $param, который был C() contains: поэтому он будет печатать только C() contains:, чтобы распечатать нужный результат вам нужно: echo $param, $this->test

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