PHP:HTML超链接的对象

PHP:HTML超链接的对象,php,object,Php,Object,更新:我为该类编辑了下面的代码,以更正运行该类时出现的错误(需要“new”来创建对象)。通过该更正,代码将运行并正确生成HTML。但由于我是OOP新手,我仍然想知道我是否采取了正确的方法 第二次更新:我在下面的附录中提出了一个关于该技术效率的问题。我还更正了URL中锚定名称和查询字符串的顺序,hLink()正确处理了这些内容 我有一个为超链接生成HTML的函数。它的参数可能是从数据库读取的字符串文字或变量。对该函数的调用示例如下所示: hLink('http://example.com', '

更新:我为该类编辑了下面的代码,以更正运行该类时出现的错误(需要“new”来创建对象)。通过该更正,代码将运行并正确生成HTML。但由于我是OOP新手,我仍然想知道我是否采取了正确的方法

第二次更新:我在下面的附录中提出了一个关于该技术效率的问题。我还更正了URL中锚定名称和查询字符串的顺序,hLink()正确处理了这些内容


我有一个为超链接生成HTML的函数。它的参数可能是从数据库读取的字符串文字或变量。对该函数的调用示例如下所示:

hLink('http://example.com', 'website', 'section', 'input=0', '_blank');
返回:

'<a HRef="http://example.com?input=0#section" target="_blank">website</a>'
其中,方法hLink()的主体与原始函数hLink()的主体相同

使用该类,上述函数调用的等效项为:

(new link('http://example.com'))->sText('website')->sLocn('section')->sQuery('input=0')->sWindow('_blank')->hLink()
其目的是生成与前面相同的字符串:

'<a HRef="http://example.com?input=0#section" target="_blank">website</a>'
“”
这个看起来怎么样?我走对了吗


附录

上面的技术为页面上的每个链接创建了一个新对象,而该对象在使用一次为链接创建HTML后什么都不做,这让我很困扰。它是一个很小的对象,并且一个页面上的对象不会超过几百个,因此不会造成很大的内存负担,但它仍然看起来很浪费和低效。我有一个解决这个问题的想法:

  • 在类中,没有构造函数,并且有一个将所有属性的值设置为默认值(空)的方法clear()
  • 创建该类的一个实例
  • 使用此对象在页面上放置一个链接,对其调用clear()方法,然后是设置所需属性值的方法,最后是输出方法hLink()
代码如下:(请原谅我的格式设置。我知道这很不传统,但我觉得这更容易阅读。)


如果
s
前缀表示它是一个字符串变量,那么您可能想知道,由于PHP/7,您可以而且在所有版本中都是标准的工具

代码格式也是相当不寻常的。最后,试图使代码紧凑以更好地利用屏幕空间并没有真正的回报:这对眼睛来说更难(相信我,你会变老),而且没有其他人在这样做,所以你不能使用编辑器的代码格式特性,而不花大量时间重新配置它

除此之外,我看不出有什么本质上的错误

下面是一个基本相同的代码的快速示例,其中包含类型提示、docblock和:


这里的逻辑看起来不错,但我建议不要使用像
sLocn
这样的快捷方法名称。另一方面,代码格式…这可能比上好。谢谢。根据您的建议,我现在已经在所有PHP文件中实现了严格的类型化。至于格式,我确实觉得这样读起来更容易,而且我已经很老了。我使用记事本++,而不是IDE。代码只由我维护,所以我关心功能和效率,但我更喜欢使用我觉得合适的格式。我希望这不会给你复习带来困难。我已经为这个问题写了一份附录。你能告诉我你对这个变化的看法吗?
'<a HRef="http://example.com?input=0#section" target="_blank">website</a>'
<?php declare(strict_types = 1);
$oLink = new link;
class link
    {private $sURL;
     private $sText;
     private $sAnchor;
     private $sQuery;
     private $sWindow;
     public function clear() 
        {$this->sURL    = ''; 
         $this->sText   = ''; 
         $this->sAnchor = '';
         $this->sQuery  = ''; 
         $this->sWindow = ''; 
         return $this;
         }
     public function URL(string $sURL)       {$this->sURL    = $sURL;    return $this;}
     public function text(string $sText)     {$this->sText   = $sText;   return $this;}
     public function anchor(string $sAnchor) {$this->sAnchor = $sAnchor; return $this;}
     public function query(string $sQuery)   {$this->sQuery  = $sQuery;  return $this;}
     public function window(string $sWindow) {$this->sWindow = $sWindow; return $this;}
     public function hLink()
        {return('<a HRef="' .  $this->sURL . 
                              ($this->sQuery  == '' ? '' : '?' . $this->sQuery) . 
                              ($this->sAnchor == '' ? '' : '#' . $this->sAnchor) .
                        '"' . ($this->sWindow == '' ? '' : ' target="' . $this->sWindow . '"') .
                 '>' . $this->sText. '</a>');
         }
     }
echo('Link to ' . $oLink->clear()->URL('http://example.com')->text('website')->anchor('section')->query('input=0')->window('_blank')->hLink() . ' in text');
Link to <a HRef="http://example.com?input=0#section" target="_blank">website</a> in text
class Link
{
    /**
     * @var string
     */
    private $url;

    /**
     * @var string
     */
    private $text = '';

    /**
     * @param string $url
     */
    public function __construct(string $url)
    {
        $this->url = $url;
    }

    /**
     * @param string $text
     * @return Link
     */
    public function text(string $text): Link
    {
        $this->text = $text;
        return $this;
    }

}