読者です 読者をやめる 読者になる 読者になる

超便利かもしれない設定保存用のクラス

これって超便利じゃね?と思ったので紹介。
すでにだれかが思いついてるだろうけど見たことないので。

ソース

<?php 
// EConfig.php

class EConfig
{
  private function __construct()
  {
    $state = @unserialize( substr( file_get_contents( __FILE__), __COMPILER_HALT_OFFSET__));
    if( $state !== false) foreach( $state as $key => $value) $this->{$key} = $value;
  }
  public static function getInstance()
  {
    static $instance = null;
    if( $instance === null) $instance = new self();
    
    return $instance;
  }
  public function __clone()
  {
    return $this->getInstance();
  }
  public function __destruct()
  {
    $fp = fopen( __FILE__, 'r+');
    flock( $fp, LOCK_EX);
    fseek( $fp, __COMPILER_HALT_OFFSET__);
    fwrite( $fp, serialize( get_object_vars( $this)));
    if( !feof( $fp)) ftruncate( $fp, ftell( $fp));
    fclose( $fp);
  }
}

__halt_compiler();

使い方

簡単。

<?php
include 'EConfig.php';

$config = EConfig::getInstance();

$config->basedir = 'hoge';
$config->path = 'path/to/fuga';

これで設定が保存されます。

<?php
include 'EConfig.php';

var_dump( EConfig::getInstance());

これを実行すると、

object(EConfig)#11 (2) {
  ["basedir"]=>
  string(4) "hoge"
  ["path"]=>
  string(12) "path/to/fuga"
}

きちんと設定が保存されていることがわかります。