東京ロケット CEO 兼 見習いサーバーサイドエンジニアのプログラミング学習日記

見習いサーバーサイドエンジニアのボクが、主にプログラミング学習の記録をしていきたいと思います。主にPHP。

PHPを勉強する本について

PHP初学者にとって本選びは結構深刻な問題だと思います。
今は、Webには情報が溢れていますがやはり断片的な情報が多く、体系的に学習できる書籍は手元に置いておきたいものです。

しかも、出来れば最善の書を一冊に絞ってやりたい。最短距離で勉強したいと思うのはみなさん同じだと思います。
ボクもそうです。
とはいえ、色々と書籍は買って一通りやってみました。
そのレビューを簡単にまとめておきたいと思います。また、結論から言うと最善の書と言うのはそのレベルごとに違う。と言うのが今の感想です。
例えば入門書にはあえて、難しい表現やセキュリティ対策などは省かれています。ある程度やると疑問点が湧いてくるはずです。
すると、次のレベルの本に手を出すわけですが、以前読んだときは理解出来なかったことが、入門書を一通りやったおかげで理解出来たりするわけです。
なので、これ1冊だけやればOK!と言うわけにはやはり行かず、大事なのは順番なのかなと思っています。

では、一番最初に手をつける本はどれか?
ズバリこの二冊ですです。

この本は有名な初心者本ですが、確かに分かりやすいです。最初にやるならこの二冊を順番にやり通すのがいいでしょう。
実際にサービスを作っていくので、ガイドに従っていくように勉強できます。
ただし、もちろん初学者向けなので不足な部分はあります。もちろんわざと省いているのだと思います。
また、注意しなければいけないのはただの「写経」になりがちです。解説が薄いので理解しながら進めたつもりでも記憶に残る学習にはなりにくいかもしれません。

その次進んだのはこの本です。

この本は逆引きの代わりにして今でもぱらぱら見ています。
PHPも7で最新ですし、MySQLについても学習できます。この本を見ながら先ほどの二冊の課題に取り組むと言う方法もありかもしれません。

その次(と言うか今やってます)はこれです。

より詳しく載っています。その文難しくなっていますがしっかり理解して知識が定着すると思います。
このブログに書いている記事も、この本で学習した内容が多いです。

最後におまけです。


この2冊はWebど素人のボクにはとても勉強になりました。HTML,HTTP,URIって何?APIって自分で作るの?みたいな人は一度読んでおくと PHPの勉強が捗るかなと思います。時間がある時にでもぜひ読んで見てください。

continueとbreak 処理を飛ばす、中断する方法

まずはcontinue文です。
これは繰り返し処理で配列の値を取るときに、値のないところを飛ばしたい。なんて時に使えます。
例えばこんな感じ

<?php
//continue文
print "continue文";
print "<br>";
$staff_data = ["name"=>"東京ロケ太郎",
          "tel"=>"090-0000-0000",
          "age"=>38,
          "tall"=>183];
foreach($staff_data as $key =>$value)
{
  if($key =="name")
  {
    $title="名前";
  }
  elseif($key =="age")
  {
    $title="年齢";
  }
  elseif($key =="tall")
  {
    $title="身長";
  }
  else
  {
    print "処理を飛ばします。<br>";
      continue;
  }
  print "$title:$value";
  print "<br>";
}
?>

表示はこんな感じです。
f:id:TRocket:20170410114451p:plain

次はbreak文です。
ループを中断することができます。
試しに5人のスタッフのうち、3人まで表示してみます。

<?php
//break文
print "<br>";
print "break文";
print "<br>";
$staff[0] = "ロケ太郎";
$staff[1] = "ヒロタケ";
$staff[2] = "イシン";
$staff[3] = "ツキノワグマ";
$staff[4] = "ゾウ";
$i=1;
$limit=3;
foreach($staff as $key => $value)
{
  if($i > $limit)
  {
    print "ここまでで3人です。";
    break;
  }
  print "名前:$value";
  print "<br>";
  $i++;
}
?>

表示はこんな感じです。
f:id:TRocket:20170410114847p:plain

ちょっと便利なdir三兄弟

opendir()とreaddir()とclosedirのdir三兄弟。
ディレクトリの中のファイル名を全て取得するのに使えますが、ちょっと便利そうです。

<?php
//opendir()でディレクトリを開き、変数$dirに収納します。'.'が今のファイルがいるディレクトリを表しています。
if($dir = opendir('.')){
  //whileでループさせて中身を全て吐き出させます。
  while(false !==($filename = readdir($dir))) //readdir()で中のファイル名を取得します。
  {
    print $filename . "<br>";
  }
  closedir($dir); //閉じます。
}
?>

if elseif else文 と switch文

if文で elseifを足していけばいくらでも条件分岐を増やしていくことができます。
例えばこんな感じ

<?php
$name = "suzuki";

if($name == "suzuki")
{
  print "鈴木です。";
}
elseif($name == "ichen")
{
  print "イシンです。";
}
else
{
  print "陽一です。";
}
?>

でも、このように条件分岐が多数ある場合は、switch文を使った方が見やすくてcoolです。
こんな感じ

<?php
$name = "suzuki";

switch($name)
{
  case "suzuki":
      print "鈴木です。";
      break;
  case "ichen":
      print "イシンです。";
      break;
  default:
      print "陽一です。";
      break;
}
?>

でも、switch文には2つの注意事項があります。
①caseのあとは「:」コロンです。「;」ついセミコロンを打ってしまいそうになるので注意です。
②各vaseごとにbreakを忘れずに!

if文と三項演算子

三項演算子は?と:を使ってif文と同じ構文が書けます。
1行でかけるのでスッキリしてとてもcoolです。

<?php

//if文の場合
$username = "wagatsuma";
$password = "tr";
  
$db_data["username"] = "wagatsuma";
$db_data["password"] = "tr";

if($db_data["username"] == $username && $db_data["password"] == $password)
{
  print "会員ページです。";
}
else
{
  print "ログインに失敗しました。";
}

//三項演算子で書き直し
$username = "wagatsuma";
$password = "tr";
  
$db_data["username"] = "wagatsuma";
$db_data["password"] = "tr";

$login = ($db_data["username"] == $username && $db_data["password"] == $password)?"会員ページです。":"ログインに失敗しました。";
  
print $login;
?>

配列関係のまとめ

配列関係のまとめです。
書き方が色々あるけど、PHP5.4以降とかでOKみたいなのでこれでいいと思います。
array関数は使わず、[ ]で。

<?php

//配列の作り方(1個だけ作る)
$week[] = "";
$data[] = 1;

//データが多い時
$data = ["データ1","データ2","データ3"];

//配列の出力
print $week[0];
print $data[1];


//連想配列の作り方(1個だけ作る)
$member["name"] = "東京ロケ太郎";

//データが多い時
$data2 = ["キー1"=>"値1","キー2"=>"値2","キー3"=>"値3"];

//配列の出力
print $member["name"];
print $data2["キー3"];


//多次元配列 配列の中に連想配列を入れていく。名簿などで利用。
$member2[] = ["name"=>"東京ロケ太郎","age"=>38,"tall"=>183];
$member2[] = ["name"=>"東京ロケットマン","age"=>34,"tall"=>170];

//多次元配列の出力
print $member2[0]["name"];
print $member2[1]["name"];

?>

配列とforeach文③

foreachも2種類に分けて覚えると分かりやすいと思います。
①配列から値だけを取り出す。(インデックス配列で使います。)
②配列からキーと値を取り出す。(連想配列で使います。)

①配列から値だけを取り出す方法
書き方は

foreach(配列名 as 値が入る変数)

なので

<?php
//前々回の配列を使います。
$name =array('A','B','C','D');

foreach($name as $value){
  print $value;
  print "<br>";
}
?>

表示
A
B
C
D

次に②配列からキーと値を取り出す方法です。
書き方は

foreach(配列名 as キーが入る変数 => 値が入る変数)

なので

<?php
//前回の配列を使います。
$name['A'] = 'apple';
$name['B'] = 'banana';
$name['C'] = 'chocolate';

foreach($name as $key => $value){
  print $key,':',$value;
  print "<br>";
}
?>

表示
A:apple
B:banana
C:chocolate