2014-02-13 3 views
0

Я создаю калькулятор php, который должен использовать следующие классы, а затем распечатать имя пользователя и средний балл, который они достигли. Это код, который у меня есть до сих пор, но он не отображается правильно, он говорит, что отсутствуют аргументы и неопределенные переменные, но я не уверен, где я ошибся!PHP-калькулятор не правильно отображает результаты

<?php 

class person { 

public $name; 

} 
class student extends person { 

function student ($name, $grade1, $grade2) { 
    if(is_numeric($grade1) && is_numeric($grade2)){ 
     $grades = array($grade1, $grade2); 
    } 
    elseif (is_numeric($grade1)) { 
     $grade2 = 0; 
    } 
    else { 
     $grade1 = 0; 
    } 
} 

function average ($grades) { 
    $length = count($grades); 
    $total = 0; 

    for ($i = 0; $i < $length; $i++) { 
    $total = $total + $grades[i]; 
    } 

    $average = $total/$length; 
    return $average; 

} 
} 

$person1 = new student ($_POST['firstName'], $_POST['firstGrade1'], $_POST['firstGrade2']); 
$person2 = new student ($_POST['secondName'], $_POST['secondGrade1'], $_POST['secondGrade2']); 
$person3 = new student ($_POST['thirdName'], $_POST['thirdGrade1'], $_POST['thirdGrade2']); 

echo "<br/> $person1->name" . "achieved an average of" . "$person1->average();"; 
echo "<br/> $person2->name" . "achieved an average of" . "$person2->average();"; 
echo "<br/> $person3->name" . "achieved an average of" . "$person3->average();"; 

?> 

СООБЩЕНИЯ ОБ ОШИБКАХ: Предупреждение: Отсутствует аргумент 1 для студентов :: средний(), называемый в C: \ Program Files (x86) \ EasyPHP-DevServer-14.1VC11 \ Data \ localweb \ мои портативных файлов \ Упражнение 4 \ average.php в строке 40 и определено в C: \ Program Files (x86) \ EasyPHP-DevServer-14.1VC11 \ data \ localweb \ мои переносные файлы \ Упражнение 4 \ average.php в строке 22

Уведомление : Неопределенная переменная: оценки в C: \ Program Files (x86) \ EasyPHP-DevServer-14.1VC11 \ data \ localweb \ мои переносные файлы \ Упражнение 4 \ average.php в строке 23

Предупреждение: Деление на ноль i n C: \ Program Files (x86) \ EasyPHP-DevServer-14.1VC11 \ data \ localweb \ мои переносные файлы \ Упражнение 4 \ average.php в строке 30

+0

также, если один из их классов не является числовым, тогда его необходимо установить на 0 – user3005003

+0

Какие конкретные ошибки вы получаете? Почему вы используете древние конструкторы стиля PHP4 вместо '__construct()'? Наконец, вы должны серьезно рассмотреть возможность использования записей доступа к массиву для значений POST. Выполнение чего-то типа 'firstGrade1' не является масштабируемым. Назовите свои поля типа 'name [0]' 'grade [0] [0]' 'grade [0] [1]' и эти данные заселятся в красивый массив для вас автоматически. –

+0

Если вы хотите узнать, где вы ошибетесь, посмотрите на сообщения об ошибках - они содержат номер строки для определенной части кода, которая не удалась. –

ответ

1

Вы, кажется, не возвращаете переменную $ grades , Вероятно, это не определено, потому что вы ничего не возвращаете.

Ваш метод:

function student ($name, $grade1, $grade2) { 
    if(is_numeric($grade1) && is_numeric($grade2)){ 
     $grades = array($grade1, $grade2); 
    } 
    elseif (is_numeric($grade1)) { 
     $grade2 = 0; 
     $grades = array($grade1, $grade2); 
    } 
    else { 
     $grade1 = 0; 
     $grades = array($grade1, $grade2); 
    } 
    return $grades 
} 

Нужно будет выглядеть так. Вы также захотите добавить классы class1 и grad2 в возвращаемый массив в своих альтернативных условиях.

+0

спасибо, что сообщение об ошибке уже сейчас! – user3005003

0

Следующие классы расширены. Вы заметите, что у них есть конструкторы и функции для запроса переменных. Частные переменные обычно являются предпочтительным методом, так как они защищены и поэтому не могут быть изменены вне класса.

class person { 
    private $name = ""; 

    public function __construct ($nameV) { 
     $this->name = $nameV; 
    } 

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

class student extends person { 

    private $grades; 

public function __construct ($name, $grade1, $grade2) { 
    parent::__construct($name); 

    if (! is_numeric($grade1)) { $grade1 = 0; } 
    if (! is_numeric($grade2)) { $grade2 = 0; } 
    $this->grades = array($grade1, $grade2); 
} 

    public function average() { 
     $length = count($this->grades); 
     $total = 0; 

     for ($i = 0; $i < $length; $i++) { 
     $total = $total + $this->grades[$i]; 
     } 

     $average = $total/$length; 
     return $average; 
    } 
} 

код экспорта, то просто:

Благодаря не имеющей форму, я тестировал со следующими данными:

$person1 = new student ("XYZ", 1, 2); 
$person2 = new student ("XYZ2", 100, 20); 
$person3 = new student ("XYZ3", 95, 94); 

Что экспортируемого:

XYZ achieved an average of 1.5 
XYZ2 achieved an average of 60 
XYZ3 achieved an average of 94.5 
Смежные вопросы