dbtable2class.php
7 june 2012
<?
mysql_connect('localhost', 'root', 'root') or die(mysql_error());
mysql_select_db('davidvandertuijn') or die(mysql_error());

define("SHORT_OPEN_TAG", TRUE);
define("ACCOLADE_NEW_LINE", TRUE);

function from_camel_case($str)
{
	$str[0] = strtolower($str[0]);
	$func = create_function('$c', 'return "_" . strtolower($c[1]);');
	return preg_replace_callback('/([A-Z])/', $func, $str);
}

function to_camel_case($str, $capitalise_first_char = false)
{
	if ($capitalise_first_char)
	{
		$str[0] = strtoupper($str[0]);
	}
	$func = create_function('$c', 'return strtoupper($c[1]);');
	return preg_replace_callback('/_([a-z])/', $func, $str);
}

if ($_POST)
{
	$filename = $_POST['table'].'.class.php';
	$output = NULL;
	$output .= (SHORT_OPEN_TAG == TRUE ? '<?' : '<?php');
	$output .= PHP_EOL;
	$class_name = ucfirst($_POST['table']);
	for ($i=0; $i<strlen($class_name); $i++)
	{
		if ($class_name[$i] == '_')
		{
			$class_name[$i+1] = ucfirst($class_name[$i+1]);
		}
	}
	$output .= 'class '.$class_name.' {'.PHP_EOL;
	$query = mysql_query('SHOW COLUMNS FROM '.mysql_real_escape_string($_POST['table'])) or die(mysql_error());
	$aColumns = array();
	while ($row = mysql_fetch_assoc($query))
	{
		$aColumns[] = $row;
	}
	$output .= PHP_EOL;
	foreach ($aColumns as $aColumn)
	{
		$output .= "\t".'private $_'.$aColumn['Field'].';'.PHP_EOL;
	}
	$output .= PHP_EOL;
	foreach ($aColumns as $aColumn)
	{
		$output .= "\t".'public function get'.to_camel_case($aColumn['Field'], TRUE).'()';
		if (ACCOLADE_NEW_LINE == TRUE)
		{
			$output .= PHP_EOL."\t";
		}
		$output .= '{'.PHP_EOL;
		$output .= "\t\t".'return $this->_'.$aColumn['Field'].';'.PHP_EOL;
		$output .= "\t".'}'.PHP_EOL;
		$output .= PHP_EOL;
		$output .= "\t".'public function set'.to_camel_case($aColumn['Field'], TRUE).'($'.$aColumn['Field'].')';
		if (ACCOLADE_NEW_LINE == TRUE)
		{
			$output .= PHP_EOL."\t";
		}
		$output .= '{'.PHP_EOL;
		$output .= "\t\t".'$this->_'.$aColumn['Field'].' = $'.$aColumn['Field'].';'.PHP_EOL;
		$output .= "\t".'}'.PHP_EOL;
		$output .= PHP_EOL;
	}
	$output .= '}'.PHP_EOL;
	$output .= '?>';
}
?>
<html>
	<head>
		<style>
		body {
			font-family: "Lucida Grande", "Lucida Sans Unicode";
			font-size: 12px;
			color: #3366CC;
		}
		textarea#output {
			font-family: "Courier New";
			font-size: 12px;
			color: #000000;
		}
		</style>
	</head>
	<body>
		<form method="POST">
			<div><label for="table">Table:</label></div>
			<select name="table" id="table">
				<?
				$query = mysql_query("SHOW TABLES");
				while ($row = mysql_fetch_array($query))
				{
					echo '<option value="'.$row[0].'">'.$row[0].'</option>';
				}
				?>
			</select>
			<input type="submit" />
			<? if ($filename) { ?>
				<br /><br />
				<div><label for="output"><?php echo $filename; ?></label></div>
				<textarea cols="200" rows="50" id="output"><?= $output; ?></textarea>
			<? } ?>
		</form>
	</body>
</html>