「レベルアップPHP」の感想・備忘録1

スポンサーリンク

書籍「レベルアップPHP」のまとめ。

点数

82点

感想

わかりやすくまとめられていて読みやすかった。
以下のものが勉強になった。

配列

配列の結合方法による違い

+演算子は左側優先、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']); // true
in_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はインストールされない。

コメント