PHP класс и методы - PullRequest
       2

PHP класс и методы

1 голос
/ 30 апреля 2011

Я новичок в мире кодирования, а также в PHP и только что углубился в территорию объектов, классов и методов. Мне трудно понять, как использовать объектно-ориентированное кодирование в следующем коде, который я пытаюсь собрать. У меня есть форма, которую пользователи должны заполнить, указав свое имя, фамилию и адрес электронной почты. В качестве первого шага я проверяю, заполнил ли пользователь какие-либо данные

Следовательно, мой код выглядит так

class myform {

var $firstname, $lastname, $email;

function User($firstname, $lastname, $email) {
$fname = isset($_POST['fname']) ? $_POST['fname'] : '';
$lname = isset($_POST['lname']) ? $_POST['lname'] : '';
$email = isset($_POST['email']) ? $_POST['email'] : '';

errormsg = array():

if(empty($fname)) {
            $errormsg[0] = 'Please enter your first name';
        }

        if(empty($lname)) {
            $errormsg[1] = 'Please enter your last name';
        }

        if(empty($email)) {
            $errormsg[2] = 'Please enter your email address';
        }
}
}
}

Теперь на моей HTML-странице я создаю экземпляр объекта

<?php
$validate = myform();
$validate->User($firstname, $lastname, $email)
?>

Когда я отправляю свою форму, я получаю сообщение об ошибке, что переменные $ firstname, $ lastname, $ email не были определены, если я не изменю функцию на чтение, как показано ниже, которое, как я понимаю, ссылается на переменные вместо копирования.

function User(&$firstname, &$lastname, &$email)

Теперь у меня второй вопрос: я прочитал, что не следует присваивать значения элементам данных или переменным следующим образом

<?php
    $validate = myform();
    $validate->firstname = isset($_POST['fname']) ? $_POST['fname'] : '';
    $validate->User($firstname, $lastname, $email)
    ?>

Ответы [ 3 ]

2 голосов
/ 30 апреля 2011

Так как это переменные класса, вам не нужно устанавливать их такими, какие вы есть ... Пользователь работает как обычная функция, поэтому в своем коде, который вы разместили в виде HTML-кода, вы говорите: «В случаеФорма с именем 'validate' запускает функцию User со значениями null, null и null '. Ваш класс уже объявляет эти 3 значения, так что вы можете исключить их из своего объявления.

При этом указанные классы по-прежнему используют privateи защищенные переменные, поэтому внутри вашей пользовательской функции, если вы введете $username = 'foo';, это не изменит значения переменных для самого класса. Для этого вам нужно $this->firstname = $_POST['fname'];

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

class myform {

public $firstname, $lastname, $email;

function setUsername($value) {
    //Add Form Input Sterilization here then
    $this->firstname = $value;
    }

}

Затем в вашем главномкод, который вы просто позвоните

$validate = new myform;
$validate->setUsername($_POST['fname']);
0 голосов
/ 30 апреля 2011

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

$firstname,$lastname,$email
$validate->User($firstname, $lastname, $email)
0 голосов
/ 30 апреля 2011

Кстати, вы должны знать, что var устарела в PHP5, вы должны использовать публичный, защищенный или приватный.

"Примечание: Чтобы поддерживать обратную совместимость с PHP 4, PHP 5 будет по-прежнему использовать ключевое слово var в объявлениях свойств вместо (или в дополнение к) public, protected или private. Однако var больше не требуется. В версиях PHP от 5.0 до 5.1.3 использование var считалось устаревшим и вызывало предупреждение E_STRICT, но, начиная с PHP 5.1.3, оно больше не считается устаревшим и не выдает предупреждение. Если вы объявляете свойство, используя var вместо одного из public, protected или private, тогда PHP 5 будет обрабатывать свойство так, как если бы оно было объявлено как public. "

http://www.php.net/manual/en/language.oop5.properties.php

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