futoase

よろしくお願いします。

俺 AdventCalendar 15日目

php 5.4を試す

ここにhome brew で入れられるようFormulaを用意した。

  • home brew にてインストールしたい場合は以下の手順で。
    • git clone を実行
git clone https://gist.github.com/1492717
cp 1492717/php5_4.rc /usr/local/Library/Formula
brew install php5_4
  • 追加されるコマンドは以下。
php54rc4 php-cgi54rc4 php-config54rc4 phpize54rc4
  • phpのソースファイルを実行したい場合は以下の通り。
php54rc4 -f test.php

PHP 5.4 のテスト

  • traitを利用する
  • ビルトインサーバでの動作を前提とした形にする

ソースコード

<?php

class RoutingException extends Exception {}

trait Routing
{
  static $table = 
    [
    '/' => 'show_user_information',
    '/index.php' => 'show_user_information',
    '/hello_world' => 'hello_world'
    ];

  public function routing()
  {
    $path = $_SERVER["REQUEST_URI"];
    $keys = array_keys(Routing::$table);
    if (in_array($path, $keys)){
      return Routing::$table[$path];
    }
    else{
      throw new RoutingException("routing notfound");
    }
  }
}

trait Web
{
  public function set_header()
  {
    header('Content-Type: text/html; charset=UTF-8');
  }

  public static function set_contents($contents)
  {
    echo "<!DOCTYPE html>";
    echo "<html>";
    echo '<head><meta charset="UTF-8"><title>Test</title></head>';
    echo "<body>";
    echo $contents;
    echo "</body></html>";
  }

  public function show_user_information()
  {
    $s = array_keys($_SERVER);
    $args = [];

    foreach($s as $v){
      array_push($args, 
                 '<tr><td>' . $v . '</td>' .
                 '<td>' . $_SERVER[$v] . '</td></tr>');
    }

    $contents = (
      "<h1>user information</h1>" . 
      "<table>" .
      implode($args, '') .
      "</table>");

    Web::set_contents($contents);
  } 

  public function hello_world()
  {
    Web::set_contents("<h1>Hello World</h1>");
  }
}

class App
{
  use Routing, Web;

  static $obj;

  private function __construct() {}

  public static function start()
  {
    $obj = new App();

    try {
      $obj->set_header();
      $method = $obj->routing();
      $obj->$method();
    }catch(RoutingException $error){
      echo "ERROR!\n\n". $error . "\n";
    }
  }
}

// starting application.
App::start();

実行方法

  1. 以上のソースコードを index.php として保存する
  2. 以下のコマンドを、index.php の存在するディレクトリをカレントディレクトリとしている状態で実行する
php54rc4 -S localhost:8080

f:id:syanbi:20120102213444p:plain

f:id:syanbi:20120102213255p:plain

f:id:syanbi:20120102213349p:plain

PHP 5.4は

Copyright (c) 2013-2017 Keiji Matsuzaki