我目前有一个函数,我正在尝试引用类中的$ id,但它不起作用:
public function getCourseInfo($cid = $this->id, $all = false)
{
}
这是我的班级:
class Course
{
protected $course;
protected $id;
public function __construct($cid)
{
$id = $cid;
$this->course = $this->getCourseInfo($this->id);
}
public function getCourseInfo($cid = $this->id, $all = false)
{
}
}
答案 0 :(得分:1)
您还没有建立$ this-> id。 :)
错
$id = $cid;
右
$this->id = $cid;
你的班级也错过了一个结束的大括号。
答案 1 :(得分:0)
您需要先在构造函数中设置$ id。
class Course
{
protected $course;
protected $id;
}
public function __construct($cid)
{
$this->id = $cid;
$this->course = $this->getCourseInfo($id);
}
答案 2 :(得分:0)
试试这个
public function getCourseInfo($cid = 'default', $all = false)
{
$cid = $cid == 'default' ? $this->id : $cid;
}
或者你需要完全改变你的课程
class Course
{
protected $course;
protected $id;
public function __construct($cid)
{
$this->id = $cid;
$this->course = $this->getCourseInfo();
}
public function getCourseInfo($course_id = 0, $all = false)
{
$course_id = !$course_id ? $this->id : $course_id;
//do Somthing with
//return var;
}
答案 3 :(得分:0)
不,这是不可能的,如Function arguments manual page所述:
默认值必须是常量 表达,而不是(例如)a 变量,类成员或函数 调用
相反,你可以简单地传入null作为默认值,并在你的函数中更新它...
class Course
{
protected $course;
protected $id;
public function __construct($cid)
{
$this->id = $cid;
$this->course = $this->getCourseInfo($this->id);
}
function getCourseInfo($cid = null, $all = false) {
$cid = isset($cid) ? $cid : $this->id;
....
}
}
答案 4 :(得分:0)
此主题中的每个人都给出了正确的答案,但没有人提供完整的代码示例,因此我将发布我的建议:
class Course
{
/**
* @var int
*/
protected $_courseId;
/**
* @var array
*/
protected $_course;
/**
* Class constructor
*
* @param int $courseId Course ID
* @return Course
*/
public function __construct($courseId)
{
$this->_courseId = (int) $courseId;
}
/**
* Get course information
*
* @param bool $all ...
* @return array
*/
public function getCourseInfo($all = false)
{
if ($this->_course === null) {
// use $this->_courseId as needed
$this->_course = ... // populate course info
}
return $this->_course;
}
}
正如您将注意到我从getCourseInfo()中省略了course id参数,因为如果您使用课程ID实例化该类,则不需要它。
其次,我认为你不应该在构造函数中调用getCourseInfo,因为稍后只需要这些信息。此外,我在函数中添加了“缓存”,因此您不会两次获取数据。
显然,如果没有看到你的代码,我很可能会错,但我觉得这是一个更好的代码结构。