How to mark unused parameter in a function?

Question in russian, sorry.

Если в сигнатуре функции (в родительском классе или в интерфейсе) предусмотрен какой-либо параметр, но в конкретной реализации функции он не используется, то IDE выдаёт предупреждение “Unused parameter $foo”. Как можно указать IDE, что в данной конкретной реализации (!) функции этот параметр не должен использоваться, и это не ошибка? Возможно, есть какие-то метки в phpDoc или ещё где-то?

3 comments
Comment actions Permalink

Hi David,

I see two approaches:

1. Try default value, e.g.

public function doSomething ($first, $second, $optional = null) {...}

class ParentClass
{
    /**
     * @param string $first
     * @param int    $second
     * @param mixed  $third
     * @return string
     */
    public function doSomething($first, $second, $third)
    {
        return $first . '-' . $second . ':' . strval($third);
    }
}



class ChildClass extends ParentClass
{
    /**
     * @param string $first
     * @param int $second
     * @param mixed $third
     * @return string
     */
    public function doSomething($first, $second, $third = null)
    {
        return parent::doSomething($first, $second + 1, $third);
    }
}



$v = new ChildClass();
$v->doSomething('yes', 42);


2. via PHPDoc comment using [optional] after parameter name (will work in PhpStorm, not sure about any other IDE or documentor (e.g. PHPDoc itself or DocBlox)):

class ChildClass extends ParentClass
{
     /**
      * @param string $first
      * @param int $second
      * @param mixed $third [optional] This is very useful parameter .. but not in this particular implementation
      * @return string
      */
     public function doSomething($first, $second, $third)
     {
          return parent::doSomething($first, $second + 1, $third);
     }
}
0
Comment actions Permalink

Большое спасибо, но я, наверное, не совсем правильно сформулировал вопрос. Имелся в виду вот какой случай:

abctract class Foo {

     abstract function bar($a, $b, $c);

}



class FooChild extends Foo {

     function bar($a, $b, $c) { // IDE warning: Unused parameter '$c'
          return $a + $b;
     }

}



То есть, в теле конкретной реализации функции bar параметр $c не используется совсем. Опустить его я не могу — будет конфликт с декларацией функции, да и не обязательно такой параметр стоит последним. Метка [optional] в этом случае, к сожалению, не спасает.

Пока писал, нашёл «решение»:

function bar($a, $b, $c) { // no IDE warnings
     $c;
     return $a + $b;
}



Но оно не очень хороее, конечно.
0
Comment actions Permalink

I see.

Your approach may not work in PhpStorm 3.5 because of http://youtrack.jetbrains.net/issue/WI-7444?projectKey=WI

You may try one of these then:
1) Suppress inspection for this particular parameter (obviously, for PhpStorm only):

    function bar($a, $b, /** @noinspection PhpUnusedParameterInspection */ $c)
    {
        return $a + $b;
    }

2) Overriding inspection for WHOLE project (may not be ideal if you want to have such checks in other places):

  • Settings | Inspections | PHP | Unused | Unused parameter
  • select "Don't report parameters of overriding methods" -- it's there just for such situations
1

Please sign in to leave a comment.