php类函数内的调用函数

时间:2014-05-16 19:28:09

标签: php class

有人可以帮助我理解如何在类方法中创建函数,这样我就可以做到这样的事情:

$class->send->activation_email()

我见过很多API这样做,所以我试过了:

class MyClass 
{

    public function send()
    {

        function activation_email()
        {
            echo "success!";
        }

    }
}


Undefined property: MyClass::$send 

4 个答案:

答案 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