PHP OOP:访问变量

时间:2011-12-31 00:57:42

标签: php

我有以下“学生”课程:

class Student {
    public $user_id;
    public $name;

    public function __construct($user_id) {
        $info = $this->studentInfo($user_id);
        $this->name = $info['name'];
        $this->is_instructor = $info['is_instructor'];
        $this->user_id = $info['id'];
    }

    public static function studentInfo($id) {
        global $db;

        $u = mysql_fetch_array(mysql_query("SELECT * FROM $db[students] WHERE id='$id'"));
        if($u) {
             return $u;
        }
    }        

    public static function getCoursesByInstructor() {
        global $db;

        return mysql_query("SELECT courses.*, course_types.name FROM $db[courses] as courses 
                            JOIN $db[course_types] as course_types ON courses.course_type_id=course_types.id
                            WHERE instructor_id='$this->user_id'");
    }
}

我正在尝试:

$u = new Student(1);
$courses = $u->getCoursesByInstructor();

但是我收到以下错误:

致命错误:在第54行的/Applications/MAMP/htdocs/flight1/phpincludes/classes/students.class.php中不在对象上下文中时使用$ this

4 个答案:

答案 0 :(得分:1)

您正在获取该错误,因为您的函数是一个静态函数,因此您不能在其中使用$this指针,因为它应该指向一个对象。因此,只需从函数定义中删除static关键字。

答案 1 :(得分:1)

您正在非静态地使用静态方法。静态方法仅绑定到其类,但不绑定到对象,因此$this不可用。这尤其意味着,您在$this->userid中使用的getCoursesByInstructor()无效。我建议让方法非静态。

public function getCoursesByInstructor() { /* your code here */ }

答案 2 :(得分:0)

static类中声明的函数中删除Student关键字。

简单地说,static关键字用于表示可以访问的函数,而无需创建该类的实例。另一方面,$this用于引用类实例变量。这就是为什么这两个不顺利,你试图在静态上下文中访问实例变量(通过使用$this)。

答案 3 :(得分:0)

您的代码的问题是您在静态函数中请求$this。看到这个。您在查询中有$ this-> user_id。

return mysql_query("SELECT courses.*, course_types.name FROM $db[courses] as courses 
                            JOIN $db[course_types] as course_types ON courses.course_type_id=course_types.id
                            WHERE instructor_id='$this->user_id'");

要解决此问题,您必须修改此功能。我建议你跟进。

public static function getCoursesByInstructor($userID) {
        global $db;

        return mysql_query("SELECT courses.*, course_types.name FROM $db[courses] as courses 
                            JOIN $db[course_types] as course_types ON courses.course_type_id=course_types.id
                            WHERE instructor_id='$userID'");
    }

你必须用同样的理论改变你的其他功能。

干杯!