どうも、WEBおじさんです。

今日は「自作関数」についてお話しようと思います。

こちら、基本的な書き方はPHPもJavaScriptもほぼ同じなので、いっぺんに覚えてしまうといいんじゃないですかねー。

この「自作関数」というものなんですが、これがなかなか曲者というか、いろんな処理が自分の思い通りの形でデータに出すことができるのでとても便利なんですが、あまり知識がないうちに使い始めると「その処理、デフォルトの関数であるよ」みたいなことが起きるので、最初は「自作関数」を使わずにPHPやJSで最初から用意されている標準関数を調べたりある程度覚えてから使った方がいいと思います。
その方が関数を自作で作るときにも役に立つと思いますので。

というわけで、本日もスタートです!

そもそも「関数って何なの?」という方々は、この記事を読む前に以前に書いた「関数について」の記事を読んでいただけると少しは理解ができるかと思います。

では「自作関数」についてですが、当然これもプログラムの一つなので幾つかのルールがあります。

ルール1:書き方

いわゆる「定義の仕方」ですね。

「●●という関数を作りましたよー」ということをPHPにお知らせする方法ということです。
関数定義は以下のように書きます。

<?php
function kokonikansu(hikisu1,hikisu2){
//ここに内容
}
?>

「<?php ~ ?>」については、PHPを使ったことがある方ならわかると思いますが、phpを書く時の宣言です。
これは必ず必要ですので、初心者の方はご注意ください。

上の例を見ていただくと「function ~」から始まっている行がありますよね?
これが定義のルール1です。

まず「function」から始め、上の例の「kokonikansu」部分が「関数名」となります。

ルール2:関数名の付け方

関数名の付け方のルールは「数字で始めないこと」「使える文字は半角英数字とアンダースコア(_)」の2つです。
これを守らないと構文エラーとなります。
また、大文字小文字の区別はありませんのでご注意ください。

ちなみに、ボクは関数名は割と長めに付けちゃったりします。
そして、単語ごとに大文字を入れたりしてます。
↓こんな感じに。

koregaKansumeiDa

理由は「他の関数名と被りにくい」のと「なんとなく何に使っているかわかる」からです。

ルール3.引数の定義

そして、次に関数名の横にカッコでくくられたいわゆる引数部分があります。
これはそのまま「引数を定義」してます。
この部分、ボクが使いたての頃あまり理解できてなくてちょっと困ったので、同じことで手が止まっている方たちに向けてその内容をお話しておきます。

まず、関数を定義する際に定義する引数名はその関数内で使用する変数名になります。自作関数外で使っている変数名ではありません。
自作関数を実際に使用する際、引数に変数や値を書くと思うんですが、それらの値が自作関数で定義した引数名となって自作関数内に渡されるのです。

・・・ちょっと言ってることがよくわかないすねw

つまり、こういうことです。

<?php

$a = 1;
$b = “tako”;

print outputString($a,$b);

function outputString($num,$str){
$strings = “変数aは” . $num . “で、変数bは” . $str . “です。”;

return $strings;
}

?>

↑のように書いた場合、実際に出力される文字は「変数aは1で、変数bはtakoです。」となるのですが、出力する時に引数に入れてるのは事前に定義された変数名なのですが、関数を定義する際に入れている引数には別の変数名が書かれていますよね?

これ、「なんで?」ってなりません?w
ボク、なっちゃったんですよwww
だからこっから全然頭に入らなくて、なんとなく使ってたんです。
だから関数を定義した時の引数には出力するときと同じ変数名を定義していましたw
これも、まぁ、使い方の一つなのでわかりやすくていいのですがこれだと関数の良さ半減ですw

なぜかというと、そもそも関数というのは料理のようなもので、素材を関数の中に入れて別のものに変換して出力するんです。
で、その変換する処理を関数にする理由としては、いろんなところで同じ処理をする場合、何度も同じ処理を書くとファイル内の行数も多くなるし、行数が多くなれば当然ファイルの容量も大きくなるし、何より何十行も書くのがめんどくさいので、自作関数で処理定義を一度に抑えればいいじゃん、てことなんです。

なので、使い方が決まっているというか、出力データが「これ」と決まっていて、それがいろんなページで出力される場合は問題ないんですが、そうではなく全ページでも使用するしいろんな変数名をその関数内に入れて処理をしたい、という場合は関数定義の引数名と出力する際の変数名が同じにしてしまうと色々と不都合が発生します。(例えば、文字列にある特定の文字を追加したり入れ替えたりする場合など)

なので、不特定多数の種類の値に対して使用するような関数を自作した場合は必然的に定義引数名と使用変数名が異なります。

・・・これでわかりました?
すごく不安ですが、これ以上の説明はできませんw

なので「自作関数を作ったときに定義する引数名はその自作関数内でしか使えない」ということを覚えてください。

そして、自作関数内でprintやechoを使用した場合は関数を使うだけでprintやechoが実行されるので、ページに出力されてしまいます。

もちろん、使い方は人それぞれなのですが、ボクは9割くらいはreturnで値を返すようにしてます。
関数内でprintする時はほとんどデバッグ時ですね。

で、少し話が戻りますが、上の自作関数を定義例では引数名を定義していますが、実は引数なしでも自作関数を作ることができます。その場合は当然出力する際も引数に値を渡しません。
また、引数の数はいくつでも結構です。(上限はあると思いますが、簡単にはたどり着かないと思いますw)

さらに、自作関数で引数を定義した場合、使用する際には同じ数だけ変数や値を入れる必要があります。それは値が空であったとしても入れる必要があります。
そうしないとPHPから「渡す値が定義されてないよ」と構文エラーが出てしまいます。

【×ダメな例】

<?php
$a = 1;
$b = “tako”;

print outputString($a,$b);

function outputString($num,$str,$img){
$strings = “変数aは” . $a . “で、変数bは” . $b . “で最後は” . $img . “です。”;

return $strings;
}

?>

【〇正しい例】

<?php
$a = 1;
$b = “tako”;
$img = “ファイル名”;

print outputString($a,$b,$img);

function outputString($num,$str,$img){
$strings = “変数aは” . $a . “で、変数bは” . $b . “で最後は” . $img . “です。”;

return $strings;
}

?>

ダメな例だとエラーになります。
正しい例だと「変数aは1で、変数bはtakoで最後はファイル名です。」と出力されます。

ということで、自作関数の作り方は以上になります。

まとめると、

1.「function 関数名(引数1,引数2,引数3…){}」と書く
2.「{}」で囲んだ中に希望の処理を書く
3.関数名は「アルファベットかアンダースコア」で始め、使える文字は「半角英数字とアンダースコア」
4.出力する際には引数定義した数と同じ数を引数に指定する(指定するものがない場合は「”」という感じで空でも指定する)
5.引数定義はなくても自作関数は作成可能

こんな感じですかねー。
処理は普通にPHPやJavaScriptでやりたいことを書けばいいと思います。

ということで、どうでしたでしょうか。
今回はPHPを例にして書いてしまいましたが、JavaScriptの場合でも変数名の書き方が違うくらいで、書き方はほぼ同じです。
なかなか説明が難しくて、うまく伝えられたか不安です。
でも、全部が伝わらなくても気になってた箇所を理解することができた!と思っていただけたら幸いです!

尚、自作関数の引数名を定義する際には応用編というのもありますが、これはまたの機会に話したいと思います。

ということで、WEBおじさんでした!

この記事の感想を教えて下さい!
  • 役に立った! (0)
  • 面白かった! (0)
  • よくわからない (0)
  • 役に立たない (0)
  • そんなこと知ってるし (0)