the internets!

~ Thursday, April 30 ~
Permalink

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.


Demo Class generator


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($strCodetrue). '</pre>';    
}
?>
    </div>
</body>
</html>

 ()