如何编写可以协同工作的简短PHP函数

时间:2013-10-08 21:24:33

标签: php encapsulation

我想模块化功能,但这不起作用......

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

感谢您的帮助!

4 个答案:

答案 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>

这是静态上下文吗?请评论。