PHP基礎

##最初に
今までphpを触ったことがなかったので基礎部分を学習しました。


-----

##基礎の基礎

phpはHTMLに埋め込んで使用可能。<?php  ?>で囲まれた部分がHTMLに変換され表示される。

```php
//文末に;(セミコロン必要)
<?php
echo 'a';
?>

//一行の時は;(セミコロン不要)
<?php echo 'a' ?>

//変数は最初に$をつける
$sample = 'hoge';
```

''（シングルクオート）は文字列をそのまま出力する。
""(ダブルクォート)は変数を展開する。

:::note info
html表示の改行文字はbrタグ
ソース表示の改行文字は改行コード\n
:::

####出力

```php
<?php
/*
/''（シングルクオート）は文字列をそのまま出力する。
/""(ダブルクォート)は変数を展開する。
*/
echo 'a';　  //結果 a
echo 'a', 'b', 'c'; 　//結果 abc
echo 'a'.'b';  //結果 ab

$test = 'c';
echo 'ab$test';  //結果 ab$test
echo "ab$test";  //結果 abc
echo 'ab{$test}';  //結果 ab{$test}
echo "ab{$test}";  //結果 abc

echo 'a'.'b'.$test;  //結果 abc
?>
```

:::note info
html表示の改行文字はbrタグ
ソース表示の改行文字は改行コード\n
:::

:::note info
printも文字列を出力できるが、echoとの違いは
・文字列が一つしか指定できない。
・戻り値に1を返す(echoは戻り値を持たない)

:::

####計算

```php
<?php
echo 7 + 3; //結果 10
echo 7 - 3; //結果 4
echo 7 * 3; //結果 21
echo 7 / 3; //結果 2.33333
echo 7 % 3; //結果 1

//省略
$num = 7;
$num += 3  // $num = $num + 3 と同じ
$num -= 3  // $num = $num - 3 と同じ
$num *= 3  // $num = $num * 3 と同じ
$num /= 3  // $num = $num / 3 と同じ
$num %= 3  // $num = $num % 3 と同じ

//インクリメント・ディクリメント

$num = 7;
echo $num++; // 結果 7 → 出力の後に+1される
$num = 7;
echo ++$num; // 結果 8 → 出力の前に+1される
$num = 7;
echo $num--; // 結果 7 → 出力の後に-1される
$num = 7;
echo --$num; // 結果 6 → 出力の前に-1される

?>
```

####条件分岐

```php
<?php

$x = 5;

if ($x >= 10) {
    echo '10以上';
} elseif ($x >= 5) {
    echo '5以上';
} else {
    echo '5より下';
}

//　 結果 5以上

?>
```
:::note warn
他の言語だとelif(python),elsif(ruby),else if(java)など注意
:::

:::note info
条件式には、<,<=,>,>=,==,!=,===,!==などを使用
複数の条件式は&&(かつ)、||(または)を使用
===は値とデータ型まで含めて完全一致かどうかを判定する
:::

####繰り返し処理（while~文）

```php
<?php
for ($i = 0; $i < 10; $i++) {
  if ($i == 5) {
    //処理をスキップ
    continue;
  }
  if ($i == 8) {
　　　　　　　//処理を中断してループを抜ける
    break;
  }
  echo $i."<br>";
}
/*
/結果
/0
/1
/2
/3
/4
/6
/7
/*
?>
```

:::note info
配列にはforeach構文が使える
foreach ($nums as $num) {
処理
}
:::

####配列

```php
<?php
//インデックス配列
$index_array = array("a", "b", "c", "d"); //　配列 [0 => "a", 1 => "b", 2 => "c", 3 => "d"]
//出力
echo $index_array[0]; //結果　a
//連想配列
$associative_array = array(0 => "a", 1 => "b", 2 => "c", 3 => "d"); //　配列 [0 => "a", 1 => "b", 2 => "c", 3 => "d"]
//出力
echo $associative_array[0]; //結果　b

//追加
$index_array[] = "e"; //配列 [0 => "a", 1 => "b", 2 => "c", 3 => "d", 4 => "e"]
$index_array[3] = "aaa"; //配列 [0 => "a", 1 => "b", 2 => "c", 3 => "aaa", 4 => "e"]

```

####オブジェクト指向



```php:hoge.php(継承元)
<?php
class Hoge {
  //継承先のクラスから使いたい場合はprotected
  protected $name;
  //クラス内で完結する場合はprivate
  private $hogeCount = 0;
  //クラスプロパティにはstaticをつける
  protected static $count = 0;
  
  //コンストラクタ
  public function __construct($name) {
    //thisはインスタンス自身を指す
    $this->name = $name;
　　　　　　　//selfはクラス自身を指す
    self::$count++;
  }
  //カプセル化(ゲッター)
  public function getName() {
    return $this->name;
  }
  
  //カプセル化(セッター)
  public function setName($name) {
    $this->name = $name;
  }
  //カプセル化(ゲッター)
  public function getOrderCount() {
    return $this->hogeCount;
  }
  //カプセル化(セッター)
  public function setHogeCount($orderCount) {
    $this->orderCount = $orderCount;
  }
  //クラスメソッドにはstaticをつける
  public static function getCount() {
    return self::$count;
  }
}
?>
```

```php:huga.php(継承先)
<?php
//phpファイルの読み込み
require_once('hoge.php');

//継承
class Huga extends Hoge {
  private $type;
  
  public function __construct($name, $type) {
    //親クラスのコンストラクタを呼び出している
    parent::__construct($name);
    $this->type = $type;
    self::$count++;
  }
  
  public function getType() {
    return $this->type;
  }
  
  public function setType($type) {
    $this->type = $type;
  }
  }
?>
```


####参考
https://www.sejuku.net/blog/23247