如何在phpstorm中自动生成类的属性?

时间:2014-10-02 16:54:37

标签: php phpstorm auto-generate

如果我实现了一个注入了一些服务的类,我必须编写大量代码:

<?php
namespace Hn\AssetDbBundle\Services;

use Psr\Log\LoggerInterface;
use Symfony\Bundle\TwigBundle\TwigEngine;
use Symfony\Component\HttpKernel\KernelInterface;

/**
 * Class SomeNewService
 * @package Hn\AssetDbBundle\Services
 */

class SomeNewService {
    /**
     * @var TwigEngine
     */
    private $engine;
    /**
     * @var KernelInterface
     */
    private $kernel;
    /**
     * @var LoggerInterface
     */
    private $logger;

    public function __construct(TwigEngine $engine, KernelInterface $kernel, LoggerInterface $logger) {
        $this->engine = $engine;
        $this->kernel = $kernel;
        $this->logger = $logger;
    }
}

这似乎是多余的。有没有办法可以减少我必须编写的代码量?是否有用于初始化字段的实时模板,或者我可以自动生成此块的大部分内容吗?

3 个答案:

答案 0 :(得分:19)

您可以使用Initialize field功能。

这样,你只需要用这种方式编写构造函数方法:

class SomeNewService {
    public function __construct(TwigEngine $engine, KernelInterface $kernel, LoggerInterface $logger) {        
    }
}

然后您可以使用初始化字段。将光标放在构造函数的一个属性上,然后在MacOS上使用 Alt + Enter

它看起来像这样:

Initalize fields feature

按Enter键后,您将面对一个属性列表,您可以通过 Shift 和箭头键选择这些属性。通过选择所有属性,您的代码将如下所示:

    class SomeNewService {
    /**
     * @var TwigEngine
     */
    private $engine;
    /**
     * @var KernelInterface
     */
    private $kernel;
    /**
     * @var LoggerInterface
     */
    private $logger;

    /**
     * @param TwigEngine $engine
     * @param KernelInterface $kernel
     * @param LoggerInterface $logger
     */
    public function __construct(TwigEngine $engine, KernelInterface $kernel, LoggerInterface $logger) {
        $this->engine = $engine;
        $this->kernel = $kernel;
        $this->logger = $logger;
    }
}

答案 1 :(得分:2)

您也可以反过来,首先定义属性,然后在“生成”菜单(Cmd + N)中,使用“构造函数”。

答案 2 :(得分:0)

在 Windows 上: 将光标放在构造方法的论证上, 然后按 Alt + Enter ,悬停/选择初始化字段,然后按 Alt + Enter ,然后选择字段并按 Ok 。

享受