PHP |奇怪的对象行为,无法调用方法

PHP | weird object behavior, can not call methods

所以出于某种原因,我在制作这个 class 时遇到了麻烦。 我正在调用 2 个简单的函数,它们实际上只做回声。 问题是一个被正确调用,而另一个发出错误。

以下是片段: Setter class,假设变量已填充(如实) 调用者:

    <?php

include_once'../classes/Setter.php';
// include_once '../classes/Fetcher.php';

$filter = isset($_GET['path']) ? strip_tags($_GET['path']) : "1";
if ($filter == 1 || is_null($filter)) {
    echo "path is not set";
        return 1;  
}
$path = $filter;
$filter = isset($_GET['fname']) ? strip_tags($_GET['fname']) : "1";
if ($filter == 1 || is_null($filter)) {
    echo "fname is not set";
        return 1;  
}
$fname=$filter;
$filter = isset($_GET['data']) ? strip_tags($_GET['data']) : "1";
if ($filter == 1 || is_null($filter)) {
    echo "data";
        return 1;  
}
$data=$filter;

$setter = new Setter($path,$fname,$data);


echo $setter->sayHi();
echo $setter->sayTest(); //line #35
//echo $setter::sayHi();


?>

Class:

class Setter {
    private $fileName = "";
    private $path ="";
    private $inputJSON = "";

    public function __construct($path,$fileName,$inputJSON){

       $this->path = $path;
       $this->fileName = $fileName;
       $this->inputJSON = $inputJSON;        
    }
    public function sayHi(){
        echo "path: " . $this->path . "<br />";
        echo 'fName: ' . $this->fileName;
        echo 'inputJSON: ' . $this->inputJSON;
    }
    public function sayTest() {
        echo "tester";
    }

}

这是输出

path: data/idc/
fName: cs16inputJSON: { "number": "1", "subject": "testtt", "due" :{ "year": 2015, "month" : 3, "day" : 22 } }
Fatal error: Call to undefined method Setter::sayTest() in C:\xampp\htdocs\CA2\server\ClassAssignmentsSetter.php on line 35

有什么想法吗?考虑过范围界定、嵌套……所有这些好爵士乐,但没有帮助。

谢谢!

编辑: 这是函数 var_dump(get_class_methods($setter));

的输出
array(4) { [0]=> string(11) "__construct" [1]=> string(10) "__destruct" [2]=> string(16) "injectDataAsJSON" [3]=> string(5) "sayHi" } path: data/idc/
fName: cs16inputJSON: { "number": "1", "subject": "testtt", "due" :{ "year": 2015, "month" : 3, "day" : 22 } }path: data/idc/
fName: cs16inputJSON: { "number": "1", "subject": "testtt", "due" :{ "year": 2015, "month" : 3, "day" : 22 } }
Fatal error: Call to undefined method Setter::sayTest() in C:\xampp\htdocs\CA2\server\ClassAssignmentsSetter.php on line 40

你的问题不是很清楚,你的意思是当你使用echo $setter::sayHi();它显示致命错误:在 C:\xampp\htdocs\CA2\server\ClassAssignmentsSetter.php 中调用未定义的方法 Setter::sayTest() 第 35 行??

您不能使用Setter::sayTest() 调用method/function,因为这样您就可以调用静态method/function。要调用非静态方法,您可以使用 class 对象,这意味着 $setter->sayHi() 这是调用非静态方法的正确方法。谢谢

唯一的原因可能是需要错误的文件。每个人都会遇到 =)