スポンサーリンク
2013年10月15日
WordPressでショートコードを試そうとしたら、extract関数でundefined variableエラーが発生したので、以下の方法で対処しました。
PHPDocのコメントをextract関数の後に記述します。
/** @var データ型 変数 */
すると、エラー警告が止まります。例えば、このような感じでしょうか。
/** @var string $name */
それにしてもショートコードって便利ですね。更新されていないExec-PHPを使うことに抵抗があったのですが、これで色々遊べそうです。
ショートコードを試すときにHTMLを加工したくて、DOMDocumentを使ってみたのですが、PHPStormのデバッガーでDOMDocumentやDOMElementの変数値を見ることができません。
色々と調べると、
確かにそうするとデバッグできるのですが、せっかくIDEを使ってるのでダイレクトに確認できればと思います。でも、調べると同じような質問をしている人が多いので、無理なのかなと思ったり。
結局、変数の値を確認する方法は見つからず。まぁ、attributeを削除したかっただけなので、SimpleXMLを使いました。こちらは問題なく変数値を参照できました。
Simple HTML DOM ParserやphpQueryを使うべきなのでしょうか。
コード補完が効かなくなることがありました。コード補完が効かなくても、問題なく関数を呼べるのですが、常にMethod "・・・" not found in class
の警告が表示されます。そもそも、コード補完の際、no suggestions
が出ているので当然かもしれません。調べてみると、以下の方法がみつかりました。
おそらくプロジェクトのキャッシュをクリアするようですが、今回の問題には効果なしでした。
コード補完が効かない変数の前に、 /** @var DOMDocument $domdocument */ /** @var DOMElement $domelement */ などのPHPDocを記述すると、コード補完が効くようになりました。
警告が出ても動くのですが、typo以外の警告は気持ちが悪いので、できるだけ無くしたいです。
こんなこともありました。if文で{}ではなく:(コロン)を使い、elseの直後にコメントを入れると、それ以降でコード補完が効かなくなります。
if($flag): else: /** comment */ これ以降、コード補完が効かない endif;
でも、{}(波括弧)なら問題なし。
if($flag){ }else{ /** comment */ 波括弧なら問題なし }
普通はこんなところにコメントを書かないかもしれませんね。私は、前述のPHPDocの問題でたあちこちに書いているうちに遭遇しました。
ちなみに、こうしても大丈夫です。
if($flag){ }else{ ここに何かコードがあれば問題なし /** comment */ }
稀に同じ問題に遭遇する人がいるかもしれませんので、メモ程度に残しておきます。
今まで、kramdown内に画像表示用のhtmlが混ざって、ゴチャッとしていたのですが、ショートコードでスッキリしました。
extract関数についてはPHPDocが原因・・・らしいです、あまり詳しく調べてないです。PhpStrom7で修正されるといいですね。