先日の記事を書いた後
- Qiitaに投稿後あらためて自分の記事見たら、参考記事としてPHP5上級試験のをまとめてる方がいた(下記)
- せっかくなのでそれも参考にしつつ、自分なりに勉強に役に立つようにまとめたい
参考
PHP5技術者認定試験(上級)に学ぶ、実はよく知らないPHPの仕様 (1) | @tmak_tsukamotoさん
#注意
初級ならわかるようなものはこちらには書きません。
すみませんが、変数や関数とはなんぞやがわかるようになってから再び来てください。
分かりづらい、間違いやすいと思うものだけ、下記に整理していきます。
勉強のために、問題形式になってますのでご了承ください。
覚えること雑記
- マクロ屋時代からパラメータのことを引数と言っていたが、正確には仮引数。
- その仮引数に入れる値こそが実引数。(確かにそのほうがわかりやすい)
副作用を持つ関数
- 副作用とは、引数から返り値を計算する以外の動作をするもの
- ユーザー定義関数に多い
- 組み込み関数でいうと、unlink()がある。下の通り、引数を返す以外に、ファイルを消す動作がある。これが副作用。
- ちなみにunlink()の第2引数はストリームなんだそうだが、たとえばどんなのを指定できるのかわからない。誰か教えてくれると嬉しいです。
$filename = 'index.php'
$bool =unlink($filename); //指定したファイルを消す。成功したらTRUE,失敗ならFAlSEを返す。
if ($bool){
echo 'ファイル削除しました'
else {
echo 'ファイル削除失敗しました'
}
#問題
Q1. 次のコードの関数または変数の呼び出しはうまくいくか否か。
(1)
function MYFUNC() {
echo 'ようこそ';
}
myfunc();
(2)
function _sendme() {
echo 'ようこそ';
}
_sendme();
(3)
function _123() {
echo 'ようこそ';
}
_123();
(4)
function 123_() {
echo 'ようこそ';
}
123_();
(5)
function a123_() {
echo 'ようこそ';
}
a123_();
(6)
sendme = "ようこそ";
echo SENDME;
(7)
function judge($clue){
if($clue){
?>ようこそ<?php
}
}
func(true);
#A1(解答)
(1)関数の場合、大文字小文字は区別されない。
よって、うまくいき、「ようこそ」が出力。
(2)関数名の最初は、文字、アンダースコアにする必要がある。
よってうまくいき、「ようこそ」が出力。
(3)2番目が数字でもうまくいく。
よってうまくいき、「ようこそ」が出力。
(4)1番目が数値だとうまくいかない。2番目から。
(5)関数名の終わりがアンダーバーでもOK。
1番目が文字とアンダーバー、2番目から数値のみ加わる、と覚えればよい。
終わりは考えなくてOK
(6)変数だと大文字小文字は区別される。
したがって、エラーはないが、出力はない。
(7)?> ~ <?php に囲まれたテキストはそのまま出力される。
したがって、「ようこそ」を出力。
この書き方は、とくにHTMLファイルにPHPを埋め込むときによく使われる。
中間まとめ
- 関数の場合、通常ならしないようなマイナーな書き方で書けるのかどうかを問う問題が多いと感じる。
- そこで、普段ならしない書き方で書いてみて、実際にエラーが出るのか出ないのか確認する作業が必要
- でも絶対的なルールはあるので、そこはしっかり覚えるようにする