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