0

値をハードコーディングする代わりに、フォームの名前属性にプライベート フィールドを使用しています。ただし、何らかの理由で値がプライベート フィールドから取得されず、name 属性に入れられず、その理由がわかりません。

<?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の規則では、プライベート属性はアンダースコアで開始する必要があるとされています。名前を変更$checkBox$submitRemoveて、に変更する必要が$_checkBoxあり$_submitrRemoveます。

ところで、これら2つの変数が変更されることを意図していない場合は、静的変数として宣言することを検討する必要があります。これらの変数の複数のコピーが、各インスタンス化されたオブジェクト内に存在するのを防ぎます。

于 2012-10-06T21:21:07.527 に答える
0

投稿されたコードに問題はありません。$submitRemove別の方法でどこかを上書きしていると思います。

于 2012-10-06T21:43:02.573 に答える