붙이는 클래스가 특정의 부모 클래스를 가지는 것을 알고 있는 trait내에서, 그 클래스의 입력 보완을 사용하고 싶다

9908 단어 NetBeansPHP7

개요



나는 NetBeans를 애용하고 있습니다.
trait의 입력 보완이 잘되지 않기 때문에 곤란했습니다.

설례



여러가지 메소드를 가지는 이런 클래스가 있다고 합니다.

다양한 방법을 가진 클래스

class ClassComplicated
{
    public function __construct()
    {
       ;
    }
    public function methodA() : PDO{ return new PDO(); }
    public function methodB() : string { return 'a'; }
    public function methodC(){}
    public function methodD(){}
    public function methodE(){}
}

추상 클래스가 있고, 그 녀석은 앞에서 설명한 클래스를 속성에 가지고 있습니다.

추상 클래스

abstract class MyClassParent
{
    protected $_cp;

    public function __construct(ClassComplicated $cp)
    {
        $this->_cp = $cp;
    }

    abstract public function doSomethingOne();
    abstract public function doSomethingTwo();
    abstract public function doSomethingThree();
}

그 추상 클래스를 상속하는 것을 전제로 한 자식 클래스를 몇개 구현한다고 합니다.
다만, 그 아이 클래스들은 여러가지 거동의 조합으로 하고 싶기 때문에, 추상 클래스의 추상 메소드는, trait로 정의해, 그것을 붙이는 것으로 합니다.
(왜 trait를 사용하는지의 동기 설명)

아이 클래스

class MyClassChildOne extends MyClassParent
{
    use MyTraitOneAlpha;   // doSomethingOneの実装
    use MyTraitTwoAlpha;   // doSomethingTwoの実装
    use MyTraitThreeAlpha; // doSomethingThreeeの実装
}

class MyClassChildTwo extends MyClassParent
{
    use MyTraitOneBeta;    // MyClassChildOneと比較すると、doSomethingOneだけ別の実装
    use MyTraitTwoAlpha;
    use MyTraitThreeAlpha;
}


드디어 trait를 구현합니다만, 이 때 입력 보완이 되지 않는다.

trait
trait MyTraitOneAlpha
{
    public function doSomethingOne()
    {
        /******************************************************************
         *  MyClassParentの $_cp のメソッドを使うべく入力中だが、補完が出ない
         *  このtraitはどこにも関連付けられていないので、そりゃそうだ
         ******************************************************************/
        // 出ない
        $this->_c
        // もちろん出ない
        $this->_cp->method
    }
}

실제 이미지


MyClassParent의 아이 클래스 밖에 붙지 않는 전제의 trait이기 때문에, 어떻게 해서 이 trait가 MyClassParent 라고 IDE에 생각나게 하고 싶습니다만, 좋은 방법을 모르겠습니다.

솔루션 1



phpDocumentor를 붙인 아이 trait를 만들어 어떻게든 한다

cp 가지고 갈 trait
trait EnableGetClassComplicated
{
    /**
     * 
     * @return \ClassComplicated
     */
    public function getCp() : \ClassComplicated
    {
        return $this->_cp;
    }
}

수정된 MyTraitOneAlpha
trait MyTraitOneAlpha
{
    use EnableGetClassComplicated;

    public function doSomethingOne()
    {
        // 出る
        $this->getCp()->
    }
}



솔루션 2



부모 클래스에 넣어라.

수정된 부모 클래스
abstract class MyClassParent
{
    protected $_cp;

    public function __construct(ClassComplicated $cp)
    {
        $this->_cp = $cp;
    }

    abstract public function doSomethingOne();
    abstract public function doSomethingTwo();
    abstract public function doSomethingThree();

    /**
     * 
     * @return \ClassComplicated
     */
    public function getCp() : \ClassComplicated
    {
        return $this->_cp;
    }
}

trait는 부모를 참조

trait EnableGetClassComplicated
{
    /**
     * 
     * @return \ClassComplicated
     */
    public function getCp() : \ClassComplicated
    {
        return parent::getCp();
    }
}

나가다


입력 보완을 위해서 trait 독자적인 새로운 메소드가 자라는 것은 좋지 않다고 생각하기 때문에, 부모를 보는 것만의 해결안 2로 나는 하려고 하고 있습니다.
(입력 보완을 위해 부모에게 살고 있는 것이 되지만, 단지 getter이기 때문에 뭐 좋을 것의 정신)

조임



더 좋은 방법이 있으면 알려주세요.

좋은 웹페이지 즐겨찾기