我编写了一个代码来创建一个带有PHP Object的select:
<?php
class Modulo {
var $nD;
var $nC;
var $nA;
function __construct($nD,$nC,$nA) {
$this->nD=$nD;
$this->nC=$nC;
$this->nA=$nA;
}
function toString(){
return $this->nD."-".$this->nC."-".$this->nA."<br>";
}
}
&GT;
以下是构建select的方法:
function loadModuleValid(){
$mod1 = new Modulo(4,3,3);
$mod2 = new Modulo(5,3,2);
$mod3 = new Modulo(4,4,2);
$mod4 = new Modulo(5,4,1);
$mod5 = new Modulo(4,5,1);
$mod6 = new Modulo(3,5,2);
$mod7 = new Modulo(3,4,3);
$mods = array($mod1,$mod2,$mod3,$mod4,$mod5,$mod6,$mod7);
$i = 0;
print "<h3>Seleziona il modulo</h3>";
print "<select id=\"d1\">";
foreach ($mods as $key ) {
print "<option value=\"{$i}\">{$key->toString()}</option>";
$i++;
}
print "</select>";
}
现在,当用户按下按钮时,我必须由用户检索所选对象。我能怎么做 ?我希望实际的对象不仅仅是它的价值!
答案 0 :(得分:1)
你不能通过一个表单传递一个对象...如果你要序列化它,你可以传递字符串,然后反序列化它,但你不想这样做。
您要做的是使用标识符引用该对象:
function loadModuleValid(){
array(
'mod1' => new Modulo(4,3,3),
'mod2' => new Modulo(5,3,2),
// your other objects
)
$i = 0;
print "<h3>Seleziona il modulo</h3>";
print "<select id=\"d1\">";
foreach ($mods as $key => $object ) {
print "<option value=\"{$key}\">{$object->toString()}</option>";
$i++;
}
print "</select>";
}
然后在后端,您将根据mod1
或任何数组键获取对象。但是,这需要在可以再次获取它们的位置创建这个对象数组。
让我们举一个例子:
function getModulos($id = null) {
$mods = array(
'mod1' => new Modulo(4,3,3),
'mod2' => new Modulo(5,3,2),
// your other objects
);
if (null !== $id) {
return isset($mods[$id]) ? $mods[$id] : false;
} else {
return $mods;
}
}
function loadModuleValid(){
$mods = getModulos();
$i = 0;
print "<h3>Seleziona il modulo</h3>";
print "<select id=\"d1\" name=\"modulo\">";
foreach ($mods as $key => $object ) {
print "<option value=\"{$key}\">{$object->toString()}</option>";
$i++;
}
print "</select>";
}
// this would be an example of your form handling
if (isset($_POST['modulo'])) {
$modulo = getModulos($_POST['modulo']);
}
答案 1 :(得分:0)
有一个黑暗的技巧,你可以序列化你的对象:
print "<option value=\"" . serialize($key) . "\">{$key->toString()}</option>";
然后将其反序列化以检索您的对象:
$mod = unserialize($_POST['yourSelectName']);