Возвращается только один элемент, OO PHP - PullRequest
1 голос
/ 24 ноября 2008
class Score
{
    var $score;
    var $name;
    var $dept;
    var $date;

    function Score($score, $name, $dept, $date)
    {
        $this->scores = ($score);
        $this->name = ($name);
        $this->dept = ($dept);
        $this->date = ($date);
    }

    function return_score(){
        return $this->scores;
        return $this->name;
        return $this->dept;
        return $this->date;
    }
}

$newscore = new Score("131313","James", "Marketing", "19/05/2008");
echo $newscore->return_score();

Приведенный выше код повторяет только 131313. Я только начинаю изучать ОО PHP, поэтому, пожалуйста, будьте спокойны! Полностью потерян, поэтому любая помощь будет высоко ценится.

Ответы [ 3 ]

3 голосов
/ 24 ноября 2008

Вы можете вернуть только одно значение в каждой функции или методе.

В вашей ситуации у вас должен быть метод для каждого из членов класса:

public function getScore() {
   return $this->score;
}

public function getName() {
   return $this->name;
}

public function getDept() {
   return $this->dept;
}


public function getDate() {
   return $this->date;
}

Редактировать после комментариев:

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

public function getAll() {
   return $this->getScore(). " " .$this->getName() . " " .$this->getDept(). " " .$this->getDate();
}
2 голосов
/ 24 ноября 2008

Вы не можете вернуться более одного раза в функцию. Вы можете вернуть объединенную строку:

return $this->scores.' '.this->name.' '.$this->dept.' '.$this->date;
//added spaces for readability, but this is a silly thing to do anyway...

Я бы не рекомендовал это, поскольку вы бы смешали представление объекта с его функциональностью - не надо.

Я бы предложил создать какой-то шаблон (я представляю, что вы, возможно, захотите составить таблицу этих данных?) Каждый ряд будет выглядеть примерно так:

<tr>
  <td><?php echo $score->name; ?></td>
  <td><?php echo $score->scores; ?></td>
  <!-- more cells for more properies? -->
</tr>

и предоставление ему вашего объекта или объектов в массиве (вы знаете о foreach {}?). Я знаю, что это выглядит более многословно, но разделение этих проблем будет лучше для вас в долгосрочной перспективе.

Назначение с =: вам не нужны скобки вокруг назначаемой вещи (обычно).

Также: Вы используете PHP4? Ваша функция конструктора показывает, что вы есть. Я бы рекомендовал перейти на 5.21 или выше, если это вообще возможно, поскольку классы и объекты намного лучше. Вы также можете использовать весьма полезный метод __construct (в отличие от использования метода с именем класса - в вашем случае: Score ()). Это облегчает наследование и расширение, поскольку вашим классам больше не нужно запоминать в двух местах, из какого класса они расширяются.

1 голос
/ 24 ноября 2008

Прежде всего вы должны использовать public, protected или private вместо var

var $score;
var $name;
var $dept;
var $date;

например

protected $score;

или со стандартным префиксом кодировки защищенные / закрытые переменные и методы с подчеркиванием, например, такие

protected $_score;

Этот метод также можно назвать __ construct

function Score($score, $name, $dept, $date)
{

Переменная объявлена ​​как оценка, но вы назначаете переменную для оценки. Я также не понимаю, почему у вас есть круглые скобки вокруг переменной.

        $this->scores = ($score);
        $this->name = ($name);
        $this->dept = ($dept);
        $this->date = ($date);

Заменить на

    $this->score = $score;
    $this->name = $name;
    $this->dept = $dept;
    $this->date = $date;

}

Первый найденный возврат вернет это значение из функции / метода. Я предлагаю вам перекодировать, чтобы добавить get / set для каждой переменной, т.е. getScore () или использовать перегрузку метода PHP5 __set, __get и __call.

public function getScore() {
        return $this->score;
}

}

Вы также можете посмотреть на автоматические методы установки и получения переменных Перегрузка

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...