PHP类和方法

时间:2011-04-29 20:54:58

标签: php class methods

我是编码和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 个答案:

答案 0 :(得分:2)

由于这些是类变量,因此您不需要按照自己的方式设置它们......用户操作就像常规函数一样,因此在您发布为HTML代码的代码中,您说“在实例中名为'validate'的表单运行函数User,其值为null,null和null'。您的类已经声明了这3个值,因此您可以将它们从声明中删除。

那就是所说的类仍然使用私有和受保护的变量,所以如果你放置$username = 'foo';,你的User函数内部就不会改变类本身的变量值。为此,您需要$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']);

答案 1 :(得分:0)

顺便说一句,你必须知道PHP5中不推荐使用var,你应该使用public,protected或private。

“注意: 为了保持与PHP 4的向后兼容性,PHP 5仍然接受在属性声明中使用关键字var而不是(或除了)public,protected或private。但是,不再需要var。在从5.0到5.1.3的PHP版本中,var的使用被认为已弃用,并且会发出E_STRICT警告,但自PHP 5.1.3起,它不再被弃用,也不会发出警告。 如果使用var而不是public,protected或private声明属性,则PHP 5会将该属性视为已声明为公共属性。“

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

答案 2 :(得分:0)

您必须传递函数调用中的值 我怀疑是否已为

设置了值
$firstname,$lastname,$email
$validate->User($firstname, $lastname, $email)