Php 在Z行Y中的非对象上调用成员函数X

Php 在Z行Y中的非对象上调用成员函数X,php,Php,为什么它不回显“test”?这是因为您的函数test()与类名相同-它看起来像一个旧式构造函数,所以它是在您执行new test()时运行的,即在设置conversor之前 重命名函数或添加新样式的构造函数进行测试:\u construct()这是因为您的函数Test()与类名相同-它看起来像旧样式的构造函数,因此在执行new Test()时,即在设置conversor之前,它正在运行 重命名函数或添加新样式的构造函数以进行测试:\uu construct(),因为调用$word=$this->

为什么它不回显“test”?

这是因为您的函数
test()
与类名相同-它看起来像一个旧式构造函数,所以它是在您执行
new test()
时运行的,即在设置
conversor
之前


重命名函数或添加新样式的构造函数进行测试:
\u construct()

这是因为您的函数
Test()
与类名相同-它看起来像旧样式的构造函数,因此在执行
new Test()
时,即在设置
conversor
之前,它正在运行


重命名函数或添加新样式的构造函数以进行测试:
\uu construct()

,因为调用
$word=$this->conversor->toLowerFirst($word)
返回错误,此时函数
toLowerFirst
不存在(通过Conversor的不存在实例调用该函数)

替换
$word=$this->conversor->toLowerFirst($word)
$word=Conversor::toLowerFirst($word)和它将工作


编辑:_构造是一个更好的解决方案,因为我的建议会产生2倍的回音。。(测试被视为测试的构造函数)

因为调用
$word=$this->conversor->toLowerFirst($word)
返回错误,此时函数
toLowerFirst
不存在(通过Conversor的不存在实例调用该函数)

替换
$word=$this->conversor->toLowerFirst($word)
$word=Conversor::toLowerFirst($word)和它将工作


编辑:_构造是一个更好的解决方案,因为我的建议会产生2倍的回音。。(测试被视为测试的构造函数)

我认为从函数中的t和类中的t开始可以区分它们。我认为从函数中的t和类中的t开始可以区分它们。@Derium tremens,这就是原因!回答得很好,米斯蒂加斯。也就是说,您可能应该重新考虑程序流,因为这可能会引发严格的标准警告;在对应于$Test->conversor=new conversor()的部件之前运行;跑。@震颤性谵妄,这就是原因!回答得很好,米斯蒂加斯。也就是说,您可能应该重新考虑程序流,因为这可能会引发严格的标准警告;在对应于$Test->conversor=new conversor()的部件之前运行;跑。
<?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();
?>