demolog

備忘録. 雑なあまりにも雑な

PHP 7.2のWarn when counting non-countable typesを試した

PHP 7.2でcount関数にCountableタイプ以外を指定するとWarningが出るようになったということで試してみた。

<?php

echo count([1]); // 1
echo count([1, 2, 3]); // 3
echo count([1, null]); // 2
echo count(["one" => 1, "two" => 2]); // 2

echo count(null); // Warning
echo count(new StdClass); // Warning
echo count(1); // Warning
echo count("1"); // Warning

class FullName implements Countable
{
    private $firstName;
    private $middleName;
    private $lastName;

    public function __construct(?string $firstName, ?string $middleName, ?string $lastName)
    {
        $this->firstName = $firstName;
        $this->middleName = $middleName;
        $this->lastName = $lastName;
    }

    public function count() : int
    {
        $count = 0;
        foreach (get_object_vars($this) as $val) {
            if ($val) {
                $count++;
            }
        }
        return $count;
    }
}

// 3
echo count(new FullName("hogeta", "hogehoge", "hogeo"));

Countableのinterfaceを実装し、count関数にインスタンスを指定するとそのクラスのcountメソッドがコールされる仕組み。

Countable自体使うのはお初だったのでその動きを知れたのはよかった。

HerokuでPHPのバージョンを指定する

Symfony Flexを試したい、ただHerokuのPHPバージョンは5.6.34かー、うーんと呟いたところ@hiro_yさんから素敵なアドバイスをいただいたので試してみた。

方法

composer.jsonrequirePHPのバージョンを指定する。これだけ。

{
  "require": {
    "php": "^7.1.0"
  }
}

HerokuがサポートしているPHPのバージョンはコチラ https://devcenter.heroku.com/articles/php-support#supported-versions

PHP 7.2が、もうじきリリースされるのでHeroku対応が楽しみ。

あとは、composer updateでcomposer.lockファイルを作ってHerokuにデプロイすれば反映される。

デプロイ中... f:id:skit_n:20171130003957p:plain

デプロイ後のphpinfo();

f:id:skit_n:20171130004008p:plain

めでたしめでたし

参考