我正在尝试用一种优雅的方式在PHP中创建C#-esque属性
现在,我有:
class Example
{
private $allowedProps = array('prop1', 'prop2', 'prop3');
private $data = array();
public function __set($propName, $propValue)
{
if (in_array($propName, $this->allowedProps))
{
// set property
}
else
{
// error
}
}
public function __get($propName)
{
if (array_key_exists($propName, $this->data))
{
// get property
}
else
{
// error
}
}
}
在注释掉的部分中,对于比简单地写入$data
数组或从if-else
数组中检索更复杂的事情,最简单的方法是在必要时使用switch
或{简单地分支逻辑{1}}。但这很麻烦,与我想要的相反。有没有办法调用可以访问$data
数组的回调函数?
编辑:似乎最简单的事情是:
class Example
{
private $allowedProps = array('prop1', 'prop2', 'prop3');
private $data = array();
public function __set($propName, $propValue)
{
$propName = strtolower($propName);
if (in_array($propName, $this->allowedProps))
{
$funcName = "set" . ucfirst($propName);
$this->$funcName($propValue);
}
else
{
// error
}
}
public function __get($propName)
{
$propName = strtolower($propName);
if (array_key_exists($propName, $this->data))
{
$funcName = "get" . ucfirst($propName);
$this->$funcName();
}
else
{
// error
}
}
private function getProp1()
{
// do stuff, and return the value of prop1, if it exists
}
// ...
}
我不确定是否有一系列私有的setter和getter方法。 Lambda可能是理想的,但它们只能在PHP 5.3 +中使用。
答案 0 :(得分:0)
本身并不是一个真正的答案,但我认为我现在已将其标记为已解决,因为我没有时间进一步尝试。当然,欢迎任何其他建议。