愚蠢的实验-在PHP中创建C#风格的属性
本文关键字:创建 风格 属性 实验 PHP | 更新日期: 2023-09-27 18:00:48
我正试图想出一种优雅的方法来在PHP 中创建C#风格的属性
现在,我有:
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
简单地分支逻辑。不过,这很混乱,与我想要的背道而驰。是否有方法调用可以访问$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方法是否是可行的。Lambdas可能是理想的,但它们只能在PHP 5.3+中使用。
这本身并不是一个真正的答案,但我想我现在会把它标记为已解决,因为我还没有时间进行进一步的实验。当然,欢迎任何其他建议。