ここでは、より複雑なプラグインを作るためのコードの書き方などを書いていきます。
phpの少し難しい部分にも触れます。本来wikiで解説するべきではないのかもしれませんが需要があるとのことで書き残しておきます。
ただの変数だと、その関数(function)の終わりにリセットされる。破棄されてしまう。
(たとえば$name = $player->getName();とすると、次関数が実行されるときには別の値になっている-つまりリセットされてしまう)
しかしグローバル変数($xxx->がつくやつ)を使うと、そのclass内(もしくは外でもいい)では、入れた値を取得できるようになる。function内で破棄されないのである。
これを使うことで、例えばこのユーザーは今どういう状態で…ということを判別が可能になる。
phpの少し難しい部分にも触れます。本来wikiで解説するべきではないのかもしれませんが需要があるとのことで書き残しておきます。
まず初めに変数に代入可能な値の種類について学んでおこう。
この"値の種類"は、プログラム用語で「型」と呼ばれる。
いままで、これを読んでいる方は「変数にはなんでも入れれる」と言って、文字(string型)だったり数字(int型)、trueやfalse(bool型)などを代入してきたことだろう。
配列(array型)-連想配列とも呼ばれる-も変数に代入可能な値の一種。
さまざまな値をひとまとまりにしておける便利なものが配列である。
概念として、箱みたいなものなものだと覚えておけばいいだろう。
ようするに、配列は値をまとめて一塊にして扱えるものだ、と考えればいい。
配列は、$name = "あい うえお";と同じような形で、$names = array("あい うえお","かき くけこ");のような形で代入可能。
以下で詳しく書くとする。
この"値の種類"は、プログラム用語で「型」と呼ばれる。
いままで、これを読んでいる方は「変数にはなんでも入れれる」と言って、文字(string型)だったり数字(int型)、trueやfalse(bool型)などを代入してきたことだろう。
配列(array型)-連想配列とも呼ばれる-も変数に代入可能な値の一種。
さまざまな値をひとまとまりにしておける便利なものが配列である。
概念として、箱みたいなものなものだと覚えておけばいいだろう。
ようするに、配列は値をまとめて一塊にして扱えるものだ、と考えればいい。
配列は、$name = "あい うえお";と同じような形で、$names = array("あい うえお","かき くけこ");のような形で代入可能。
以下で詳しく書くとする。
1
$array = array("あい うえお", "かき くけこ");
2
$array = array();
$array[] = "あい うえお";
$array[] = "かき くけこ";
3
$array = array();
$array[1] = "かき くけこ";
$array[0] = "あい うえお";
4
$array = array( 0 => "あい うえお", 1 => "かき くけこ");
配列には「0番目」があることを知っておこう。
この「0番目」や「1番目」のことを"(配列の)キー"と呼ぶ。
1のコードでは、array(0番目,1番目);のように並んでいる。
一気に代入するときにはこれのほうがよい。
(紙束が入っている箱の中をイメージ)
何かを順番に代入していくときには、2のコードを使うとよいだろう。
(箱を用意しておき、(中に何枚はいっているかなどは確認せず)一枚ずつ順に紙をしまっていくイメージ)
特定のキーにピンポイントで入れたいときには3を使う。
(箱を用意しておき、その中身を見て、「キー番目」に「値」をしまうイメージ)
4は、箱を用意するのと値を入れるのを持ってくる形であり、1とほぼ同様である(キーを明示する書き方をしている)
$array = array("あい うえお", "かき くけこ");
2
$array = array();
$array[] = "あい うえお";
$array[] = "かき くけこ";
3
$array = array();
$array[1] = "かき くけこ";
$array[0] = "あい うえお";
4
$array = array( 0 => "あい うえお", 1 => "かき くけこ");
配列には「0番目」があることを知っておこう。
この「0番目」や「1番目」のことを"(配列の)キー"と呼ぶ。
1のコードでは、array(0番目,1番目);のように並んでいる。
一気に代入するときにはこれのほうがよい。
(紙束が入っている箱の中をイメージ)
何かを順番に代入していくときには、2のコードを使うとよいだろう。
(箱を用意しておき、(中に何枚はいっているかなどは確認せず)一枚ずつ順に紙をしまっていくイメージ)
特定のキーにピンポイントで入れたいときには3を使う。
(箱を用意しておき、その中身を見て、「キー番目」に「値」をしまうイメージ)
4は、箱を用意するのと値を入れるのを持ってくる形であり、1とほぼ同様である(キーを明示する書き方をしている)
上記のコードだと、"あいうえお"と表示したい場合にはprint($array[1])とすればわかるだろう。
次は注意が必要だ。もしprint($array)としてしまうとエラーが出て、"Array"と表示されることだろう。
「そこに箱がある」のはわかるが、「何が入っているか/とってこればいいのか」は示されていないのでこうなる。
''箱に何が入っているかわからない時、もしくは知りたい場合は、'print_r($array);'をすれば中身が見れる。''
↑デバッグの際によく使うので覚えておこう。
次は注意が必要だ。もしprint($array)としてしまうとエラーが出て、"Array"と表示されることだろう。
「そこに箱がある」のはわかるが、「何が入っているか/とってこればいいのか」は示されていないのでこうなる。
''箱に何が入っているかわからない時、もしくは知りたい場合は、'print_r($array);'をすれば中身が見れる。''
↑デバッグの際によく使うので覚えておこう。
先ほどはキーは0と1つまり数字だけだったが、このキーは文字列にすることも可能である。
$array = ("ア行" => "あいうえお" , "カ行" => "かきくけこ");
$array["ア行"] => "あいうえお";
$array["カ行"] => "かきくけこ";
キーを文字列にした場合、数値とは厳密には同次元では併用できないので注意である。(←1度目では意味は理解できなくてよい)
これで配列の中身とキーについては終了だ。
$array = ("ア行" => "あいうえお" , "カ行" => "かきくけこ");
$array["ア行"] => "あいうえお";
$array["カ行"] => "かきくけこ";
キーを文字列にした場合、数値とは厳密には同次元では併用できないので注意である。(←1度目では意味は理解できなくてよい)
これで配列の中身とキーについては終了だ。
ただの変数だと、その関数(function)の終わりにリセットされる。破棄されてしまう。
(たとえば$name = $player->getName();とすると、次関数が実行されるときには別の値になっている-つまりリセットされてしまう)
しかしグローバル変数($xxx->がつくやつ)を使うと、そのclass内(もしくは外でもいい)では、入れた値を取得できるようになる。function内で破棄されないのである。
これを使うことで、例えばこのユーザーは今どういう状態で…ということを判別が可能になる。
キーには文字列も使える、つまりプレイヤー名をキーとして格納することも可能なのである。
たとえば
$name = $player->getName();
$this->player[$name] = 1//クエストを受けている状態にする
これでクエストを受けている状態だと定義する。
この場合
if($this->status[$name] == 1){
#クエストのオーダーを受けているときの処理
else{
#クエストのオーダーを受けていない時の処理
}
と処理を分けることができる。
たとえば
$name = $player->getName();
$this->player[$name] = 1//クエストを受けている状態にする
これでクエストを受けている状態だと定義する。
この場合
if($this->status[$name] == 1){
#クエストのオーダーを受けているときの処理
else{
#クエストのオーダーを受けていない時の処理
}
と処理を分けることができる。
ここまでarrayの中には数値やテキストをデータとして格納してきた。しかし、格納できるのはそれらだけではない。arrayの中にarrayを入れれるのだ。箱の中に箱を入れ、その箱の中に紙が入っている、というような感じである。
いきなりぶっとばしていこう。
$the_player = array(
"money" => 0,
"status" => array("順位" => 0, "状態" => "生"),
"blocks" => array (1,2,3)
);
執筆中
いきなりぶっとばしていこう。
$the_player = array(
"money" => 0,
"status" => array("順位" => 0, "状態" => "生"),
"blocks" => array (1,2,3)
);
執筆中