書籍「レベルアップPHP」のまとめ。
点数
82点
感想
わかりやすくまとめられていて読みやすかった。
以下のものが勉強になった。
- +演算子とarray_mergeの違い
- in_arrayは第3引数をtrueにするべき
- selfとstaticの違い
- Null合体演算子??
- エルビス演算子?:
配列
配列の結合方法による違い
+演算子は左側優先、array_mergeは末尾に追加。 [1, 2] + [3, 4]
は [1, 2]array_merge([1, 2] , [3, 4])
は [1, 2, 3, 4]
よって、配列の結合にはarray_mergeを使うべき。
連想配列のキーが重複した場合、+演算子は左側優先、array_mergeは右側優先となる。['a' => 'A', 'b' => 'B'] + ['a' => 'AA']
は [‘a’ => ‘A’, ‘b’ => ‘B’]array_merge(['a' => 'A', 'b' => 'B'], ['a' => 'AA'])
は [‘a’ => ‘AA’, ‘b’ => ‘B’]
array_mergeは、キーが数字の要素の添字が振りなおされるので注意。array_merge(['5' => 'a', '3z' => 'b'], ['2' => 'c'])
は [0 => ‘a’, ‘3z’ => ‘b’, ‘1’ => ‘c’]
配列の短縮構文を使った複数の変数への代入(PHP7.1)
list($a, $b) = [1, 2];
は[$a, $b] = [1, 2];
と書けるようになった。
…による可変長引数と配列展開(PHP5.6)
...$xxx
で可変長引数を配列として受け取れるようになった。
function hoge(...$nums) {
var_dump($nums);
}
hoge(1);
hoge(1, 2);
…は配列を展開することができる。pow(...[2, 3]);
in_arrayは第3引数をtrueにするべき
in_array()はデフォルトでは緩やかな比較が行われる。
第3引数をtrueにすると、厳密が比較が行われる。in_array(0, ['0A', '1B', '2C']);
// truein_array(0, ['0A', '1B', '2C'], true);
// false
array_searchも同じである。
クラス
クラス定数(const)のアクセス権(PHP7.1)
class Hoge
{
public const RATE = 1.5;
private const BASE_DATE = '2020-01-01';
}
selfとstaticの違い
- self
メソッドを定義したクラスに固定される=定義時のクラス - static
継承したサブクラスから呼び出されると、サブクラスが優先される=実行時のクラス
selfは固定される、staticは固定されない、とイメージするとわかりやすい。
class Hoge
{
public function echoSomething()
{
echo "Hogeクラスです\n";
}
public function doSelf()
{
self::echoSomething();
}
public function doStatic()
{
static::echoSomething();
}
}
class Hoge2 extends Hoge
{
public function echoSomething()
{
echo "Hoge2クラスです\n";
}
}
$hoge2 = new Hoge2();
$hoge2->doSelf(); // Hogeクラスです
$hoge2->doStatic(); // Hoge2クラスです
関数・ライブラリ
Guzzle
HTTPクライアントのデファクトスタンダード。
非同期アクセスも可能。
composer require guzzlehttp/guzzleでインストール。
require_once __DIR__ . '/vendor/autoload.php';
use GuzzleHttp\Client;
$client = new Client();
$response = $client->request('GET', 'https://xxx.xx');
echo substr($response->getBody()->getContents(), 0, 16) . "\n";
ftp_ssl_connect関数
ftp_connect()はFTPプロトコルだが、ftp_ssl_connect()を使いうとFTPSプロトコルで接続する。
$con = ftp_ssl_connect('xxx.xxx');
$loginResult = ftp_login($con, 'xxxx', 'yyyy');
ftp_pasv($con, true);
$list = ftp_nlist($con, '.');
SplFileObject
オブジェクト指向でファイル読み書きができる。
closeする必要がないというメリットがある。
unsetでインスタンス変数を削除するとcloseされるが、関数を抜けるタイミングで自動的にcloseされる。
SplTempFileObjectという一時ファイル生成用のクラスもある。
$spl = new SplFileObject('hoge.txt', 'w');
$spl->fwrite("a\nb\nc\n");
$spl = new SplFileObject('hoge.txt', 'r');
foreach ($spl as $line) {
echo $line;
}
SplFileObjectを使ったCSVの読み込み
SplFileObjectは$spl->setFlags(SplFileObject::READ_CSV);
でCSVを配列として読み込むことができる。
空行スキップなど他のオプションもあるが、自分で処理した方が無難。
$spl = new SplFileObject('hoge.csv', 'r');
$spl->setFlags(SplFileObject::READ_CSV);
foreach ($spl as $line) {
var_dump($line);
}
Composer
PEARとPECLは使われなくなり、Composerがデファクトスタンダードになった。
Composerの導入
composer.pharが本体である。
curl -sS https://getcomposer.org/installer | php
または
https://getcomposer.org/composer.pharをダウンロード
※ macの場合はHomebrewでもインストール可能
php composer.phar self-updateでComposer自身のアップデート
パッケージのインストール
php composer.phar initでcomposer.jsonを生成し、requireにパッケージを指定。
php composer.phar installでインストール。
php composer.phar require パッケージ名
(php composer.phar require --dev パッケージ名) とするとパッケージをインストールして、composer.jsonファイルを更新してくれる。
composer.jsonのrequireとrequire-dev
php composer.phar instal- --no-devとするとrequire-devはインストールされない。