PHP помогает проверить набор свойств - PullRequest
0 голосов
/ 09 июня 2018

Я создаю программу PHP, в которой есть класс ученика с различными свойствами, такими как имя, идентификатор, адрес и т. Д. Я не понимаю, почему моя проверка в разделе «Задать свойства» не обновляется правильно.Штат, почтовый индекс и возраст обновляются, а остальные нет.Я понятия не имею, почему мой студенческий идентификатор показывает 274. Я даже не понимаю, откуда он это взял.Пожалуйста, объясните, почему моя проверка не работает должным образом.

function set_student_name($value)
{
    $error_message = true;

    (ctype_alpha($value) && strlen($value) <= 20) ? $this->student_name = $value : $error_message = false;

    return $error_message;
}

Это то, что я думал, что это означало: Если значение является строкой, И значение <= 20, ТО значение == student_name. </p>

Хорошо, вот остальная часть моего кода.Есть два файла.Первый - это класс.

class Student
{

    // --------------------------------Properties-----------------------------------
    private $student_id      = 6212;
    private $student_name    = 'No Name';
    private $student_address = 'No Address';
    private $student_state   = 'No State';
    private $student_zip     = 0;
    private $student_age     = 0;
    private $error_message   = '??';

    // --------------------------------Constructor----------------------------------
    public function __construct($value1, $value2, $value3, $value4, $value5, $value6)
    {
        $id_error             = $this->set_student_id($value1) == true ? 'TRUE,' : 'FALSE,';
        $name_error           = $this->set_student_name($value2) == true ? 'TRUE,' : 'FALSE,';
        $address_error        = $this->set_student_address($value3) == true ? 'TRUE,' : 'FALSE,';
        $state_error          = $this->set_student_state($value4) == true ? 'TRUE,' : 'FALSE,';
        $zip_error            = $this->set_student_zip($value5) == true ? 'TRUE,' : 'FALSE,';
        $age_error            = $this->set_student_age($value6) == true ? 'TRUE,' : 'FALSE,';
        $this->$error_message = $id_error . $name_error . $address_error . $state_error . $zip_error . $age_error;
    }

    // ---------------------------------toString------------------------------------
    public function __toString()
    {
        return $this->$error_message;
    }

    // --------------------------------Set Methods----------------------------------
    public function set_student_id($value)
    {
        $error_message                                                              = true;
        (ctype_digit($value) && ($value > 0 && $value <= 9999)) ? $this->student_id = $value : $error_message = false;

        return $error_message;
    }

    public function set_student_name($value)
    {
        $error_message                                                      = true;
        (ctype_alpha($value) && strlen($value) <= 20) ? $this->student_name = $value : $error_message = false;

        return $error_message;
    }

    public function set_student_address($value)
    {
        $error_message                                                         = true;
        (ctype_alpha($value) && strlen($value) <= 20) ? $this->student_address = $value : $error_message = false;

        return $error_message;
    }

    public function set_student_state($value)
    {
        $error_message                                                       = true;
        (ctype_alpha($value) && strlen($value) <= 20) ? $this->student_state = $value : $error_message = false;

        return $error_message;
    }

    public function set_student_zip($value)
    {
        $error_message                                                                = true;
        (ctype_digit($value) && ($value > 0 && $value <= 99999)) ? $this->student_zip = $value : $error_message = false;

        return $error_message;
    }

    public function set_student_age($value)
    {
        $error_message                                                              = true;
        (ctype_digit($value) && ($value > 0 && $value <= 100)) ? $this->student_age = $value : $error_message = false;

        return $error_message;
    }

    // --------------------------------Get Methods----------------------------------
    public function get_student_id()
    {
        return $this->student_id;
    }

    public function get_student_name()
    {
        return $this->student_name;
    }

    public function get_student_address()
    {
        return $this->student_address;
    }

    public function get_student_state()
    {
        return $this->student_state;
    }

    public function get_student_zip()
    {
        return $this->student_zip;
    }

    public function get_student_age()
    {
        return $this->student_age;
    }

    public function get_properties()
    {
        return "$this->student_id, $this->student_name, $this->student_address, $this->student_state, $this->student_zip, $this->student_age.";
    }
}

Это второй файл, который вызывает класс:

require_once 'student.php';

$collegeStudent = new Student('0422', 'John Smith', '315 Home St', 'Georgia', '30204', '20');

list($id_error, $name_error, $address_error, $state_error, $zip_error, $age_error) = explode(',', $collegeStudent);

print $id_error == 'TRUE' ? 'Student ID update successful<br/>' : 'Student ID update not successful<br/>';
print $name_error == 'TRUE' ? 'Name update successful<br/>' : 'Name update not successful<br/>';
print $address_error == 'TRUE' ? 'Address update successful<br/>' : 'Address update not successful<br/>';
print $state_error == 'TRUE' ? 'State update successful<br/>' : 'State update not successful<br/>';
print $zip_error == 'TRUE' ? 'Zip code update successful<br/>' : 'Zip code update not successful<br/>';
print $age_error == 'TRUE' ? 'Age update successful<br/>' : 'Age update not successful<br/>';

// ------------------------------ Set Properties--------------------------------
print '------------------------------------------------------------------------<br/>';
$student_error_message = $collegeStudent->set_student_id(0422);
print $student_error_message == true ? 'Student ID update successful<br />' : 'Student ID update not successful<br />';

$student_error_message = $collegeStudent->set_student_name('John Smith');
print $student_error_message == true ? 'Name update successful<br />' : 'Name update not successful<br/>';

$student_error_message = $collegeStudent->set_student_address('315 Home St');
print $student_error_message == true ? 'Address update successful<br />' : 'Address update not successful<br/>';

$student_error_message = $collegeStudent->set_student_state('Georgia');
print $student_error_message == true ? 'State update successful<br />' : 'State update not successful<br/>';

$student_error_message = $collegeStudent->set_student_zip(30204);
print $student_error_message == true ? 'Zip code update successful<br />' : 'Zip code update not successful<br/>';

$student_error_message = $collegeStudent->set_student_age(20);
print $student_error_message == true ? 'Age update successful<br />' : 'Age update not successful<br/>';
print '------------------------------------------------------------------------<br/>';

// ------------------------------ Get Properties--------------------------------
print $collegeStudent->get_student_id() . '<br />';
print $collegeStudent->get_student_name() . '<br />';
print $collegeStudent->get_student_address() . '<br />';
print $collegeStudent->get_student_state() . '<br />';
print $collegeStudent->get_student_zip() . '<br />';
print $collegeStudent->get_student_age() . '<br />';

$student_properties = $collegeStudent->get_properties();
list($student_id, $student_name, $student_address, $student_state,
    $student_zip, $student_age) = explode(',', $student_properties);

print "Student ID is $student_id. Student name is $student_name. Student address
is $student_address. Student state is $student_state. Student zip is $student_zip.
Student age is $student_age.";

Вот мой вывод:

output

1 Ответ

0 голосов
/ 09 июня 2018

Вопрос из двух частей, ответ из двух частей:

Чтобы исправить проверку имени, вы можете сначала удалить пробел с помощью preg_replace, а затем проверить, содержит ли значение только буквенные символы.Но будьте осторожны, любое имя с апострофом (например, О'Донн) не будет валидным.

function set_student_name($value)
{
    $error_message = true;

    (ctype_alpha(preg_replace('/\s+/', '', $value)) && strlen($value) <= 20) ? $this->student_name = $value : $error_message = false;

    return $error_message;
}

Во-вторых, вы видите 274, потому что вы написали число как восьмеричное.PHP распознает любое буквальное число с начальным 0 как восьмеричное (что означает основание 8).Если вам нужно сохранить идентификатор студента с начальным 0, вы можете вместо этого сохранить его в виде строки или дополнить его дополнительными 0 с помощью функции получения.

public function get_student_id()
{
    return str_pad($this->student_id, 4, "0",STR_PAD_LEFT);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...