哑实验 - 在PHP中创建C#-esque属性

时间:2011-07-01 16:18:31

标签: c# php properties

我正在尝试用一种优雅的方式在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 +中使用。

1 个答案:

答案 0 :(得分:0)

本身并不是一个真正的答案,但我认为我现在已将其标记为已解决,因为我没有时间进一步尝试。当然,欢迎任何其他建议。