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

如何在phpstorm中自动生成类的属性?,php,phpstorm,auto-generate,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\Asset

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

<?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;
    }
}

您可以使用
初始化字段
功能

这样,您只需按以下方式编写构造函数方法:

class SomeNewService {
    public function __construct(TwigEngine $engine, KernelInterface $kernel, LoggerInterface $logger) {        
    }
}
然后可以使用初始化字段。将光标移到构造函数的一个属性上,然后在MacOS上使用Alt+Enter

它看起来像这样:

    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;
    }
}

按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;
    }
}

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

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


享受

没有办法将字段初始化为受保护的或公共的吗?@hackel我一直在寻找一种方法,使它们在默认情况下也受到保护。一般来说,
public
private
都被认为是不好的做法。不过还没有找到解决办法。@Maurice从私底下被认为是坏习惯开始。使用public和protected是不好的做法,因为您没有封装属性。当你做开源的时候,你会发现受保护真的很糟糕。人们将以不为其创建的方式使用这些属性。只有在真正需要且公众从未同意的情况下才应使用受保护。在95%的情况下,你应该把所有事情都保密。您可以使用您的方法从对象中获取内容。您通常只使用构造函数将内容放入对象中。这样想,你会走得更远。最让我困惑的是,phpstorm调用类成员变量“字段”,而不是php术语中的“属性”。