如何将数据从类方法转换为该类的属性?有可能吗?
例如,下面的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
有可能吗?
答案 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