我有以下“学生”课程:
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
答案 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'");
}
你必须用同样的理论改变你的其他功能。
干杯!