0

我想知道如何从查询字符串初始化类属性?我附带以下代码,通过检查特定条件来检查和初始化类属性。

class Sample
{
    var $id;
    var $txtName;

    function Sample()
    {
        if(count($_REQUEST))
        {
            if(array_key_exists("id",$_REQUEST))
                $this->id = $_REQUEST['id'];
            if(array_key_exists("txtName",$_REQUEST))
                $this->txtName = $_REQUEST['txtName'];  
        }
    }

    //other functions
}

//--------------

$obj = new Sample();
$obj->getParam("id");
$obj->getParam("txtName");

我们是否有可能Sample从一些基类扩展这个类并初始化类属性。为此,我有一些想法,但没有明确的解决方案。就像下面

class GetQueryStrings
{
    //something like child class can initialize their properties
}
class Sample extends GetQueryStrings
{
    var $id;
    var $txtName;

    function Sample()
    {
        if(count($_REQUEST))
        {
            if(array_key_exists("id",$_REQUEST))
                $this->id = $_REQUEST['id'];
            if(array_key_exists("txtName",$_REQUEST))
                $this->txtName = $_REQUEST['txtName'];  
        }
    }

    //other functions
}

//--------------

$obj = new Sample();
$obj->getParam("id");
$obj->getParam("txtName");

是否有可能通过使用$obj->getParam("id");,我们可以初始化类而不在其构造函数中初始化它$this->idSample

4

1 回答 1

1
class GetQueryStrings
{
    public function __construct()
    {
        foreach ($_GET as $key => $val)
        {
            if (property_exists(get_class($this), $key))
                $this->$key = $val;
        }
    }
}

只需确保在覆盖构造函数时调用构造函数:

class Derived extends GetQueryString
{
    public function __construct()
    {
        parent::__construct();

        ... other code ...
    }
}
于 2013-08-31T16:26:42.637 回答