如何在函数参数中引用“this”类成员?

时间:2012-03-28 21:55:19

标签: php function parameters this

我目前有一个函数,我正在尝试引用类中的$ 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)
    {

    }
}

5 个答案:

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

}

正如您将注意到我从ge​​tCourseInfo()中省略了course id参数,因为如果您使用课程ID实例化该类,则不需要它。

其次,我认为你不应该在构造函数中调用getCourseInfo,因为稍后只需要这些信息。此外,我在函数中添加了“缓存”,因此您不会两次获取数据。

显然,如果没有看到你的代码,我很可能会错,但我觉得这是一个更好的代码结构。