我试图仅仅处理一个关于OOP的简单概念,但是因为我使用了类似的东西,它已经有一段时间了。
class UserAPI
{
protected $Email;
protected $APIKey;
public function setEmail($e)
{
$this->Email = $e;
return (new UserAPI)->setEmail($this->Email);
}
public function setKey($k)
{
$k = hash('SHA256',$k);
$this->APIKey = $k;
echo 'Key Wrote';
return (new UserAPI)->setEmail($this->Email)->setKey($this->APIKey);
}
public function getVals(){ echo 'Vals wrote;'; return array('key' => $this->APIKey, 'email' => $this->Email); }
}
print_r((new UserAPI)->setEmail('Example')
->setKey('Password')
->getVals());
正如你可能会聚集的那样,(new UserAPI)->setEmail('...')
将陷入无限循环 - 最终将setKey()
;我已经坚持了很多年,并且无法弄清楚如何返回新的Object继续使用。
任何帮助都是完美的。
答案 0 :(得分:2)
在类中使用$this->
来引用对象本身,并使用new UserAPI()
创建一个新对象。
class UserAPI
{
protected $Email;
protected $APIKey;
public function setEmail($e)
{
$this->Email = $e;
return $this;
}
public function setKey($k)
{
$k = hash('SHA256',$k);
$this->APIKey = $k;
echo 'Key Wrote';
return $this;
}
public function getVals(){
echo 'Vals wrote;';
return array('key' => $this->APIKey, 'email' => $this->Email);
}
}
// this...
$u = new UserAPI(); // create object
$u->setEmail('Example'); // set e-mail
$u->setKey('Password'); // set password
print_r($u->getVals()); // get values
// ...is equivalent to this...
$u = new UserAPI(); // create object
print_r(
$u->setEmail('Example') // set mail
->setKey('Password') // set password
->getVals()); // get values
// ...but only where the class methods return the object
// (ie. not for getValues())
只需返回$this
即可将该类传播到另一个派生调用。
但是,