Вызов функции-члена X для необъекта в Y в строке Z - PullRequest
1 голос
/ 28 октября 2009
<?php
class Conversor {
    function toLowerFirst($word) {
        $word = 'test';
        return $word;
    }
}

class Test {
    function test() {
        $word = 'Test';
        $word = $this->conversor->toLowerFirst($word);
        echo $word;
    }
}

class Launcher {
    function launch() {
        $Test = new Test();
        $Test->conversor = new Conversor();
        $Test->test();
    }
}

$launcher = new Launcher();
$launcher->launch();
?>

Почему он не повторяет «тест»?

Ответы [ 2 ]

5 голосов
/ 28 октября 2009

Это потому, что ваша функция test() совпадает с именем класса - она ​​выглядит как конструктор в старом стиле, поэтому она запускается, когда вы делаете new Test(), т. Е. Перед тем, как установить conversor.

Переименуйте функцию или добавьте конструктор нового стиля в Test: __construct()

1 голос
/ 28 октября 2009

Поскольку вызов $word = $this->conversor->toLowerFirst($word); возвращает ошибку, функция toLowerFirst в это время не существует (вы вызываете функцию через несуществующий экземпляр Conversor)

Замените $word = $this->conversor->toLowerFirst($word); на $word = Conversor::toLowerFirst($word);, и оно будет работать.

Редактировать: __construct является лучшим решением, потому что мое предложение дает в 2 раза больше эха .. (test рассматривается как конструктор для Test)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...