在类结构中访问数组

时间:2012-10-25 22:06:18

标签: php arrays class properties scope

我想用php验证表单。

因此我创建了一个类“benutzer”和这个类的公共函数“benutzerEintragen”来验证表单:

class benutzer
{
private $username = "";
private $mail = "";
private $mail_check = "";
private $passwort = "";
private $passwort_check = "";
public $error_blank = array();
public $error_notSelected = array();
public $error_notEqual = array();

    public function benutzerEintragen () {
    $textfields[0] = $this->username;
    $textfields[1] = $this->mail;
    $textfields[2] = $this->mail_check;
    $textfields[3] = $this->passwort;
    $textfields[4] = $this->passwort_check;
    foreach ($textfields as $string) {
      $result = checkFormular::emptyVariable($string);
      $error_blank[] = $result; 
    }

在函数“benutzerEintragen”中,我使用相应的$ _POST条目(上面的代码中未显示)填充变量“username,mail”等。电话

checkFormular::emptyVariable($string) 
如果字段未设置,则

返回“TRUE”,否则返回FALSE。

现在,当我尝试创建此类的新实例时,执行该函数并访问$ error_blank [0]数组为空!

 if (($_SERVER['REQUEST_METHOD'] == 'POST')){ 
 $BENUTZER = new benutzer();
 $BENUTZER->benutzerEintragen();
 echo $BENUTZER->error_blank[0];}

所以最后一行是“通知:未定义的偏移量:0”。它似乎与数组结构有关,因为如果我这样做

 echo $BENUTZER->mail;

我得到了我在表单中写的任何输入,这是正确的。当我在phpEd中运行调试器时,foreach循环似乎做了正确的事情,但似乎在执行函数后删除了数组“error_blank”。

非常感谢任何帮助。提前谢谢。

2 个答案:

答案 0 :(得分:0)

此处存在范围问题。你有一个带有名字的class属性。与Java不同,使用与类变量同名的局部变量会自动选择类属性,这与PHP不同。

基本上,您将输出保存在本地变量中,一旦离开函数,该变量就会被丢弃。将$error_blank[] = $result;更改为$this->error_blank[] = $result;,您应该没问题。

答案 1 :(得分:0)

首先,这似乎过于复杂的方式来完成一项简单的任务,但这实际上并不是问题。

您正在创建一个仅在函数范围内的新$ error_blank变量。如果你想使用类变量,你应该使用$ this-> error_blank []