我在表单中使用私有字段作为名称属性,而不是对值进行硬编码。但是,由于某种原因,这些值不会从私有字段中获取并放入名称属性中,我只是无法弄清楚原因。
<?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;
}
答案 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
。