公開日:
:
最終更新日:2014/08/09
HTML・CSS, IT運用のTipsまとめ PHP, コード, スマート
プログラミング言語には様々なものがありますが、その中でも比較的人気なのがPHPです。PHPはHTMLファイルに直接記述できるスクリプト言語であり、その手軽さや言語自体のわかりやすさなどから、主にWebサービスの制作でその人気を獲得しています。
PHPは他の言語に比べてとても簡単な仕様となっており、初心者でもすぐにマスターすることができるものです。そして、同じプログラムを書く際でも複数の書き方が可能になっており、使用者に合わせた柔軟性も兼ね備えています。
そのような様々な書き方があるならば、なるべく手短でスマートなコードの書き方をマスターしたいものです。コードをスマートに記述することは以下のメリットがあります。
このようにメリットが様々あるので、同じプログラムであれば記述量が少なく見やすいスマートなコードを記述するべきでしょう。そこで、今回はPHPにおけるスマートなコードの記述の仕方を紹介します。結構知らないものもあると思うので、PHPプログラマーなら必見です。それではどうぞ。
PHPにおいてはif文やwhile文においては以下のように中のコードを括弧({})でくくります。
if(...) {
........
}
while(...) {
........
}
この括弧は基本的にはつけますが、中の実行コードが1つだけの場合は省略することができるのです。以下のように省略できます。
if($a==2)
echo $a;
else
echo '3';
命令が二つ以上であれば括弧でくくる必要があります。セミコロン(;)が2個以上のときはカッコでくくり、1個の場合は省略してもよいと覚えるといいでしょう。
if($a==2) {
$c=$a+2;
echo $c;
echo $a;
}
この括弧({})があるものは、どれも中身の実行コードが1つだけであれば省略することができます。特に中身が1つだけのものを何回も書く場合は見づらくなります。省略することで見やすくなるので、おすすめです。
以下のようなif文があるとします。
if($a==2) {
$c=$a+2;
}else{
$c=3;
}
これは普通の記述ですが、括弧でかなり見にくいです。そのため、このようなそれぞれの条件で変数定義をする場合は三項演算子を使うと便利です。三項演算子は以下のように使います。
(条件) ? 真の場合 : 偽の場合 ;
これを用いて条件分岐で変数を定義できます。以下のif文の場合は以下のようになります。
$c= ($a==2) ? $a+2 : 3 ;
かなりスマートに記述できます。変数定義だけではなく、条件分岐によるechoやprintも可能です。たとえば以下のように記述できます。
echo ($a==2) ? $a+2 : 3 ;
最初は慣れないかもしれませんが、使い慣れるとかなり便利で、記述をスマートにできるので、ぜひマスターするべきでしょう。
以下のように条件がたくさんあるif文があるとします。
if($a==2) {
$c=$a+2;
}else if($a==5){
$c=$a+5;
}else if($a==7){
$c=$a+1;
}else if($a==8){
$c=$a+12;
}else if($a==10){
$c=$a+55;
}else{
$c=$a;
}
このようなelseが多い場合は括弧やelseが多くなるので見にくくなります。括弧を省略したとしてもまだ見にくいし、省略できない場合はなおさらです。そこで、この場合はswitch文を使うことでスマートにできます。switch文は以下のように記述します。
switch(変数・式・文字列){
case 値1 :
処理
break;
case 値2 :
処理
break;
default :
処理
}
switch文は最初の括弧に入れた変数・式・文字列とそれぞれのcaseの値を比較して、上から順番にマッチしたものを実行するものです。注意することはbreak;を必ず記述することです。記述しないとそこで処理が止まらず、後のcaseも比較されマッチした場合にはそれも実行されてしまいます。defaultはどのcaseにもマッチしない場合で、if文の最後のelseと同じと考えていいでしょう。このswitch文を使うことで、上記のif文は以下のように記述できます。
switch($a){
case 2:
$c=$a+2;
break;
case 5:
$c=$a+5;
break;
case 7:
$c=$a+1;
break;
case 8:
$c=$a+12;
break;
case 10:
$c=$a+55;
break;
default:
$c=$a;
}
どうでしょうか。括弧がない分、見やすくなることができます。条件がたくさんあるif文はswitch文を使うことでスマートにできますし、高速化にもつながるので、活用するといいでしょう。
繰り返しの処理には以下のようにwhile文を使用します。
$i=1;
while($i<10){
$a=1+$i;
echo $a;
$i++;
}
このような外部で変数を定義して、その値をループ内で増やすことで条件として定義するというwhile文はよく使いますが、$i=1や$i++などの記述が面倒だし、見にくくなります。そんなときはfor文を使うことでスマートに記述できます。以下の仕様になります。
for(初期値 , ループ条件 , 変化式){
処理
}
これを利用することで、上記のwhile文は以下のようにできます。
for($i=1 , $i<10 , $i++){
$a=1+$i;
echo $a;
}
このようにかなりスマートに書くことができます。数を増加させて、それを条件にする際はこのfor文を使うことで見やすく書くことができます。
配列への要素の追加はarray_pushを以下のように用います。
array_push($array , $value);
しかし、これでは記述するのが結構面倒です。単なる要素の追加ならば、変数宣言と同じ形で以下のように追加することができます。
$array[]=$value;
変数の最後に[]をつけることで配列を表し、その値が配列の要素として追加されます。これは上記のarray_pushとまったく同じ結果になります。また、キーも指定することができ、以下のように[]の中にキーとなる文字列や変数を入れればいいだけです。
$array[$key]=$value;
この方法ならばキーの有無にかかわらずスマートに書くことができるので、かなりおすすめです。とても重宝します。
関数には、関数内で使う変数を外部から呼び寄せるための引数を使用します。例えば、以下のような関数があるとします。
function test ($a) {
if(!isset($a)){
$a=2;
}
$c=$a+2;
return $c;
}
これは最初に引数がない場合に引数に相当する値をif文で定めていますが、これをいちいち書くのは面倒です。そこで、引数にデフォルト値を設定することができます。これは以下のようにできます。
function test ($a = デフォルト値 , $b = デフォルト値 , $c) {
処理
}
もちろんすべての引数にデフォルト値を設定することができ、設定することで引数が空の場合はそのデフォルト値が使われるようになります。デフォルト値はあってもなくてもどちらでも大丈夫です。これによって上記の最初の引数の存在分岐が必要となくなり、以下のように記述できます。
function test ($a = 2) {
$c=$a+2;
return $c;
}
かなりスマートになります。ぜひ活用してみてください。
関数の中で外部の変数を使う時は引数を設定しますが、それを記述するのは結構面倒です。そこでglobal属性というものを使うことができます。
function test () {
global $a;
$c=$a+2;
return $c;
}
global属性は上記のように変数の前に記述することで、その変数がグローバル変数であるということを定義しています。こうすることで外部のグローバル変数である$aをそのまま使用することができ、引数に$aを設定した場合と同じことができます。
ただ、注意が必要なのはグローバル変数なので、関数の中で変数を上書きしてしまうと、関数以外で使う時もその値になってしまいます。それがまずい時は普通に引数として、関数の内部だけの変数として使うことをお勧めします。
if文の条件の中では基本的には演算子を用いて、条件のマッチを行います。その場合に、それがtrueやfalseを示すものであれば、それ自体を条件式の中で変数に代入することができます。主にfalseを返す関数などで使用できるでしょう。例えば以下のif文があるとします。
if(strpos($str , 'abc')){
$num=strpos($str , 'abc');
echo '「abc」はこの変数の'.$num.'番目にあります。';
}
strposは文字列検索の関数で、検索する文字がない場合はfalseを返します。ヒットした場合はその文字列の開始する場所を番号として出力します。そして、if文の中では改めてstrposを変数に代入していますが、この場合は条件式の中で変数に代入することができます。以下のように書くことができます。
if($num=strpos($str , 'abc')){
echo '「abc」はこの変数の'.$num.'番目にあります。';
}
いちいち同じ関数を書くのも面倒ですし、重い関数であれば速度的にも問題がでます。true(数値・文字列)やfalseで判断する条件式であれば、その結果を条件式で変数に代入できますので、ぜひ活用しましょう。
文字列と変数を組み合わせるときは以下のように「.」で連結しなければなりません。
'私は'.$name.’と言います。年齢は’.$old.’歳です。よろしくおねがいします。’;
しかし、これだと見にくいし、書きづらくてエラーが発生しやすくなります。そのため、以下のように見やすく連結させることができます。
"私は{$name}と言います。年齢は{$old}歳です。よろしくおねがいします。";
ポイントとしてはダブルクオーテーションを使うところです。シングルクオーテーションだとエラーになります。また括弧({})で変数をくくらなくてもいいですが、変数にないアルファベットが連続していた場合などは変数として判別できなくなるので、見やすさも含めて連結する変数は括弧でくくるようにするといいでしょう。
条件分岐などで変数の存在はissetで判別します。しかし、issetは空文字でもtrueになるので、空文字ではない場合は以下のように条件分岐しなければなりません。
if(isset($str) && $str!=''){
空でない場合の処理
}
これは条件を二つ書くのは面倒ですし、条件が多くなった場合には見づらくなります。そこで、空文字もfalseを返すためにemptyを使うといいでしょう。emptyは空文字などもfalseを返します。
if(!empty($str)){
空でない場合の処理
}
emptyは文字列が空の場合にtrueを返すので、空でない場合は上記のように否定演算子を使う必要があります。またissetとemptyは以下のように異なるので注意してください。
issetは変数や文字列がnullでない場合にtrueを返す。
emptyは以下の場合にemptyを返す。
issetはnullのみに対して作用しますが、emptyは値がある場合などでも空として判別します。そのため0などがあるときに変数の存在があるという風に判別したいのならばissetを使うようにしましょう。
関数の処理をある条件の時に、途中で中断して再度最初から処理をかけたいという場合があります。そんなときは、その処理の回数だけ関数を記述するのもいいですが、スマートではありません。そこで、関数は同じ関数の中で呼び出すことができます。例えば以下のように記述できます。
function test($num){
if($num<10){
$a=$num++;
test($a);
}else{
return false;
}
}
このような感じに関数の内部で自分自身を呼び出すことができ、ループさせることができます。複雑な関数などで使う機会があるので、覚えてくといいでしょう。
同じ変数にある文字列を足す場合には以下のように記述できます。
$str = $str.'abc';
しかし、これでは同じ変数を2回書くことになるので二度手間です。そこで、結合代入演算子を使うことで、上記のものを以下のように書くことができます。
$str .= 'abc';
たったこれだけで、変数に格納された文字列などに結合させることができます。とても便利なので覚えてくといいでしょう。
以上の中には基本的なものもありましたが、どれ最大限活用することによってスマートなコードの記述が可能になり、保守・管理性がとてもアップします。
初心者の方は結構知らないものが多いのではないでしょうか。コーディング時間短縮のためにも覚えておいて損はありません。ぜひ、マスターすることをおすすめします。
「忘れられる権利」とは? 先日、「忘れられる権利」という言葉が大きく取り上げられました。 「
700種類以上の新ドメインが誕生予定! 新ドメイン「.tokyo」誕生のニュースが話題にな
「.nagoya」とは? 2月20日から、「.nagoya」ドメイン取得の申請が始まり話題にな
「Office Online」とは? 色々言われていても、結局、使う人の多いマイク
日本のiPhoneシェアは約7割! NTTドコモからもiPhoneの販売が始まり、日本におけるiP
WindowsXP、サポート終了間近! 4月の「Windows XP」サポート終了の日が近づいてき
無視できないLINEの乗っ取り被害 ここ数日、LINEアカウントの乗っ取り被害が急増しています。
WindowsXPの脆弱性報告が618件 マイクロソフトは、2014年4月9日(日本時
SEO対策は検索エンジンにおいて自サイトの上位表示を獲得するための対策です。上位表示することによ
被リンク構築は、今でも大きなSEO対策のひとつ これまでに何度もGoogleによるスパムリ