symfony 中的伪变量 $this 是如何工作的?

How works the pseudo-variable $this in symfony?

我明白官方关于$this的解释:http://php.net/manual/en/language.oop5.basic.php

但是如果我试图理解在这个symfony的例子中对象引用是什么,我不知道它是谁,例如:

每次需要return主题时,使用这个:

public function indexAction()
    {
        return $this->render('foo/bar.html.twig', array());
    }

或者当您生成某种形式时:

public function indexAction(Request $request)
    {

        // Create the form

        $form = $this->createFormBuilder()
                ->add('name', TextType::class)
                ->add('email', EmailType::class)
                ->add('subject', TextType::class)
                ->add('message', TextareaType::class)
                ->add('send', SubmitType::class)
                ->getForm();
}

但是对象 $this 到底是谁?如果使用不是 $this 的其他词或值,只是为了尝试更好地理解。

在这种情况下 $this 引用对象的实例,例如。你在一个控制器中,然后 $this 变量引用你所在的控制器的当前实例,你可以访问 class 本身具有的所有方法以及扩展 [=17= 的所有方法] 在这种情况下,继承层次结构中的基本控制器等。

您可以阅读此问题以更加清楚。

How does the "this" keyword work?

$this 是 class 中的实例在 PHP 中引用自身的方式。

class Person
  private $name;

  public function __construct($name){
    $this->name = $name;
  }

  public function getName($name){
    $this->name = $name;
  }
end

当您使用 $foo = new Person('Max'); 创建 class 的实例时。 $this 指向您正在创建的新实例。当您在控制器中使用 $this 时 - 这是指控制器本身。

在自然语言中,它就像在说 my

如果您询问控制器中 $this 调用的方法位于何处,请查看控制器的 extends 语句(就在 class 声明之后)。

您所有的控制器(默认情况下)扩展了 FrameworkBundle Controller,您还可以访问所有继承的方法,例如 createFormrendergetDoctrinegenerateUrl.

Controller 扩展自 ContainerAware(依赖注入),它允许您访问和使用 services.
我列出的大部分方法只是服务方法的快捷方式。

$this->generateUrl(/*params*/) 等于 $this->container->get('router')->generate(/*params/*)