有人可以帮助我理解如何在类方法中创建函数,这样我就可以做到这样的事情:
$class->send->activation_email()
我见过很多API这样做,所以我试过了:
class MyClass
{
public function send()
{
function activation_email()
{
echo "success!";
}
}
}
Undefined property: MyClass::$send
答案 0 :(得分:4)
考虑:
class emailSender()
{
function activation_email()
{
if (mail($this->to, $this->subj, $this->body)) {
print $this->msg;
}
}
class MyClass
{
var $send;
function __construct()
{
$this->send=new emailSender();
$this->send->msg="success!";
}
}
$obj=new MyClass();
$obj->send->activation_email();
答案 1 :(得分:1)
您可能想要在您的班级中使用另一个班级的实例。在你的类中创建一个变量:
$this->otherclass = new Otherclass();
在这种情况下,您可以通过以下方式从其他类调用函数:
$myClass->otherclass->otherClassFunction()
答案 2 :(得分:0)
有人回答但删了帖子。这与我所希望的一致,并且按预期工作:
class MyClass {
public function send(){
echo "Sending: ";
return $this;
}
public function activation_email(){
echo "activation email.";
}
}
$myClass = new MyClass();
$myClass->send()->activation_email();
答案 3 :(得分:-2)
你指的是什么(羞耻没有人注意到这一点,因为羞耻)被称为"方法链接"。很多大框架都是这样做的。考虑一下这个使用示例:
echo $obj->setName('Mike')->convertMtoN()->getName();
// Echoes "Nike"
冷却。
但这是如何运作的:
class Example {
private $name = '';
public function setName($name) {
$this->name = $name;
// We return the object, so you can call it again.
return $this;
}
public function convertMtoN() {
// Let's do Caps first
$this->name = str_replace("M", "N", $this->name);
// Then lowercase
$this->name = str_replace("m", "n", $this->name);
// We return the object, keep working
return $this;
}
public function getName() {
return $this->name;
}
}
$name = new Example;
echo $name->setName('Mike')->convertMtoN()->getName();
基本上,对于每个不隐式返回值的方法,只需返回该对象,即可继续链接。
太棒了吧?
PHP摇滚(现在,我知道它有它的缺点,但是使用HHVM和进程分叉,它基本上是摇滚[dude,你会到达那里])。
你可以在这里玩这个: https://ideone.com/fMcQ9u