Как мне обратиться к «this» члену класса в параметре функции? - PullRequest
1 голос
/ 29 марта 2012

У меня сейчас есть функция, в которой я пытаюсь сослаться на $ 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 ]

1 голос
/ 29 марта 2012

Вы еще не установили $ this-> id. :)

неправильно

$id = $cid;

право

$this->id = $cid;

Вам также не хватает закрывающей фигурной скобки в вашем классе.

0 голосов
/ 29 марта 2012

Все в этой теме дают правильные ответы, но никто не дал полный пример кода, поэтому я опубликую свое предложение:

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 () просто потому, что он не нужен, если вы создаете экземпляр класса с идентификатором курса.

Во-вторых, я не думаю, что вам следует вызывать getCourseInfo в конструкторе, потому что информация понадобится только позже.Кроме того, я добавил кеширование в функцию, чтобы вы не получали данные дважды.

Очевидно, что есть большая вероятность, что я могу ошибаться, не увидев ваш код, но я считаю, что это лучшая структуракод.

0 голосов
/ 29 марта 2012

Нет, это невозможно, как указано на странице руководства Аргументы функций :

Значение по умолчанию должно быть константой выражение, а не (например) переменная, член класса или функция звоните.

Вместо этого вы можете либо просто ввести значение по умолчанию, равное 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;
        ....
    }
}
0 голосов
/ 29 марта 2012

Попробуйте это

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;
    }
0 голосов
/ 29 марта 2012

Вам нужно сначала установить $ id в своем конструкторе.

class Course
{
    protected $course;
    protected $id;
}

public function __construct($cid)
{
    $this->id = $cid;
    $this->course = $this->getCourseInfo($id);
}
...