忘れがちなPHP

# ■ PHPタグ
~~~php
<?php
echo "スクリプト記述";
?>     
~~~

# ■ 文字列操作

## 出力 : echo/print
~~~php
echo "Message";
echo "Message1<br>", "Message2";
print "Message";
~~~

## 連結
~~~php
echo "Message1"."Message2";
~~~

# ■ 変数
## 型
|型|名称|
|:---:|:---:|
|integer|整数型|
|float/double|浮動小数点型|
|boolean|論理型|
|string|文字列型|
|array|配列型|
|object|オブジェクト型|
|callback|コールバック型|
|NULL|NULL型|


## キャスト
|書式|キャスト後の型|
|:---:|:---:|
|(int)|整数型|
|(float)|浮動小数点型|
|(double)|浮動小数点型|
|(bool)|論理型|
|(string)|文字列型|
|(array)|配列型|
|(object)|オブジェクト型|

## 型の判定
|書式|判定の型|
|:---:|:---:|
|is_int|整数型|
|is_float|浮動小数点型|
|is_double|浮動小数点型|
|is_bool|論理型|
|is_string|文字列型|
|is_array|配列型|
|is_object|オブジェクト型|

## スーパーグローバル変数
|名称|内容|
|:---:|:---:|
|$_REQUEST|リクエストパラメータ取得|
|$_SESSION|セッション情報取得|
|$_COOKIE|クッキー取得|


# ■ 定数
## 定義済み定数
<table>
<tr><th>定数名</th><th>意味</th></tr>
<tr><td>__LINE__</td><td>行番号</td></tr>
<tr><td>__FILE__</td><td>ファイル名</td></tr>
<tr><td>__FUNCTION__</td><td>関数名</td></tr>
<tr><td>__DIR__</td><td>ディレクトリ名</td></tr>
<tr><td>__CLASS__</td><td>クラス名</td></tr>
<tr><td>__METHOD__</td><td>クラスのメソッド名</td></tr>
</table>

## オブジェクト定数
~~~php
const VAL = 1;
echo VAL;
~~~

## define
~~~php
define ("VAL1", 1000);
define ("VAL2", 100 * 100);
echo VAL1."<br>";  // 1000
echo VAL2;         // 10000
~~~


# ■ 配列
~~~php
$array_test = array("A", "B", "C");
echo $array_test[0];
~~~

# ■ 連想配列
~~~php
$array_test = array("A"=>"a", "B"=>"b", "C"=>"c");
echo $array_test["A"];
~~~

# ■ 演算子

## 算術演算子
|演算子|意味|
|:---:|:---:|
|+|加算|
|-|減算|
|*|乗算|
|/|除算|
|%|剰余|
|**|累乗|

## 複合演算子
|演算子|意味|
|:---:|:---:|
|+=|加算して代入|
|-=|除算して代入|
|*=|乗算して代入|
|/=|除算して代入|
|**=|累乗して代入|

## 比較演算子
|演算子|意味|
|:---:|:---:|
|A == B|AとBは等しい|
|A != B|AとBは等しくない|
|A > 0|Aは0より大きい|
|A < 0|Aは0より小さい|
|A <= 0|Aは0以下|
|A >= 0|Aは0以上|

## 論理演算子
<table>
<tr><th>演算子</th><th>意味</th></tr>
<tr><td>&& (and)</td><td>論理積</td></tr>
<tr><td>|| (or)</td><td>論理和</td></tr>
<tr><td>! (not)</td><td>否定</td></tr>
<tr><td>xor</td><td>排他的論理和</td></tr>
</table>

## 三項演算子
~~~php
$cnt = 0;
echo ($cnt == 0) ? "値は0です": "値は0以外です";
~~~

## エラー制御演算子
~~~php
@print (100 / 0);
~~~

# ■ 繰り返し

## foreach
~~~php
$array_test = array("A"=>"a", "B"=>"b", "C"=>"c");
foreach($array_test as $val){
  echo $val."<br>";
}
~~~

## for
~~~php
$array_test = array("A", "B", "C");
for($cnt = 0; $cnt < 3; $cnt++){
  echo $array_test[$cnt]."<br>";
}
~~~

## while
~~~php
$cnt = 0;
while($cnt < 10){
  echo $cnt;
  $cnt++;
}
~~~

## do while
~~~php
$cnt = 0;
do{
  echo $cnt;
  $cnt++;
}while($cnt < 10);
~~~


# ■ 条件分岐
## if
~~~php
if ($answer == 0){
  echo "答えは0です";
}
else if ($answer == 1){
  echo "答えは1です";
}
else{
  echo "答えは0, 1以外です";
}
~~~

## switch
~~~php
switch($answer){
case 0:
  echo "答えは0です";
  break;
case 1:
  echo "答えは1です";
  break;
default:
  echo "答えは0, 1以外です";
}
~~~

# ■ 関数

## 関数定義
~~~php
function test($input0, $input1, &$val){
  echo $input0 . $input1."<br>";
  $val = 100;
  return "OK"."<br>";
}

$cnt = 0;
echo test("test", "実行", $cnt);
echo $cnt; // 100
~~~

# ■ スクリプトファイル読み込み
## require
~~~php:読み込み失敗時に停止
require 'require/input1.php';
require_once 'require/input2.php'; # 重複読み込みなし
~~~

## include
~~~php:読み込み失敗時に続行
include 'include/input1.php';
include_once 'include/input2.php'; # 重複読み込みなし
~~~

# ■ ファイル操作
## ファイル読み込み
~~~php
$file = fopen("test.txt", "r");
while(!feof($file)){
  $line = fgets($file);
  echo $line."<br>";
}
fclose($file);
~~~

## ファイル書き込み
~~~php
$file = fopen("test.txt", "w");
fputs($file, "test");
fclose($file);
~~~

# ■ フォルダ操作
## フォルダ作成
~~~php
mkdir("test");
~~~

## フォルダ有無確認
~~~php
if (file_exists("test"))
{
  echo "フォルダは存在します";
}
else
{
  mkdir("test");
}
~~~

# ■ 日時表示
## タイムゾーン設定
~~~php
date_default_timezone_set('Japan');
~~~

## 日時表示
~~~php
echo date('Y/m/d'); # 2018/01/02
~~~

# ■ 入力データの受け取り
~~~php:input.php
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
</head>
<body>
<form action="output.php" method="post">
<input type="test" name="input">
<input type="submit" value="OK">
</form>
</body>
</html>
~~~

~~~php:output.php
<?php
  echo $_REQUEST['input'];
?>
~~~

# ■ ヒアドキュメント構文
~~~php
echo <<<EOD
Message1
Message2
EOD;
~~~

# ■ コメント
~~~php
// comment
/* comment */
#  comment
~~~