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() 这是调用非静态方法的正确方法。谢谢
唯一的原因可能是需要错误的文件。每个人都会遇到 =)
所以出于某种原因,我在制作这个 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() 这是调用非静态方法的正确方法。谢谢
唯一的原因可能是需要错误的文件。每个人都会遇到 =)