肉とビールとパンケーキ by @sotarok

少し大人になった「肉とご飯と甘いもの」

PHP勉強会@東京 #58 で「入門PHP5.4」の話をしました

久しぶりのPHP勉強会でしたね!僕も通常のPHP勉強会での発表は久々だった気がします。
というわけで、入門PHP5.4という題で発表してきました。

発表資料&リンク集

Speaker Deck にあげました。

が、Speaker Deck だと、リンクがリンクにならないので、リンク集だけ補足でこちらにおいておきます!

Accessor の例

今日途中でコーディングしてたネタです。この Accessor Trait は、 id:Fivestar と僕が同時期にまったく同じ機能の Trait を作ってたりして、ワロタって話をしました。いや実際このあたりを作りたくなるものですね!

<?php

trait Accessor
{
    // そういやこれだと camelCase な property しか対応してないけど
    public function __call($name, $params)
    {
        if (strpos($name, 'get') === 0) {
            $attr = substr($name, 3);
            if (strlen($attr) > 0) {
                $attr = lcfirst($attr);
                if ($this->hasClassVar($attr)) {
                    return $this->$attr;
                }
                throw new \LogicException(sprintf('No such field "%s"', $attr));
            }
        }
        if (strpos($name, 'set') === 0) {
            if (count($params) !== 1) {
                throw new \InvalidArgumentException('error');
            }
            $attr = substr($name, 3);
            if (strlen($attr) > 0) {
                $attr = lcfirst($attr);
                $value = array_shift($params);
                if ($this->hasClassVar($attr)) {
                    $this->$attr = $value;
                    return $this;
                }
                throw new \LogicException(sprintf('No such field "%s"', $attr));
            }
        }

        throw new \LogicException(sprintf('Method not found "%s"', $name));
    }

    private function hasClassVar($attr)
    {
        static $vars = null;
        if ($vars === null) {
            $vars = get_class_vars(__CLASS__);
        }
        return array_key_exists($attr, $vars);
    }
}

で、これを use するだけで Accessor ができますねってはなし。

<?php

class User
{
    use Accessor;

    private $name;

    public function __construct($name)
    {
        $this->name = $name;
    }
}

$user = new User('aoi miyazaki');
var_dump($user->getName());         // => aoi miyazaki
$user->setName('aoi yu');
var_dump($user->getName());         // => aoi yu

まとめ

  • Voyage Group さんのセミナールーム広いし綺麗だし快適
  • Ajito いいなー

MyMR、Phake、懇親会も楽しかったです!最後に、会場を貸してくださった Voyage Group さん、幹事の gusagi さんありがとうございました。