0

我在表单中使用私有字段作为名称属性,而不是对值进行硬编码。但是,由于某种原因,这些值没有从私有字段中获取并放入名称属性中,我就是不知道为什么。

<?php

namespace View;

class UserView {

    private $checkBox = "check[]";
    private $submitRemove = "submitRemove";

    public function ShowUsers() {

        $userNameArray = array("foo", "bar", "hallo", "world");

        $userIdArray = array(1, 2, 3);

        $users = "";
        $nrOfUsers = count($userNameArray);

        // Name attribute of input fields created is left blank
        for ($i = 0; $i < $nrOfUsers; $i++) {
            $users .= "<label for='$userIdArray[$i]'>
                        $userNameArray[$i]
                        <input type='checkbox' name='$this->checkBox' value='$userIdArray[$i]' /><br/>
                        </label>";
        }

        $userList = "<div class='userList'>
                    <form id='form3' method='post' action=''>
                        <fieldset>
                            <p>Existing users</p>
                            $users
                            <input type='submit' id='$this->submitRemove' name='$this->submitRemove' Value='Ta bort' />    // name attribute is left blank
                        </fieldset>
                    </form>
                    </div>";

        return $userList;
     }
4

2 回答 2

1

对于“复杂元素”,例如对象的数组或属性,您不能将它们称为双引号字符串中的变量。

你必须用大括号来逃避它们:

<?php echo "This is a complex attribute: {$this->checkBox}"; ?>

或者您可以从引用的字符串中删除它们:

<?php echo "This is a complex attribute: " . $this->checkBox; ?>

顺便说一句,由于性能问题,不推荐使用双引号字符串。使用简单的带引号的字符串更好,它可以避免 PHP “读取”字符串来验证是否有要显示的变量。

顺便说一句,为了使您的代码更具可读性,PHP 中的一个约定说私有属性必须以下划线开头。您应该将$checkBoxand重命名$submitRemove$_checkBoxand $_submitrRemove

BTW3,如果这两个变量不打算改变,你应该考虑将它们声明为静态变量。它将防止在每个实例化对象中拥有这些变量的多个副本。

于 2012-10-06T21:21:07.527 回答
0

发布的代码没有任何问题。我认为您正在用$submitRemove另一种方法覆盖某处。

于 2012-10-06T21:43:02.573 回答