2016-02-05 48 views
0

我瞭解了$此官方解釋:http://php.net/manual/en/language.oop5.basic.php

但是,如果我試圖瞭解是什麼在這種情況下,symfony中的對象的引用,我不知道是誰,例如:

當你需要返回主題每一次,使用此:

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?並且如果使用不是$這個的其他單詞或值,只是爲了更好地理解。

+3

沒有什麼神奇的它,它仍然是你的類的實例。 – tkausl

+1

看看Symfony基礎控制器類:https://github.com/symfony/symfony/blob/master/src/Symfony/Bundle/FrameworkBundle/Controller/Controller.php這就是定義render和createFormBuilder方法的地方。可能會更容易理解正在發生的事情。 – Cerad

回答

1

如果您在控制器中詢問$this調用的方法的位置,請查看控制器的extends語句(緊接在類聲明之後)。

所有的控制器擴展(默認)的FrameworkBundle Controller,你也可以訪問所有的繼承方法,如createFormrendergetDoctrinegenerateUrl

ControllerContainerAware(依賴注入)延伸,它允許您訪問和使用services
我列出的大部分方法只是服務方法的快捷方式。

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

0

在這種情況下$ this引用該對象的一個​​實例,例如。你在一個控制器中,那麼$ this變量引用你所在的控制器的當前實例,並且你可以訪問該類本身擁有的所有方法以及擴展類的所有方法,在這種情況下,基本控制器和在繼承層次結構中如此。

你可以閱讀這個問題,以獲得更多的清晰度。

How does the "this" keyword work?

0

$this是一個類的實例是如何把自己的PHP。

class Person 
    private $name; 

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

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

當您使用$foo = new Person('Max');創建類的實例時。 $this引用您正在創建的新實例。當您在控制器中使用$this時 - 這指的是控制器本身。

在自然語言中它就像說my