PHP类:如何将make方法的数据转换为类属性?

时间:2014-01-27 13:15:28

标签: php class oop properties

如何将数据从类方法转换为该类的属性?有可能吗?

例如,下面的article类只有一个属性 - $ var1,

class article
{
    public $var1 = "var 1";
    public function __construct() 
    {

    }

    public function getRow() 
    {
        $array = array(
            "article_id" => 1,
            "url"       => "home",
            "title"     => "Home",
            "content"   => "bla bla"
        );

        return (object)$array;
    }
}

要获得$ this属性,

$article = new article();
print_r($article->var1); // var 1

要获得$ this方法,

$row = $article->getRow();

获取$ this方法的数据,

print_r($row->title); // Home

它以这种方式工作正常,但如果我想制作/移动此数据**以下**类的属性

            "article_id" => 1,
            "url"       => "home",
            "title"     => "Home",
            "content"   => "bla bla"

所以我可以像这样调用数据,

$article = new article();
print_r($article->title); // Home

有可能吗?

2 个答案:

答案 0 :(得分:1)

您需要使用魔术__set()方法来创建不存在的属性。然后将对象返回从方法移动到简单属性赋值

class article

{
    public $var1 = "var 1";
    public function __construct() 
    {
        $this->getRow();
    }

    public function getRow() 
    {
        $this->article_id = 1;
        $this->url = 'home';
        $this->title = "Home";
        $this->content = 'bla bla';
    }

    public function __set($name, $value) {
        $this->$name = $value;
    }
}

$article = new article();
echo $article->title; // prints Home

如果你想保存当前的逻辑(你说移动,但是确定,你不想破坏你的getRow()逻辑),你可以用另一种方法(或在构造函数中)移动分配)。

class article

{
    public $var1 = "var 1";
    public function __construct() 
    {
        foreach ($this->getRow() as $name => $value) {
            $this->$name = $value;
        }
    }

此外,如果您与getRow()的属性没有任何不同之处,您可以在__set()方法中取消设置任何其他分配:

$rows = (array)$this->getRow();
if (!array_key_exists($name, $rows)) {
    unset($this->$name);
}

答案 1 :(得分:1)

可能的方法之一是设置这样的属性:

class article
{
    public function __construct() 
    {
        $array = array(
            "article_id" => 1,
            "url"       => "home",
            "title"     => "Home",
            "content"   => "bla bla"
        );
     foreach($array as $key => $value){
        $this->{$key} = $value;
      }
   }
}

现在你可以得到:

$article = new article();
print_r($article->title);  //Home