我有一个叫做联系的课:
class contacts
{
public $ID;
public $Name;
public $Email;
public $PhoneNumber;
public $CellPhone;
public $IsDealer;
public $DealerID;
}
在我的代码中的某个时刻,我想指向该类中的属性并返回属性的名称.
id="<?php key($objContact->Name)" ?>"
name="<?php key($objContact->Name)" ?>"
value="<?php $_POST['contact'.key($objContact->Name)]" />
我的问题是key()函数只处理数组或对象. $objContact->名称本身不符合这些要求.我知道在ID和NAME字段中输入名称本身也很简单,但这适用于其他代码验证用途.想象一下处理器页面:
$objContact = new contact();
$objContact->Email = $_POST[$objContact->Email->**GetSinglePropertyName()**];
$objContact->PhoneNumber = $_POST[$objContact->PhoneNumber->**GetSinglePropertyName()**];
这允许我打开STRICT并确保在我写作的时候,我不会创造任何肥胖的手指错误,这会让我的头脑不再比现在还要糟透了.
更新与答案
答案提供者:linepogl
现在我采用了linepogl的想法,扩展了一些,所以它可以很容易地使用我现有的代码库.这是我想出的:
class baseData {
public $meta;
public function __construct() {
$this->meta = new Meta($this);
}
}
class Meta {
public function __construct($obj) {
$a = get_object_vars($obj);
foreach ($a as $key => $value){
$this->$key = $key;
}
}
}
class contacts extends baseData
{
public $ID;
public $Name;
public $Email;
public $PhoneNumber;
public $CellPhone;
public $IsDealer;
public $DealerID;
}
这意味着我现在可以使用所需的结果调用以下代码:
$objContact = new contacts();
echo($objContact->meta->Email);