我想模块化功能,但这不起作用......
class Review {
public function show_report($db, $id){
// Query the DB on $id
$x = $this->get_survey($db, 1);
$y = $this->get_survey($db, 2);
// Use x and y to build a report
return $a_report;
}
private function get_survey($db, $n){
// Query the DB for a certain survey number
if($n == 1){
// Perform some logic
} else {
// Perform some other logic
}
return $a_survey;
}
};
使用像这样的类..
<?php
include_once('api/Review.class.php');
$r = new Review();
?>
<p>
<?php
echo Review::show_report($db, $id);
?>
</p>
PHP抛出这个:
Fatal error: Using $this when not in object context in Review.class.php
感谢您的帮助!
答案 0 :(得分:1)
您的设计模式很好,您只是有语法错误。您在show_report()中错过了方法调用的$符号,它应该如下所示:
public function show_report($db, $id){
// Query the DB on $id
$x = $this->get_survey($db, 1);
$y = $this->get_survey($db, 2);
// Use x and y to build a report
return $a_report;
}
此外,在课程结束时分号是不必要的。
最后,正如另一个人提到的,你需要使用参数调用show_report,如下所示:
echo $r->show_report($db, $id);
答案 1 :(得分:1)
在函数show_report($db, $id)
内部是this
指针,没有前缀$
符号,这会导致语法错误。此外,在第二部分中,不使用参数调用函数。
该功能必须如下:
public function show_report($db, $id){
// Query the DB on $id
$x = $this->get_survey($db, 1);
$y = $this->get_survey($db, 2);
// Use x and y to build a report
return $a_report;
}
答案 2 :(得分:1)
echo $r->show_report;
在此示例中,您尝试在不带参数的情况下调用该函数。如果这确实是你正在做的事情,那至少会有一个问题。
相反,使用参数调用该函数:
echo $r->show_report('foo', 1);
答案 3 :(得分:0)
谢谢大家。由于https://stackoverflow.com/a/19258788/1004107,我修复了所有语法错误。这是我相信的问题的根源:
<?php
include_once('api/Review.class.php');
$r = new Review();
?>
<p>
<?php
echo Review::show_report($db, $id);
?>
</p>
应该......
<?php
include_once('api/Review.class.php');
$r = new Review();
?>
<p>
<?php
echo $r->show_report($db, $id);
?>
</p>
这是静态上下文吗?请评论。