最終更新: freeze_2246 2016年12月07日(水) 04:36:14履歴
プラグインを作ってる時に良くやってしまう事を幾つか紹介します。
public function onEnable(){ $n = "TestPlugin" $this->getServer()->getPluginManager()->registerEvents($this, $this); $this->getLogger->info($n"を読み込みました。");
お気づきかも知れませんが、これではエラーが起きてしまいます。(SyntaxError)
なので、ちゃんと}で閉じてあげましょうか。
public funtion onEnable(){ $n = "TestPlugin" $this->getServer()->getPluginManager()->registerEvents($this, $this); $this->getLogger->info($n"を読み込みました。"); }
はい。これでちゃんと閉じてあげたので、エラーは起きなくなります。
こんな感じでプラグインというものは、凄く繊細なのでちょっとしたことでもエラーを吐きます。
プラグインを作る際には十分に注意しましょう。
public functionはプラグインにおいて、必要不可欠なコードになります。
しかし、public functionの中にもう一つpublic functionを入れてしまうと、エラーを吐きます。
public function onEnable{() $this->getServer()->getPluginManager()->registerEvents($this,$this); $this->getLogger->info("プラグインを読み込みました。"); public function onCommand(CommandSender $sender, Command $command, $label, array $args){ } }
明らかにおかしいコードですが、分からない人のために解説します。
冒頭でも言ったように、 public functionの中にpublic functionが入っています。
そのまま書くとpublic functionpublic functionと認識されています。
なのでこうしなければなりません。
public function onEnable(){ $this->getServer()->getPluginManager()->registerEvents($this,$this); $this->getLogger->info("プラグインを読み込みました。"); } public function onCommand(CommandSender $sender, Command $command, $label, array $args){ }
はい。これでエラーは出なくなりました。
ですがこんなコード書いても一部分しか書いてないので、これを書いたプラグインはエラー出ますがね(^^)
コード内で未定義の変数を使用しており、エラーが起こる事例が多々あります。
定義については
$○○ = ○○; //変数 $this->○○ = ○○; //メンバ変数 global $○○; //グローバル変数などというように、変数の種類や定義の方法はさまざまありますが未定義の変数を使用すると
Notice: Undefined variable と表示されます。
エラー文から、周辺のコードの見直しをしましょう。
皆さんは、中学校などの英語で、セミコロン;を使いましたよね?
実は、php言語にはセミコロンが欠かせません。(実はというほどでもない)
プラグインのコード内でのセミコロンの役割といえば、簡単に言うと、日本文の「。」の役割を果たします。
セミコロンはコードの一文一文の最後に使用します。
サーバーはセミコロンが無いコードは読み込むとエラーを出します。
<?php namespace TestPlugin use pocketmine\Server use pocketmine\Player use pocketmine\plugin\PluginBase use pocketmine\event\player\PlayerChatEvent use pocketmine\command\Command use pocketmine\command\CommandSender use pocketmine\event\Listener class TestPlugin extends PluginBase implements Listener{
見た感じ、プラグイン開発者様なら、分かりますが、解説します。
セミコロンが付いてないの!ポカ───( ゚д゚ )───ン
はい。直しますね。
<?php namespace TestPlugin; use pocketmine\Server; use pocketmine\Player; use pocketmine\plugin\PluginBase; use pocketmine\event\player\PlayerChatEvent; use pocketmine\command\Command; use pocketmine\command\CommandSender; use pocketmine\event\Listener; class TestPlugin extends PluginBase implements Listener{
直しました。
全ての行の最後にセミコロンを装着しました。
ただ、例外があり、{の行にはセミコロンは装着しません。
なので、class宣言の行にはセミコロンは装着しません。
$sender->sendMessage("You can not run this command , but it is possible to be executed ."); }こんな感じで、sendMessageなどの( )にもセミコロンは装着します。
セミコロンの装着のし忘れによるクラッシュなどはSyntaxError(シンタックスエラー)として処理されます。
クラッシュダンプが生成されるはずなので、それを見ながら修復すれば、確実にプラグインの開発に成功します。
以上の事を注意しながらコードを書いていけばエラーを出さずにプラグインが書ける(ハズ)ので、頑張ってくださいね。
タグ
最新コメント