不显示私有字段的值

时间:2012-10-06 21:10:49

标签: php forms checkbox private-members

我在表单中使用私有字段作为名称属性,而不是对值进行硬编码。但是,由于某种原因,这些值不会从私有字段中获取并放入名称属性中,我只是无法弄清楚原因。

<?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;
     }

2 个答案:

答案 0 :(得分:1)

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

你必须用大括号逃脱它们:

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

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

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

BTW,由于性能问题,不建议使用双引号字符串。使用简单的引用字符串更好,它避免PHP“读取”字符串以验证是否有要显示的变量。

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

BTW3,如果这两个变量不打算改变,你应该考虑将它们声明为静态变量。它将阻止在每个instatiated对象中包含这些变量的多个副本。

答案 1 :(得分:0)

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