2014-09-12 3 views
11

В настоящее время я пытаюсь удалить все ошибки и предупреждения, которые у меня есть в моем проекте, инструмент Inspection от моего PHPStorm дает мне.PHP: имя переменной; Как сообщить IDE, что моя функция называется?

Я встречаюсь с фрагментами PHPStorm говорит «Неиспользуемый частный метод _xxx», хотя он фактически используется, но динамически. Вот simplifyed фрагмент:

<?php 
class A 
{ 
    private function _iAmUsed() 
    { 
     //Do Stuff... 
    } 

    public function run($whoAreYou) 
    { 
     $methodName = '_iAm' . $whoAreYou; 
     if (method_exists($this, $methodName)) { 
      $this->$methodName(); 
     } 
    } 
} 

$a = new A(); 
$a->run('Used'); 
?> 

В этом фрагменте PhpStorm скажет мне «Неиспользованные частный метод _iAmUsed» в то время как, на самом деле, он используется ... Как я могу, добавляя PHPDocs или что-то, что бы , чтобы мой IDE понял, что мой метод действительно используется?

Обратите внимание, что я даю моим «запустить» вызов, статическую строку, но мы можем себе представить, также это:

<?php 
$a->run($_POST['whoYouAre']); //$_POST['whoYouAre'] == 'Used' 
?> 

Спасибо большое!

+0

Подобно тому, как FYI, IDE предупреждения там просто, чтобы вы знаете, что-то может быть не так. Удаление всех из них (где они произвольны в любом случае) на самом деле не является достижимой целью. – Machavity

+0

Да, вы не должны уделять слишком много внимания поверхностному анализу IDE (в PHPStorm это действительно не проверка статического кода, а также мало подходит для динамических функций PHP). Просто примените «Игнорировать этот экземпляр» в отчетах, если вы уже проверили, что он работает по назначению. – mario

+1

Одним из «глупых» способов удаления такого предупреждения (из-за вашего динамического использования) является отметка этого метода как 'protected', а не' private'. PhpStorm (как и любая другая PHP IDE здесь) не может обнаружить такое высокодинамичное использование, используя только статическую (и почти статическую) проверку кода (как уже упоминалось выше) – LazyOne

ответ

25

метки, используемые методы в PHPDoc, как @used пример

/** 
* @uses _iAmUsed() 
* @param string $whoAreYou 
*/ 
public function run($whoAreYou) 
{ 
    $methodName = '_iAm' . $whoAreYou; 
    if (method_exists($this, $methodName)) { 
     $this->$methodName(); 
    } 
} 
+0

Это лучше, чем тег «noinspection». Спасибо вам большое. – niconoe

+2

Чтобы получить более подробную информацию об этом, есть также тег «used-by», который может помочь отсылать использование. Использование тегов «uses» и «used-by» позволяет быстро перемещаться и ссылаться в обоих направлениях. – niconoe

6

Добавить noinspection аннотацию выше метода:

/** @noinspection PhpUnusedPrivateMethodInspection */ 
private function _iAmUsed() 
{ 
    //Do Stuff... 
} 

Или после запуска анализа кода для постановки вы можете щелкнуть правой кнопкой мыши любой проверки в окне результатов и выберите Подавить иметь PhpStorm добавить сам надлежащее аннотацию , Для получения дополнительной информации см http://www.jetbrains.com/phpstorm/webhelp/suppressing-inspections.html