PHP类生成HTML?

PHP类生成HTML?,php,html,Php,Html,有人知道为php编写的任何类可以稍微清理一下您的代码吗 大概 $htGen = new HTMLGenerator(); $htGen->newDOM('div', 'here is what goes in the div', 'optionalID', 'optionalClass'); 或者这听起来是多余的 我最终得到了一些复杂的html和php混合体,有时我觉得可以简化一些,比如我最新的cms foreach($details as $detail){ $d = uns

有人知道为php编写的任何类可以稍微清理一下您的代码吗

大概

$htGen = new HTMLGenerator();
$htGen->newDOM('div', 'here is what goes in the div', 'optionalID', 'optionalClass');
或者这听起来是多余的

我最终得到了一些复杂的html和php混合体,有时我觉得可以简化一些,比如我最新的cms

foreach($details as $detail){

    $d = unserialize($detail);

    if($ad){
        print_r($d); // <-- VIEW DETAIL OBJECT IN WHOLE.
    }else{
    if($d->get_info('orphan')){
        echo '<li class="classRow orphan">' . "\n";
        echo '<div class="orphan" style="display:none">orphan</div>' . "\n";
    }else{
        echo '<li class="classRow">' . "\n";
        echo '<div class="orphan" style="display:none"></div>' . "\n";
    }

        echo '<div  class="classNumbers" id="' . $d->get_info('class ID') .  '" style="display:none"></div>' . "\n"; 
        echo '<div class="rowBG" style="overflow:hidden;width:100%">';   
            echo '<div class="startTime"></div>' . "\n";
            echo '<div class="details"><span class="classes">' . $d->get_info('class number') . '</span> - <input class="detailInput" type="text" value="' . $d->get_info('class description') . '"/><div class="editButton"><a class="editExpand">options(+)</a></div></div>' . "\n";
            echo '<div class="interval">';
            echo '<input class="intervalInput" type="text" value="' . $d->get_info('interval') . '" maxlength="5"/>';
            echo '</div>' . "\n"; 
            echo '<div class="numRiders"><input class="numRidersInput" type="text" value="' . $d->get_info('num riders') . '"/></div>' . "\n"; 
        echo '</div>'; 

        echo '<div class="classOptions">' . "\n";
            echo '<div class="selectRingMove">Move to Ring:<select id="ringSwap"><option>Select A Ring</option>' . get_ring_options() .  '</select></div>' . "\n";
            if($d->get_info('online sign up') != 'false'){
                echo '<div class="signUpContainer">Sign-Up<input type="checkbox" class="signUp" checked/></div>' . "\n";
            }else{
                echo '<div class="signUpContainer">Sign-Up<input type="checkbox" class="signUp"/></div>' . "\n";
            }
            if($d->get_info('water and drag')){
                echo '<div class="wdBoxContainer"><select id="wdDescrip"><option>WATER AND DRAG</option><option>COURSE CHANGE & WALK</option><option>OTHER</option></select><input type="checkbox" class="wdBox" checked/><input type="text" value="' . $d->get_info('water and drag') .  '" maxlength="2" class="wdInput"> min</div>' . "\n";
            }else{
                echo '<div class="wdBoxContainer"><select id="wdDescrip"><option>WATER AND DRAG</option><option>COURSE CHANGE & WALK</option><option>OTHER</option></select><input type="checkbox" class="wdBox"/><input type="text" value="20" maxlength="2" class="wdInput"> min</div>' . "\n";
            }
            if($d->get_info('ghost riders')){
                echo '<div class="ghostRidersContainer">Ghost Riders<input type="checkbox" checked class="ghostBox"><input type="text" maxlength="2" class="ghostRiderInput" value="' . $d->get_info('ghost riders') .  '"></div>' . "\n";
            }else{
                echo '<div class="ghostRidersContainer">Ghost Riders<input type="checkbox" class="ghostBox"><input type="text" maxlength="2" class="ghostRiderInput"></div>' . "\n";
            }

        echo '</div>' . "\n";

    echo '</li>' . "\n";

    if($d->get_info('water and drag')){
        echo '<li class="waterAndDragRow" style="display:block;"><span class="wdStartTime">08:33am</span> - <span class="wdEndTime">08:34am</span> <input type="text" class="wdDescription" value="' . $d->get_info('water and drag description') . '"></li>';
    }
    }
}
foreach($details作为$detail){
$d=未序列化($detail);
若有($ad){
print_r($d);//获取_信息('orphan')){
echo“
  • ”。“\n”; 回显“孤立”。“\n”; }否则{ 回显“
  • ”。\n; 回显“”。“\n”; } 回显“”。“\n”; 回声'; 回显“”。“\n”; 回显“”。$d->get_info('class number')。-options(+)。“\n”; 回声'; 回声'; 回显“”。“\n”; 回显“”。“\n”; 回声'; 回显“”。“\n”; 回显“移动到铃声:选择铃声”。获取铃声选项()。“\n”; 如果($d->get_info(‘在线注册’)!=‘false’){ 回显“注册”。“\n”; }否则{ 回显“注册”。“\n”; } 如果($d->get_info('water and drag')){ 回音“水和排水管道更换和步行其他分钟”。“\n”; }否则{ 回音“水和排水管道更换和步行其他分钟”。“\n”; } 如果($d->get_info('ghost riders')){ 回音“幽灵骑士”。“\n”; }否则{ 回音“幽灵骑士”。“\n”; } 回显“”。“\n”; 回显“
  • ”。“\n”; 如果($d->get_info('water and drag')){ echo'
  • 08:33-08:34; } } }
  • 或者,如果您知道一种更干净的方法来编写混合php变量和html的长块。。。(不太喜欢EOF>>>)


    提前谢谢。

    我想可以用你的电脑来完成。但这并不是一个好办法

    <>我同意你的代码代码样本不是很清楚,你可以考虑如下:

    <ul>
    <?php foreach ($items as $item): ?>
        <li>
            <?=$item['something']?>
            <?php if ($item['foo'] == 'bar'): ?>
            <ul>
                <li>bar</li>
            </ul>
            <?php else: ?>
            <ul>
                <li>foo</li>
            </ul>
            <?php endif; ?>
        </li>
    <?php endforeach; ?>
    <ul>
    
    可替换为:

    <ul>
        <li><?=($item['foo'] == 'bar' ? 'bar' : 'foo')?></li>
    </ul>
    

    我可能会因为推荐短标签而被否决,但我会这么做。我将所有的
    标记放在第1列,这样代码看起来就像是PHP和HTML的混合体。没有
    echo
    语句是目标

        foreach ($details as $detail) {
            $d = unserialize($detail);
    
            if ($ad) {
                print_r($d); // <-- VIEW DETAIL OBJECT IN WHOLE.
            }
            else {
                if ($d->get_info('orphan')) {
    ?>              <li class="classRow orphan">
                      <div class="orphan" style="display:none">orphan</div>
    <?          }
                else {
    ?>              <li class="classRow">
                      <div class="orphan" style="display:none"></div>
    <?          }
    
    ?>          <div class="classNumbers" id="<?= $d->get_info('class ID') ?>"
                     style="display:none"></div> 
                <div class="rowBG" style="overflow:hidden;width:100%">
                  <div class="startTime"></div>
                  <div class="details">
                    <span class="classes"><?= $d->get_info('class number') ?></span> -
                    <input class="detailInput" type="text" value="<?= $d->get_info('class description') ?>"/>
                    <div class="editButton">
                      <a class="editExpand">options(+)</a>
                    </div>
                  </div>
                  <div class="interval">
                    <input class="intervalInput" type="text" value="<?= $d->get_info('interval') ?>" maxlength="5"/>
                  </div>
                  <div class="numRiders">
                    <input class="numRidersInput" type="text" value="<?= $d->get_info('num riders') ?>"/>
                  </div>
                </div>
    
                <div class="classOptions">
                  <div class="selectRingMove">
                    Move to Ring:
                    <select id="ringSwap">
                      <option>Select A Ring</option>
                      <?= get_ring_options() ?>
                    </select>
                  </div>
    
    <?            if ($d->get_info('online sign up') != 'false') {
    ?>                <div class="signUpContainer">
                        Sign-Up
                        <input type="checkbox" class="signUp" checked/>
                      </div>
    <?            }
                  else {
    ?>                <div class="signUpContainer">
                        Sign-Up
                        <input type="checkbox" class="signUp"/>
                      </div>
    <?            }
    
                  if ($d->get_info('water and drag')) {
    ?>                <div class="wdBoxContainer">
                        <select id="wdDescrip">
                          <option>WATER AND DRAG</option>
                          <option>COURSE CHANGE &amp; WALK</option>
                          <option>OTHER</option>
                        </select>
    
                        <input type="checkbox" class="wdBox" checked/>
                        <input type="text" value="<?= $d->get_info('water and drag') ?>" maxlength="2" class="wdInput"> min
                      </div>
    <?            }
                  else {
    ?>                <div class="wdBoxContainer">
                        <select id="wdDescrip">
                          <option>WATER AND DRAG</option>
                          <option>COURSE CHANGE &amp; WALK</option>
                          <option>OTHER</option>
                        </select>
    
                        <input type="checkbox" class="wdBox"/>
                        <input type="text" value="20" maxlength="2" class="wdInput"> min
                      </div>
    <?            }
    
                  if ($d->get_info('ghost riders')) {
    ?>                <div class="ghostRidersContainer">
                        Ghost Riders
                        <input type="checkbox" checked class="ghostBox">
                        <input type="text" maxlength="2" class="ghostRiderInput" value="<?= $d->get_info('ghost riders') ?>">
                      </div>
    <?            }
                  else {
    ?>                <div class="ghostRidersContainer">
                        Ghost Riders
                        <input type="checkbox" class="ghostBox">
                        <input type="text" maxlength="2" class="ghostRiderInput">
                      </div>
    <?            }
    ?>          </div>
                </li>
    
    <?          if ($d->get_info('water and drag')) {
    ?>              <li class="waterAndDragRow" style="display:block;">
                      <span class="wdStartTime">08:33am</span> -
                      <span class="wdEndTime">08:34am</span>
                      <input type="text" class="wdDescription" value="<?= $d->get_info('water and drag description') ?>">
                    </li>
    <?          }
            }
        }
    
    foreach($details作为$detail){
    $d=未序列化($detail);
    若有($ad){
    print_r($d);//获取_信息('orphan')){
    ?>
  • 孤儿

  • 为什么不创建自己的类呢?或者至少创建一些函数……我看到你使用了很多IF,你可以使用vairables来清理它,就像当你

    if($d->get_info('ghost riders')){
                echo '<div class="ghostRidersContainer">Ghost Riders<input type="checkbox" checked class="ghostBox"><input type="text" maxlength="2" class="ghostRiderInput" value="' . $d->get_info('ghost riders') .  '"></div>' . "\n";
            }else{
                echo '<div class="ghostRidersContainer">Ghost Riders<input type="checkbox" class="ghostBox"><input type="text" maxlength="2" class="ghostRiderInput"></div>' . "\n";
            }
    
    if($d->get_info('ghost riders')){
    回音“幽灵骑士”。“\n”;
    }否则{
    回音“幽灵骑士”。“\n”;
    }
    
    你可以写:

    $check = ($d->get_info('ghost riders'))?"checked":"";
    echo '<div class="ghostRidersContainer">Ghost Riders<input type="checkbox" '.$check.' class="ghostBox"><input type="text" maxlength="2" class="ghostRiderInput" value="' . $d->get_info('ghost riders') .  '"></div>' . "\n";
    
    $check=($d->get_info('ghost riders'))?“checked”:”;
    回音“幽灵骑士”。“\n”;
    

    它看起来会更干净:)我创建了一个表单类,它可以在我必须创建表单时帮助我,而且代码更清晰

    生成HTML的主要思想是保持HTML的原样。
    只需将脚本分为两部分:准备数据部分和显示数据部分。后一部分应主要包含HTML和一些PHP控制结构。当然,应尽可能减少PHP代码。将所有不必要的PHP代码移到第一部分

    总而言之:
    $details数组中应该没有要取消序列化的内容。是否已准备好数据

    <? foreach ($details as $d): ?>              
    <li class="classRow orphan">
      <div class="orphan" style="display:none"><? if ($d->get_info('orphan')): ?>orphan<? endif ?></div>
       <div class="classNumbers" id="<?= $d->get_info('class ID') ?>" style="display:none"></div> 
        <div class="rowBG" style="overflow:hidden;width:100%">
         <div class="startTime"></div>
          <div class="details">
           <span class="classes"><?= $d->get_info('class number') ?></span> -
            <input class="detailInput" type="text" value="<?= $d->get_info('class description') ?>"/>
             <div class="editButton">
              <a class="editExpand">options(+)</a>
             </div>
            </div>
            <div class="interval">
             <input class="intervalInput" type="text" value="<?= $d->get_info('interval') ?>" maxlength="5"/>
            </div>
            <div class="numRiders">
             <input class="numRidersInput" type="text" value="<?= $d->get_info('num riders') ?>"/>
            </div>
           </div>
           <div class="classOptions">
           <div class="selectRingMove">Move to Ring:
            <select id="ringSwap">
             <option>Select A Ring</option>
    <?= foreach (get_ring_options() as $value => $option): ?>
         <option value="<?=$value?>"><?=$option?></option>
    <? endforeach ?>
             </select>
           </div>
           <div class="signUpContainer">Sign-Up
            <input type="checkbox" class="signUp" <? if (!$d->get_info('online sign up'): ?>checked<? endif ?>/>
           </div>
    
    
    
  • 孤儿

    而不是一个类,考虑函数库来生成HTML。我没有使用类来编写最终编写简洁而有表现力的代码。使用类必须创建实例并使用该变量,或者使方法静态并写入静态引用。

    使用此技术,为作为链接的图像创建HTML如下所示:

    a('/example/url', img('image_url', $altText));
    
    这是基于我曾经创建的脚本。首先是生成HTML元素和属性的通用函数:

    function tag($tag, $text, $attributes = array()) {
        return "<$tag" . attributesToArray($attributes) . ">$text</$tag>";
    }
    
    function minimizedTag($tag, $attributes = array()) {
        return "<$tag" . attributesToArray($attributes) . " />";
    }
    
    function attributesToArray($attributes = array()){
        $a = '';
        foreach ($attributes as $attribute => $value) {
            $a .= " $attribute='$value'";
        }
        return $a;
    }
    

    选择参数以明智地传递公共属性,使库更易于使用。

    我正在开发一个简单的DSL来解决这个公共任务。它被称为,托管在Github上

    我只是做了一些重大改进

    这里有一个例子

    use function htmlgen\html as h;
    
    h('#wrapper',
      h('h1.title', 'Hello, World'),
      h('p',
        h('comment', 'link to project'),
        h('a', ['href'=>'https://github.com/naomik/htmlgen'], 'See htmlgen on Github')
      )
    );
    
    这是输出(实际输出没有空格)

    
    你好,世界
    
    


    这是一个非常新的版本,但是大约有200行的源代码,它已经非常强大了。请把它交给我,进行调整,或者给我一个带有建议的注释。

    关于生成HTML的PHP类,您可以使用cake PHP框架中的一个对象。 其他人已经解决了您不太干净的代码

    它使用以下格式:
    div($class=NULL,$text=NULL,$options=array())

    类似这样的格式

    <?php
    
        $html->tag('doctype')->alone('html')->tag();
        $html->tag('html')->lang('en');
    
            $html->tag('head');
                $html->tag('meta')->charset('utf-8')->tag();
                $html->tag('meta')->httpequiv('X-UA-Compatible')->content('IE=edge')->tag();
                $html->tag('meta')->name('viewport')->content('width=device-width, initial-scale=1')->tag();
                $html->tag('meta')->name('description')->content('Brosta Tools')->tag();
                $html->tag('meta')->name('author')->content('Brosta')->tag();
                $html->tag('title')->text('Brosta Tools')->tag();
                $html->tag('link')->href('assets/plugins/bootstrap/css/bootstrap.min.css')->rel('stylesheet')->tag();
                $html->tag('link')->href('assets/plugins/bootstrap/css/simple-sidebar.css')->rel('stylesheet')->tag();
                $html->tag('link')->href('assets/plugins/prism/css/prism.css')->rel('stylesheet')->tag();
                $html->tag('link')->href('assets/plugins/normalize/css/normalize.css')->rel('stylesheet')->tag();
                $html->tag('link')->href('assets/plugins/brosta/css/brosta.css')->rel('stylesheet')->tag();
    
                $html->tag('script')->src('assets/plugins/bootstrap/js/jquery.js')->type('text/javascript')->tag();
                $html->tag('script')->src('assets/plugins/bootstrap/js/bootstrap.min.js')->type('text/javascript')->tag();
                $html->tag('script')->src('assets/plugins/prism/js/prism.js')->type('text/javascript')->tag();
                $html->tag('script')->type('text/javascript')->text('$("#menu-toggle").click(function(e) {e.preventDefault(); $("#wrapper").toggleClass("toggled"); });')->tag();
                $html->tag('script')->type('text/javascript')->text('
                    window.onload = function () { 
                        var x = document.getElementsByClassName("token");
                        var i;
                        for (i = 0; i < x.length; i++) {
                            var variable = x[i].getAttribute("class").replace("token ", "");
                            var text = x[i].innerText.trim().replace("$", "");
                            if(!/[^a-zA-Z0-9]/.test(text) || text.indexOf("_") >= 0) {
                                x[i].className +=" " + variable + "-" + text;
                            }
                        }
                    }
                ')->tag();
            $html->tag();
    
            $html->tag('body')->class('brosta');
    
                $html->include('snippets.brosta.navbar');
    
                $html->tag('div')->class('container-fluid brosta');
                    $html->tag('div')->id('wrapper');
                        $html->tag('div')->id('sidebar-wrapper');
                            $html->tag('ul')->class('sidebar-nav');
    
                                $data = [
                                    ['link' => '/Instalation', 'text' => 'Instalation'],
                                    ['link' => '/Html', 'text' => 'Html']
                                ];
    
                                foreach($data as $link)
                                {
                                    $html->tag('li');
                                        $html->tag('a')->href($link['link'])->text($link['text'])->tag();
                                    $html->tag();
                                }
    
                            $html->tag();
                        $html->tag();
                        $html->tag('div')->id('page-content-wrapper');
                            $html->tag('div')->class('row');
                                $html->tag('div')->class('col-lg-12');
                                    $html->tag('div')->class('panel panel-default');
                                        $html->tag('div')->class('panel-heading clearfix')->text('Without Time')->tag();
                                        $html->tag('div')->class('panel-body');
                                            $html->tag('p')->text('Make a file in your root public server. Ex: <code class="language-php">C:\xampp\htdocs\index.php</code>')->tag();
                                            $html->tag('pre')->class('language-php');
                                                $html->tag('code')->class('language-php')->text($html->specialChars('views/content.php'))->tag();
                                            $html->tag();
                                        $html->tag();
                                    $html->tag();
                                $html->tag();
                            $html->tag();
                        $html->tag();
                    $html->tag();
                $html->tag();
            $html->tag();
        $html->tag();
    
    echo $html->get();
    

    这有点晚了,但我最近编写了。它支持嵌套

    作为一个例子,这个

    $h = new \HTML;
    echo $h::div(
        'class', 'my-class', 
        'id', 'my-id',
        $h::p(
            'class', 'paragraph',
            'It was a dark and stormy night, at least according to the beginning of the book.'
        )
    );
    
    …将创建此标记(标记之间没有空格)

    
    

    这是一个黑暗而暴风雨的夜晚,至少在书中是这样

    希望您觉得它有用!

    是适合我的软件包。它有一个声音API,带有链接,并且在Composer上启用

    $link = new Studiow\HTML\Element("a");
    $link->setInnerHTML("Documents")
            ->setAttribute("href", "/documents")
            ->addClass("button")
            ->addClass("button-documents")
            ->setAttribute('title', "Go to documents");
    echo (string) $link; // Outputs <a href="/documents" class="button button-documents" title="Go to documents">Documents</a>
    
    $link=newstudiow\HTML\Element(“a”);
    $link->setInnerHTML(“文档”)
    ->setAttribute(“href”,“/documents”)
    ->addClass(“按钮”)
    ->addClass(“按钮文档”)
    ->setAttribute(“标题”,“转到文档”);
    echo(字符串)$link;//输出
    
    不要混合使用html和php代码! 我会这样做:

    “标记生成”


    适用于那些寻求简单开始的人。这足以生成各种各样的元素

    这将创造任何类型的
    <?php
    
        $html->tag('doctype')->alone('html')->tag();
        $html->tag('html')->lang('en');
    
            $html->tag('head');
                $html->tag('meta')->charset('utf-8')->tag();
                $html->tag('meta')->httpequiv('X-UA-Compatible')->content('IE=edge')->tag();
                $html->tag('meta')->name('viewport')->content('width=device-width, initial-scale=1')->tag();
                $html->tag('meta')->name('description')->content('Brosta Tools')->tag();
                $html->tag('meta')->name('author')->content('Brosta')->tag();
                $html->tag('title')->text('Brosta Tools')->tag();
                $html->tag('link')->href('assets/plugins/bootstrap/css/bootstrap.min.css')->rel('stylesheet')->tag();
                $html->tag('link')->href('assets/plugins/bootstrap/css/simple-sidebar.css')->rel('stylesheet')->tag();
                $html->tag('link')->href('assets/plugins/prism/css/prism.css')->rel('stylesheet')->tag();
                $html->tag('link')->href('assets/plugins/normalize/css/normalize.css')->rel('stylesheet')->tag();
                $html->tag('link')->href('assets/plugins/brosta/css/brosta.css')->rel('stylesheet')->tag();
    
                $html->tag('script')->src('assets/plugins/bootstrap/js/jquery.js')->type('text/javascript')->tag();
                $html->tag('script')->src('assets/plugins/bootstrap/js/bootstrap.min.js')->type('text/javascript')->tag();
                $html->tag('script')->src('assets/plugins/prism/js/prism.js')->type('text/javascript')->tag();
                $html->tag('script')->type('text/javascript')->text('$("#menu-toggle").click(function(e) {e.preventDefault(); $("#wrapper").toggleClass("toggled"); });')->tag();
                $html->tag('script')->type('text/javascript')->text('
                    window.onload = function () { 
                        var x = document.getElementsByClassName("token");
                        var i;
                        for (i = 0; i < x.length; i++) {
                            var variable = x[i].getAttribute("class").replace("token ", "");
                            var text = x[i].innerText.trim().replace("$", "");
                            if(!/[^a-zA-Z0-9]/.test(text) || text.indexOf("_") >= 0) {
                                x[i].className +=" " + variable + "-" + text;
                            }
                        }
                    }
                ')->tag();
            $html->tag();
    
            $html->tag('body')->class('brosta');
    
                $html->include('snippets.brosta.navbar');
    
                $html->tag('div')->class('container-fluid brosta');
                    $html->tag('div')->id('wrapper');
                        $html->tag('div')->id('sidebar-wrapper');
                            $html->tag('ul')->class('sidebar-nav');
    
                                $data = [
                                    ['link' => '/Instalation', 'text' => 'Instalation'],
                                    ['link' => '/Html', 'text' => 'Html']
                                ];
    
                                foreach($data as $link)
                                {
                                    $html->tag('li');
                                        $html->tag('a')->href($link['link'])->text($link['text'])->tag();
                                    $html->tag();
                                }
    
                            $html->tag();
                        $html->tag();
                        $html->tag('div')->id('page-content-wrapper');
                            $html->tag('div')->class('row');
                                $html->tag('div')->class('col-lg-12');
                                    $html->tag('div')->class('panel panel-default');
                                        $html->tag('div')->class('panel-heading clearfix')->text('Without Time')->tag();
                                        $html->tag('div')->class('panel-body');
                                            $html->tag('p')->text('Make a file in your root public server. Ex: <code class="language-php">C:\xampp\htdocs\index.php</code>')->tag();
                                            $html->tag('pre')->class('language-php');
                                                $html->tag('code')->class('language-php')->text($html->specialChars('views/content.php'))->tag();
                                            $html->tag();
                                        $html->tag();
                                    $html->tag();
                                $html->tag();
                            $html->tag();
                        $html->tag();
                    $html->tag();
                $html->tag();
            $html->tag();
        $html->tag();
    
    echo $html->get();
    
    $h = new \HTML;
    echo $h::div(
        'class', 'my-class', 
        'id', 'my-id',
        $h::p(
            'class', 'paragraph',
            'It was a dark and stormy night, at least according to the beginning of the book.'
        )
    );
    
    <div class="my-class" id="my-id">
        <p class="paragraph">It was a dark and stormy night, at least according to the book.</p>
    </div>
    
    $link = new Studiow\HTML\Element("a");
    $link->setInnerHTML("Documents")
            ->setAttribute("href", "/documents")
            ->addClass("button")
            ->addClass("button-documents")
            ->setAttribute('title', "Go to documents");
    echo (string) $link; // Outputs <a href="/documents" class="button button-documents" title="Go to documents">Documents</a>
    
    <?php
    
    namespace Main;
    
    /**
     * Description of Tag
     *
     * @author HanKrum
     */
    class Tag {
    
    
        private $_tags = ['doctype', 'br', 'hr', 'input', 'meta', 'base', 'basefont', 'img', 'source'];
    
        public function __call($name, $arguments) {
            $attr = null;
            $text = null;
            if (\in_array($name, $this->_tags)) {
                $name = $name == $this->_tags[0] ? '!' . $name . ' html' : $name;
                foreach ($arguments as $v) {
                    $attr .= ' ' . $v;
                }
                return '<' . $name . $attr . '>' . "\n";
            }
            $br = 0;
            $count = \count($arguments);
            foreach ($arguments as $v) {
                $br ++;
                if ($br == $count) {
                    $text = $v;
                } else {
                    if (!$v) {
                        $space = null;
                    } else {
                        $space = ' ';
                    }
                    $attr .= $space . $v;
                }
            }
            return '<' . $name . $attr . '>' . $text . '</' . $name . '>' . "\n";
        }
    
    }
    
    <?php
    $ob = new \Main\Tag();
    echo $ob->input('class="doc"', 'placeholder="Title"', 'name="title"');
    echo $ob->span(null, 'Text');
    exit($ob->button('class="submit"', 'Write');
    
    <?php
    /**
     * HTML - Simplest html element builder 
     * - @param1 Element name
     * - @param2 Class name
     * - @param3 ID
     * - @param2 Element content
     */
    class HTML{
        /**
        * Create a new html element
        */ 
        private static function core($element, $content) {
            return "<" . $element . ">" . $content . "</" . $element . ">";
        }
        /**
        * Add a new param to a html element
        */        
        private static function addParam($elem, $param, $value) {
            if (is_null($value)){return $elem;}
            return implode(" $param=\"" . $value . '">', explode(">", $elem, 2));
        }
        /**
        * Return an element with a class and an id
        */
        public static function create($element, $content=null, $class=null, $id=null) {
            return self::addParam(self::addParam(self::core($element, $content), "class", $class) , "id", $id);
        }
    }
    
    // Examples
    echo HTML::create("div", "This is it!", "redclass", "niceid");
    echo PHP_EOL;
    $html = new HTML();
    echo HTML::create("button", "Click me!", "button", "48151");
    echo PHP_EOL;
    echo $html->create("p", "A paragraph");
    echo PHP_EOL;
    echo $html->create("h3", "Hello world!");
    
    // OUTPUT
    //<div class="redclass" id="niceid">This is wtf</div>
    //<button class="button" id="48151">Click me!</button>
    //<p>A paragraph</p>
    //<h3>Hello world!</h3>