PHPプログラミング入門

#はじめに
こんにちは。
なんか学校がコロナ休みで暇すぎるので今回はPHPについて書いてこうかなと
思います。
よかったらツイッターやってるのでフォローよろしくお願いします。
↓↓
[@DevTweak](https://twitter.com/DevTweak)
あと低いクオリティーではありますが、Tweakも作ってるのでよかったらリポジトリ登録お願いします
↓↓
[リポジトリ](https://sss136.github.io/)

#目次
1. PHPとは
2. 基本的な文法
    3. 画面に出力するコード
    4. いろんな演算子
    5. 条件分岐
    6. 繰り返し
    7. sessionとcookie
    8. その他いろんな関数とか
3. まとめ


##PHPとは
まあめちゃくちゃ簡単に言うと、動的なWebページを作るサーバーサイドのオブジェクト指向型のプログラミング言語です。
何ができるかって言うと、代表的なのが掲示板ですね。SQLと組み合わせてデータベースに書き込んだり読み込んだりしてそれをWebページに表示したりできます。あとはログインシステムとかですかね。そんなの作れます。
htmlに埋め込むことができるのが特徴です。だけどhtmlのようにメモ帳とブラウザだけでWebページの完成が見えるものではありません。MAMPとかレンタルサーバー、自宅サーバーなどの環境がなければ動作できません。
ちなみにMAMPってwin,mac持ってれば使えるのでまあ導入方法とかどうやってPHP動かすのかとかは自分でググってください。陳謝。
まあもっと詳しく知りたいって方はwiki見てください！
確かC言語とかに影響されている言語なので文法はわかりやすいかと。初心者向けですし。
簡単な掲示板、ログインフォームとかはインスタンスの作成とか関数、クラスなどやんなくても全然いけます。大掛かりなものとかになってくると必要ですが個人で作るぶんにはなくて大丈夫です。
##基本文法
###変数
変数って言うのはまあ値や、文字を入れる箱だと思ってください。
C言語とかObj-cなどでは整数値と文字で使う型が変わります。
また符号がつくかつかないかでも型が変わってきます
例えば
`int a = 1;`　整数値
`char b = "a";`　文字
`float c = 0.1;`　浮動小数点数
`unsigned int = 1` 符号なし整数値
ですが、PHPでは型はありません。楽ですね。

ではどのように変数を作るのかと言いますと、
`$number = 1;`
こんな感じです
文字の場合だと、
`$string = 'あいうえお';`
C言語だとchar型には一文字しか入らなかったので、
配列を作って
`char* string = "あいうえお";` とか`char string[] = "あいうえお"`と、やらなければなりませんでした。この話にはいろいろポインタやら配列とかが絡んできて複雑ですが...と難しい話は置いといて、、、

ちなみに文の最後に書いてある;は書かないといけません。ここで一つの式が終わった

###画面に出力するコード
```php:index.php
<?php 
echo 'こんにちは'; 
print('こんにちは');
?>
```

この二通りですね。
###いろんな演算子
意味:足す、ひく、かける、わる `+`,`-`,`*`,`/`
意味:値を代入する `=`
意味:等しい `==`or`===`
意味:より上 `>`
意味:未満 `<`
意味:以上 `>=`
意味:以下　`<=`
意味:等しくない　`!=`または`<>`

実は`=`は等しいと言う意味ではなくプログラミング言語では、
**代入する**と言う意味なんです。



**インクリメントとディクリメント**

インクリメント:`$i++`
ディクリメント:`$i--`

インクリメントのやってることは単純です。
それは
`$i = $i + 1;`と同じです。
変数iに入ってる元の数にプラス１してと言う意味です。
ディクリメントも同じで、
`$i = $i - 1;`と同じで、
変数iに入ってる元の数にマイナス1してと言う意味です。

これとにているものとして
`$i+=5`
こんな感じのがあります。
これは　`$i = $i + 5;`
これは変数iに入ってる元の値に5を足すと言う意味ですね。
簡単です。

###条件分岐###
これはC言語と文法がほとんど変わらないのでやったことある人からすれば簡単ですね。

```php:index.php
<?php 
$a = 1;
if($a == 1) {
    echo 'これは1です';
}else{
    echo 'これは1以外の数字です'
}
?>
```
ifはもし与えられた条件式が一致すれば、あとのコードが実行されるよと言う意味です。
elseはif(条件式)に当てはまらないものは、あとのコードが実行されるよと言う意味です。

もちろんですが出力結果は
これは1です、になります。

またこのような書き方もできます。

```php:index.php
<?php
$a = 1;
?>
<?php if($a == 1): ?>
    <?php echo 'これは1です'; ?>
<?php else: ?>
    <?php echo 'これは一以外の数字です'; ?>
<?php endif; ?>
```

phpタグに埋め込む書き方もできます。
正直こっちの書き方の方がいいです。
なぜなら、htmlタグに埋め込むのに楽だったり、cssでデザインがしやすくなります。
例えば

```php:index.php
<?php $a = 1; ?>
<?php if($a == 1): ?>
   <a href="https://twitter.com/DevTweak">これは1だよ</a>
<?php else: ?>
   <a href="https://twitter.com">これは1じゃないよ</a>
<?php endif; ?>
```
こんなのができます。一番最初に紹介した書き方でもできなくはないですがとてもめんどくさく、作業効率が落ちると思うのでやめた方がいいです。
ちなみにa hrefの意味は、リンクの生成ですね。まあ詳しくはググってください。

また条件式をさらに付け足すelseifと言うものがあります。

```php:index.php
<?php $a = 1; ?>
<?php if($a == 1): ?>
    <p>これは一です</p>
<?php elseif($a == 2 || $a == 3): ?>
    <p>これは2,または3です</p>
<?php else: ?>
    <p>それ以外の数字です</p>
<?php endif; ?>
```
ここで注意なのがC言語や他の言語ではよく
else if
としますが、これはアウトです。
elseif
と書くようにしましょう。
||
と言う文字は　または　の意味です
逆に且つは
&&
です
`($a == 1 && $a > 0)`
みたいな感じで使えばいいと思います
###繰り返し###
これもC言語の文法と一緒ですね。

```php:index.php
<?php 
for($i=1;$i<=100;$i++) {
    echo $i.'回目'.'\n';
}
?>
```

これは1から100まで繰り返すと言う意味です。
この場合出力結果が
1回目
2回目
3回目
4回目
5回目
6回目
7回目
8回目 .......

となります。
`.`
これは前の文と後ろの文をくっつけると言う意味があります。
`\n`は改行を意味します。
ちなみにwinだと¥になります。
macだとoptionとdeleteの左隣のキーを同時に押すと出力されます。

またwhileでもおんなじことができます。

```php:index.php
<?php
$i = 1;
while($i <= 100){
    echo $i.'回目'.'\n';
    $i++;
?>
```
こんな感じです。

###sessionとcookie###
####session####
sessionて言うのはまあ値をブラウザを開いている間ずっと記憶することのできる特殊な変数って覚えといてください。
イメージとしてはグローバル変数的な感じのやつです。
まあとりあえずコード見てきましょうか。

```php:index.php
<?php 
session_start();
$_SESSION['test'] = 'テスト';
?>
<?php echo $_SESSION['test']; ?>
```

出力結果は　テスト　と表示されます。
session_start();
この関数の名前からも分かるとおり簡単に言ったらsessionをスタートさせる関数です。
sessionを使うページでは最初にこれを書き込みます。
これでページを移動してもsession_start()を書けばそのページ上でも
`echo $_SESSION['test'];`
と打てば、テスト　と表示されるはずです。

このsessionがいらなくなったら
unset関数を使って内容を削除することができます。
`unset($_SESSION['test']);`
こんな感じです。
####cookie####
cookieは値をブラウザを閉じても指定された期間の間なら保存されるものです。
便利な反面セキュリティー的には危険な傾向にあります。
簡単な操作でクッキーの内容を見れてしまうため、できる限り重要な情報は保存しないようにしましょう。

使い方


```php:index.php
<?php setcookie('test','テスト',time() + 60 * 60 * 24 * 30); ?>
<?php echo $_COOKIE['test']; ?>
```
出力結果は　テスト　となります。
一番最初の引数に変数名、二番目に記憶する値、三番目にそれを記憶する期間を入れます。
`time()`と言う関数で現在の時刻のタイムスタンプを得ることができ、それに
`60 * 60 * 24` で一日、それを `*30`することで三十日になります。

###その他いろんな関数###
####フォームに入力した内容を取得する####

```html:index.html
<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title></title>
</head>
<body>
<form action="index.php" method="post">
    名前:
    <input type="text" name="name">
    <input type="submit" value="送信">
</form>
</body>
</html>
```
```php:index.php
<?php echo '名前は'; ?>
<?php print(htmlspecialchars($_POST['name'],ENT_QUOTES)); ?>
```



ある程度htmlの知識が必要なのでそこんとこよろしくお願いします。
記入した内容はaction属性で指定されたファイルに送信されます。
今回はform要素のmethod属性でpostを指定したので、
$_POSTと言うグローバル変数で受け取ります。
postの他にもgetと言う属性がありますが後ほど説明します。
input要素のname属性で指定された名前が

`$_POST['']`

このシングルクオーテーションで囲まれた中に入ります。
今回はnameと書いたので、
`$_POST['name']`となります。

methodにgetを指定すると,
`$_GET['']`　または　`$_REQUEST['']`で受け取れます。

大きな違いは、URLに送った内容が見れるかどうかです。
さっきの文のmethodをgetにすると、
URLには
https://xxxx.com?name=XXX
(?name=XXXが追加して書かれた)
と書かれていてXXXの値を自由に変更できてしまいます。
なので重要なデータを扱うときは必ずpostを使うようにしましょう。

`print(htmlspecialchars($_POST['name'],ENT_QUOTES))`
これがなんなのか気になっている人も多いかと思います。
これはセキュリティー対策の文です。悪意のあるユーザーなどがwebサイトを破壊したり、迷惑をかけたりするような行為を行う人がいます。
この文を追加することで次のことが防げます。
このhtmlspecialcharsと言う関数を外して、 →`print($_POST['name]);`
フォームにこのように入力してみましょう。
`<script>alert('あいうえお')</script>`
そして送信を押すと、アラートが表示されます。

これが複雑なコードとなればいろいろなことができてしまいます。
これを防ぐために必ずこの関数を入力してください。
この関数を使った状態で`<script>alert('あいうえお')</script>`を打ち込むと
出力結果は、<script>alert('あいうえお')</script>　となりタグの効果を打ち消すことができます。
ENT_QUOTESの意味も説明したいのですが説明すると長くなるのでこのまま覚えてください。

#まとめ#
結構濃い内容でしたがいかがでしょうか。C言語に比べれば簡単な方です。これがオブジェクト指向とか入ったり、関数、sql文の実行とかが入ってきたらとても難しくなります。
これをただ読んでるのではなく実践することで身に付くと思うので是非コード書いてみてください。
次回以降はその実践的な使い方について書きたいとおもているのでよかったらフォローしてください、いいねしてください。
以上です。