Hey. I’ve just started writing my simplest classes for a new content management micro-system in php, and I’d like to share some moments with you. These classes will probably be good for php noobs out there struggling in the world of object-oriented programming – go for the basics. The Logger class is just a text logger with simple functionality good for logics debugging. The Timer class will be great for performance debugging. Anyways, here we go:
class Logger
{
public $filename;
public $mode;
public $timestamp;
public $linebreak;
public $contents;
function __construct($filename = "log.log", $timestamp = "d.m.Y h:i:s", $linebreak = "rn", $mode = "a+")
{
$this->filename = $filename;
$this->mode = $mode;
$this->timestamp = date($timestamp);
$this->linebreak = $linebreak;
$this->contents = "";
}
function __destruct() { }
function write($line)
{
$this->contents .= "{$this->timestamp} {$line} {$this->linebreak}";
}
function flush()
{
$handle = fopen($this->filename, $this->mode);
fwrite($handle, $this->contents);
fclose($handle);
$this->contents = "";
}
}
class Timer
{
public $name;
public $start;
public $stop;
public $format;
const FORMAT_S = 0;
const FORMAT_MS = 1;
function __construct($name = "Timer", $autostart = false, $format = self::FORMAT_S)
{
$this->name = $name;
$this->format = $format;
if ($autostart) $this->start();
}
function __destruct() { }
function start()
{
$this->start = microtime(true);
}
function stop()
{
$this->stop = microtime(true);
$interval = $this->stop - $this->start;
if ($this->format == self::FORMAT_MS) { $interval *= 1000; }
return $interval;
}
}
And this is how you use it:
$log = new Logger();
$log->write("some message");
$log->flush();
$timer = new Timer("Timer1", false, $this::FORMAT_MS);
$timer->start();
sleep(1);
echo "execution time: " . $timer->stop() . " ms";
I doubt that I need to explain this, but anyways, you’re always welcome to question in the comments. By the way, it seems that there’s a bug in php 5 that prevents us from using fwrite in class destructors, so I couldn’t flush on destruct.