Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/243.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Symfony教程中的PHP语法_Php_Symfony_Syntax_Operators - Fatal编程技术网

Symfony教程中的PHP语法

Symfony教程中的PHP语法,php,symfony,syntax,operators,Php,Symfony,Syntax,Operators,尝试了解Symfony的最新情况,请阅读本教程,本页()中有以下示例: $form = $this->createFormBuilder($task) ->add('task', TextType::class) ->add('dueDate', DateType::class) ->add('save', SubmitType::class, array('label' => 'Create Post')) ->getForm

尝试了解Symfony的最新情况,请阅读本教程,本页()中有以下示例:

$form = $this->createFormBuilder($task)
    ->add('task', TextType::class)
    ->add('dueDate', DateType::class)
    ->add('save', SubmitType::class, array('label' => 'Create Post'))
    ->getForm();

    return $this->render('default/new.html.twig', array(
        'form' => $form->createView(),
    ));
由于以前从未见过这种语法,我很快排除了表面上看起来的调用链接,然后发现将每个“裸”箭头解释为指向
$form
的方法基本上是正确的。它最终在这个版本中正常工作:

$formBuilder = $this->createFormBuilder($task);
$formBuilder->add('task', TextType::class);
$formBuilder->add('dueDate', DateType::class);
$formBuilder->add('save', SubmitType::class, array('label' => 'Create Post'));
$form = $formBuilder->getForm();

    return $this->render('default/new.html.twig', array(
        'form' => $form->createView(),
    ));
所以我试着理解原始样本。如果对看似断开连接的箭头的正确解释是“第一行上命名的对象的调用方法”,则这将解释除“
->getForm();
”行之外的所有内容。但是,如果对该行应用相同的规则,该行将变成“
$formBuilder->getForm();
”,这当然会在render()行失败,因为没有对$form进行赋值(我的意思是,即使我为构建器保留了$form的名称,它仍然会失败)

那么,教程中是否有错误,或者我遗漏了哪些微妙的语法


我已经用(“php”、“arrow”、“syntax”、…)的组合进行了广泛的搜索,但没有找到任何关于在一系列方法调用中省略对象名的内容。

原始示例确实是方法链接

如果您看到此示例:

$form = $this->createFormBuilder($task)
    ->add('task', TextType::class)
    ->add('dueDate', DateType::class)
    ->add('save', SubmitType::class, array('label' => 'Create Post'))
    ->getForm();

它只是意味着方法
createFormBuilder
add
getform
都属于同一个类
$this
,因此它们大部分返回
return$this从每个方法,用于将方法链接到下一个方法<代码>文本类型::类
,其余为类常量

这实际上是方法链接。单独方法调用之间的新行只是为了更好的代码可读性

这:

相当于:

$formBuilder = $this->createFormBuilder($task)
->add('task', TextType::class);

通过查找
FormBuilder::add
的定义来验证它是否链接-它返回修改后的
FormBuilder
对象。然后,该集合中的最后一行是一个聪明的技巧,因为尽管返回类型不同,但它是最后一行,然后使用相同的名称意味着毕竟定义了
$form
。为了代码的可读性,我仍在修改它,这样读者就不必查找方法定义,而本教程可能会更好地提供一个快速解释(他们的问题都依赖于此)。
add
getForm
不属于
$this
createFormBuilder
属于
$this
并返回一个
FormBuilder[Interface]
,该类有方法
add
(返回自身进行方法链接)和
getForm
(返回
Form[Interface]
,因此您不能再链接
FormBuilder[Interface]
方法,但
形式[接口]
方法)。
$formBuilder = $this->createFormBuilder($task)
->add('task', TextType::class);