PHP getter setter class generator
PHP getter setter class generator
Este es un script sencillo, para generar la clase con sus setters y getters de un objeto, ayuda cuando tienes que hacer varias clases representando una entidad de base de datos, espero les sea de utilidad.
Source code:
<?php
if(isset($_GET['versource'])) {
highlight_file(__FILE__);
exit();
}
class Generator
{
private $_strClassName;
private $_arrData;
public function __construct($strClassName, $arrData)
{
$this->_strClassName = $strClassName;
$this->_arrData = $arrData;
}
public function generateClass()
{
$strCode = $this->generateClassName();
$strCode .= $this->generateVars();
foreach($this->_arrData as $arrVar) {
$strCode .= $this->generateSet($arrVar);
$strCode .= $this->generateGet($arrVar);
}
$strCode .= $this->generateExtraMethods();
$strCode .= $this->closeClass();
return $strCode;
}
private function generateClassName()
{
$strCode = "<?php\n";
$strCode .= "class ".$this->_strClassName . "\n";
$strCode .= "{\n";
return $strCode;
}
private function closeClass()
{
return "}\n?>";
}
private function generateVars()
{
$strCode ='';
foreach($this->_arrData as $arrVar) {
$strCode .= " /** DOC */\n";
$strCode .= " private \$_".$this->varTypeSub($arrVar['type']) .
$arrVar['name'] .";\n";
}
return $strCode;
}
private function generateSet($arrVarData)
{
$strName = $arrVarData['name'];
$strType = $arrVarData['type'];
$strCode = " /**\n";
$strCode .= " * \n";
$strCode .= " * Set para ....\n";
$strCode .= " * @param " . $strType .
" $" . $this->varTypeSub($strType) . $strName . "\n";
$strCode .= " */\n";
$strCode .= " public function set" .ucfirst($strName) .
"($" . $this->varTypeSub($strType) . $strName .
")\n";
$strCode .= " {\n";
$strCode .= " \$this->_" . $this->varTypeSub($strType) . $strName .
" = \$" . $this->varTypeSub($strType). $strName . ";\n";
$strCode .= " }\n";
return $strCode;
}
private function generateGet($arrVarData)
{
$strName = $arrVarData['name'];
$strType = $arrVarData['type'];
$strCode = " /**\n";
$strCode .= " * \n";
$strCode .= " * Get para ....\n";
$strCode .= " * @return " . $strType . "\n";
$strCode .= " */\n";
$strCode .= " public function get" .ucfirst($strName) . "()\n";
$strCode .= " {\n";
$strCode .= " return \$this->_" . $this->varTypeSub($strType) . $strName . ";\n";
$strCode .= " }\n";
return $strCode;
}
private function generateExtraMethods()
{
// to string
$strCode = ' /**'."\n";
$strCode .= ' * To string'."\n";
$strCode .= ' * '."\n";
$strCode .= ' * return string '."\n";
$strCode .= ' */'."\n";
$strCode .= ' public function __toString()'."\n";
$strCode .= ' {'."\n";
$strCode .= ' // To implement'."\n";
$strCode .= ' }'."\n";
// build object form resultset
$strCode .= ' /**'."\n";
$strCode .= ' * Build object from resultset'."\n";
$strCode .= ' * '."\n";
$strCode .= ' * return '.$this->_strClassName . "\n";
$strCode .= ' */'."\n";
$strCode .= ' public function buildObject($arrData)'."\n";
$strCode .= ' { // Pending to implement.'."\n";
$strCode .= ' $oObj = new '.$this->_strClassName .'();'."\n";
foreach($this->_arrData as $arrVar) {
$strCode .= ' $oObj->set'.ucfirst($arrVar['name']).'($arrData[\'\']);'."\n";
}
$strCode .= ' return $oObj;'."\n";
$strCode .= ' }'."\n";
return $strCode;
}
private function varTypeSub($strType)
{
switch($strType) {
case 'integer':
return 'int';
break;
case 'string':
return 'str';
break;
case 'array':
return 'arr';
break;
case 'boolean':
return 'bln';
break;
case 'object':
return 'o';
break;
default:
return 'var';
break;
}
}
}
?>
<html>
<head>
<script>
function addVar()
{
var varContainer = document.getElementById('varelem');
var varCounter = document.getElementById('numvars');
var nextVal = parseInt(document.getElementById('numvars').value);
nextVal ++;
varCounter.value = nextVal;
var newContainer = document.createElement('div');
var newLabel = document.createElement('label');
var newInputText = document.createElement('input');
var newRadioInt = document.createElement('input');
var newRadioStr = document.createElement('input');
var newRadioArr = document.createElement('input');
var newRadioObj = document.createElement('input');
var newRadioBln = document.createElement('input');
newLabel.innerHTML = 'Variable: ';
newInputText.type = 'text';
newInputText.name = 'vars[]';
newInputText.value = "";
newRadioInt.type = 'radio';
newRadioInt.name = 'vartype_' + nextVal;
newRadioInt.value = 'integer';
newRadioStr.type = 'radio';
newRadioStr.name = 'vartype_' + nextVal;
newRadioStr.value = 'string';
newRadioArr.type = 'radio';
newRadioArr.name = 'vartype_' + nextVal;
newRadioArr.value = 'array';
newRadioObj.type = 'radio';
newRadioObj.name = 'vartype_' + nextVal;
newRadioObj.value = 'object';
newRadioBln.type = 'radio';
newRadioBln.name = 'vartype_' + nextVal;
newRadioBln.value = 'boolean';
newContainer.appendChild(newLabel);
newContainer.appendChild(newInputText);
newContainer.appendChild(newRadioInt);
newContainer.innerHTML += "Int\n";
newContainer.appendChild(newRadioStr);
newContainer.innerHTML += "String\n";
newContainer.appendChild(newRadioArr);
newContainer.innerHTML += "Array\n";
newContainer.appendChild(newRadioObj);
newContainer.innerHTML += "Object\n";
newContainer.appendChild(newRadioBln);
newContainer.innerHTML += "Boolean\n";
varContainer.appendChild(newContainer);
varContainer.innerHTML += "\n";
}
</script>
<style>
body {font-family: Verdana, Arial, Helvetica, sans-serif;margin: 0px; background: #F1F1F1; font-size:12px; color:#000}
#wraper {width: 550px; border: solid 1px #000; background: #FFF; margin-left:50px; padding: 50px;}
#wraper input{border: 1px solid #000}
#wraper fieldset{border: 1px solid #CCC}
#wraper .classnamelabel{font-size:14px}
#wraper .classname{height:28px;font-size:18px}
#wraper .variable{}
#wraper .boton{margin-top:10px;width:200px;height:40px}
#wraper pre{background-color: #E3E4E8; margin: 10px 0; padding: 10px; border: 1px dotted #B9BBC5; font-family: "Courier New", Courier, monospace;font-size: 12px; overflow: auto;}
</style>
</head>
<body>
<div id="wraper">
<a href="?versource">[+]source code</a><br />
<fieldset>
<legend>PHPSetter Getter Class Generator</legend>
<form id="" method="POST" action="" />
<input type="hidden" name="numvars" id="numvars" value="0" />
<p><a href="#" onclick="javascript:addVar()">Add Var</a></p>
<label class="classnamelabel">Nombre Clase</label><br />
<input class="classname" type="text" value="" name="className" />
<br /><br />
<div id="varelem">
<label class="variablelabel">Variable:</label>
<input class="variable" type="text" value="" name="vars[]" />
<input type="radio" value="integer" name="vartype_0" />Int
<input type="radio" value="string" name="vartype_0" />String
<input type="radio" value="array" name="vartype_0" />Array
<input type="radio" value="object" name="vartype_0" />Object
<input type="radio" value="boolean" name="vartype_0" />Boolean<br />
</div>
<input class="botoN" type="submit" value="Generar" name="submit" />
</form>
</fieldset>
<?php
if(isset($_POST['submit'])) {
$strClassName = $_POST['className'];
foreach($_POST['vars'] as $numPos => $strName) {
$strName = str_replace(' ', '', $strName);
$arrData[] = array('name' => $strName,
'type' => $_POST['vartype_' . $numPos]);
}
$oG = new Generator($strClassName, $arrData);
$strCode = $oG->generateClass();
echo '<pre>' .highlight_string($strCode, true). '</pre>';
}
?>
</div>
</body>
</html>
()
