PHP(基礎文法)に関する自分用メモ

**XMLの読み込み**
```php
$xmlTree = simplexml_load_file('rss.xml');
echo $xmlTree->channel->link;
```
<channel>
　　　<link>
↑のように、タグ形式でchannelがプロパティ、linkが値みたいなかんじでアクセスできる。

**ファイルの読み込み・追記**
```php
$news = file_get_contents('data/news.txt');
echo $news;  //画面にテキストの内容が表示される。

$news = $news . "<br>追加のニュースです";
$success = file_put_contents('data/news.txt', $news);  //これでnews.txtの中に追記ができる。

readfile('data/news.txt');  //いちいち↑のように変数に代入しなくても表示される。
```
ー－－－－－－－－－－－－－－－－－－－－－－－－
デフォルト値の引数は、呼び出しの時の引数で上書きされる！
```php
function makecoffee($type = "cappuccino")
{
    return "Making a cup of $type.\n";
}
echo makecoffee();
echo makecoffee(null);
echo makecoffee("espresso");
```
【出力】
Making a cup of cappuccino.
Making a cup of .
Making a cup of espresso.


**ファイルの書き込み**
```php
$success = file_put_contents('data/news.txt', 'こんにちは');  //newsというファイルが作成される。

if ($succes !== false) {
  echo '成功しました。';
} else {
  echo '失敗しました。';
}
```

1. 現在の時刻を表示

```php
date_default_timezone_set('Asia/Tokyo');
echo date('G時 i分 s秒');

$today = new DateTime();
$today->setTimezone(new DateTimeZone('Asia/Tokyo'));
echo '現在は ' . $today->format('G時 i分 s秒') . ' です。';
```
https://www.php.net/manual/ja/datetime.format.php

2. リファレンスで=nullが書いてあれば、それは省略できるということ。あと引数のところで?と書いてあったら、それも省略できるということ。
3. PHPだけのファイルであれば、終了タグはつけないこと。
4. 文字列連結には" . "ドットをつける。
5. リファレンスで"..."とあったときは、何個でもいいですよ、という意味。

6. **while文**
endwhileには「戻る」という特性がある。
```php
$i = 1;
while ($i < 101):
	echo $i . '個<br>';
	$i = $i + 1;
endwhile
```
「{」を「:」、「}」を「endforeach（while の場合だったら endwhile ）」で代替することも可能。→コロン構文
```php
$i = 2;
while ($i <= 100) {
	echo $i;
	$i++;
	}
```
7. **for文**
```php
for ($i = 1; $i <= 100; $i = $i + 1):
		echo $i . '<br>';
endfor;

for ($i = 1; $i <= 100; $i = $i++){ {
		echo $i . '<br>';
}
```
8. ダブルクォーテーションで文字列を囲んだ場合、中の変数を{}で囲むと変数に置き換わる。シングルクォーテーションの場合はされない。
<img width="400px" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/235741/78aff69c-944f-82e7-b178-a51ef5cefa23.png">

<img width="400px" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/235741/3209b11c-3a85-d419-b70e-1cec1b1db9a1.png">


9. foreach文
```php
$sales = [
  "cola" => 200,
  "milk" => 300,
  "soda" => 150,
  ];

  foreach ($sales as $key => $value) {  //『$key =>』の部分が省略できる。
    echo "($key) $value";
  }

  $colors = ["red", "blue", "yellow"];

  foreach ($colors as $value) {
    echo "$value";
  }
```
10. if文
![5a9dbc694837-20230124.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/235741/da5815d6-d467-53f1-f33d-69a10c46d29c.png)


**真偽値がfalseになる場合**
文字列：　空、"0"
数値： 0、　0.0
論理値：　false
配列：　要素の数が0、null

// if ($i) {    もし$iが空文字じゃなかったら
if ($i == true) {
echo "hello";
}

**三項演算子**
![三項演算子.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/235741/3acabcf0-1eb6-c656-ab6f-891828754e08.png)


11. **sprintf**
sprintf(フォーマットを定義する文字列, 入力したい文字１,　入力したい文字２,　・・・)
```php
$format = "%sだと%sが%sます。";
$aaaa = '毎日(日)曜日';
$bbbb  = '僕';
$cccc = '喜び';
$message = sprintf($format, $aaaa, $bbbb, $cccc);
echo $message;
```
【出力結果】
毎日(日)曜日だと僕が喜びます。

％で始まるのが変換指定子というらしい。
%の次に1、2という数字を指定すると順番を指定することができる。

```php
$format = "%1\$sが%2\$sで%4\$sが%3\$sです。";
$aaa  = '君';
$bbb = '私';
$ccc = '俺';
$ddd = 'あなた';

$message = sprintf($format, $aaa, $bbb, $ccc, $ddd);
```
【出力結果】
君が私であなたが俺です。

%d	10進数
%u	符号無し10進数
%o	符号無し8進数
%x	符号無し16進数
%X	符号無し16進数（大文字表記）
%e	指数形式の浮動小数点
%E	%eと同じ（大文字表記）
%f	固定小数点形式の浮動小数点
%g	%eまたは%fと同じ
%G	%eまたは%fと同じ（大文字表記）
%b	符号無し2進数
%c	指定した文字コードに対応した文字
%s	文字列
%p	値のポインタ
%n	文字数を指定した変数に格納
%%	%の文字そのもの（\と同様の使い方）

```php
$num = 5;
$location = 'tree';
$format = 'There are %d monkeys in the %s';
echo sprintf($format, $num, $location);
```
【出力結果】
"There are 5 monkeys in the tree" 

%0(桁数)d と指定すると、左側に0を埋めてくれる。
```php
$format = “あなたの学籍番号は、 %05d です。 \n";
print(sprintf($format, 1));
print(sprintf($format, 1234));
```
【出力結果】
あなたの学籍番号は、　00001 です。
あなたの学籍番号は、　01234 です。