当前位置:  编程技术>php
本页文章导读:
    ▪php Hex RGB颜色值互换的例子      代码如下:   代码示例: <?php /**  * Hex RGB颜色值互换  * Edit www.  * at 2013/5/11 */ function HexToRGB($colour) { if ($colour [0] == '#') { $colour = substr ( $colour, 1 ); } if (strlen ( $colour ) == 6) { list ( $r,.........
    ▪php匹配任何网址的正则表达式      php匹配网址的正则,几乎可以匹配任何网址:   ^((https?|ftp|news):\/\/)?([a-z]([a-z0-9\-]*[\.。 ])+([a-z]{2}|aero|arpa|biz|com|coop|edu|gov|info|int|jobs|mil|museum|name|nato|net|org|pro|travel)|(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][.........
    ▪php静态类的罪与罚(原理详解与实例分析)      php静态类 静态类指的是无需实例化成对象,直接通过静态方式调用的类。 例子,   代码示例: <?php class Math { public static function ceil($value) { return ceil($value); } public static function floor($valu.........

[1]php Hex RGB颜色值互换的例子
    来源: 互联网  发布时间: 2013-12-24

代码如下:
 

代码示例:

<?php
/**
 * Hex RGB颜色值互换
 * Edit www.
 * at 2013/5/11
*/
function HexToRGB($colour) {
if ($colour [0] == '#') {
$colour = substr ( $colour, 1 );
}
if (strlen ( $colour ) == 6) {
list ( $r, $g, $b ) = array (
$colour [0] . $colour [1],
$colour [2] . $colour [3],
$colour [4] . $colour [5]
);
} elseif (strlen ( $colour ) == 3) {
list ( $r, $g, $b ) = array (
$colour [0] . $colour [0],
$colour [1] . $colour [1],
$colour [2] . $colour [2]
);
} else {
return false;
}
$r = hexdec ( $r );
$g = hexdec ( $g );
$b = hexdec ( $b );
return array (
'red' => $r,
'green' => $g,
'blue' => $b
);
}
function RGBToHex($rgb) {
$regexp = "/^rgb\(([0-9]{0,3})\,\s*([0-9]{0,3})\,\s*([0-9]{0,3})\)/";
$re = preg_match ( $regexp, $rgb, $match );
$re = array_shift ( $match );
$hexColor = "#";
$hex = array (
'0',
'1',
'2',
'3',
'4',
'5',
'6',
'7',
'8',
'9',
'A',
'B',
'C',
'D',
'E',
'F'
);
for($i = 0; $i < 3; $i ++) {
$r = null;
$c = $match [$i];
$hexAr = array ();

while ( $c > 16 ) {
$r = $c % 16;
$c = ($c / 16) >> 0;
array_push ( $hexAr, $hex [$r] );
}
array_push ( $hexAr, $hex [$c] );

$ret = array_reverse ( $hexAr );
$item = implode ( '', $ret );
$item = str_pad ( $item, 2, '0', STR_PAD_LEFT );
$hexColor .= $item;
}
return $hexColor;
}

//调用示例
echo implode ( ",", HexToRGB ( "#F7F7DA" ) ) . "<br/>";
echo RGBToHex ( "rgb(247,247,218)" );
?>


    
[2]php匹配任何网址的正则表达式
    来源: 互联网  发布时间: 2013-12-24

php匹配网址的正则,几乎可以匹配任何网址:
 

^((https?|ftp|news):\/\/)?([a-z]([a-z0-9\-]*[\.。
])+([a-z]{2}|aero|arpa|biz|com|coop|edu|gov|info|int|jobs|mil|museum|name|nato|net|org|pro|travel)|(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9]
[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]))(\/[a-z0-9_\-\.~]+)*(\/([a-z0-9_\-\.]*)(\?[a-z0-9+_\-\.%=&]*)?)?(#[a-z][a-z0-9_]*)?$

够牛吧,不知道性能如何呢?!

来看一个例子吧。
 

代码示例:
<script type="text/javascript">
/**
*匹配任何网址的正则表达式
*www. at 20130509
*/
function IsURL(/blog_article/urlString/index.html)
{
regExp = /^((https?|ftp|news):\/\/)?([a-z]([a-z0-9\-]*[\.。
])+([a-z]{2}|aero|arpa|biz|com|coop|edu|gov|info|int|jobs|mil|museum|name|nato|net|org|pro|travel)|(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9]
[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]))(\/[a-z0-9_\-\.~]+)*(\/([a-z0-9_\-\.]*)(\?[a-z0-9+_\-\.%=&]*)?)?(#[a-z][a-z0-9_]*)?$/
if (urlString.match(regExp))
return "is a url";
else
return "not a url";
}
url = "";
alert(IsURL(/blog_article/url/index.html));
</script>

有兴趣的朋友,可以找个软件,测试下这段代码的性能。
再好的正则,如何性能太差,也是不建议使用的哦。

您可能感兴趣的文章:
php匹配图片地址的代码一例
PHP正则匹配日期和时间(时间戳转换)的例子
php正则匹配重写html图片img路径的代码一例
PHP正则匹配获取URL中域名的代码
使用 preg_replace 函数 匹配图片并加上链接的方法
php用preg_match_all匹配文章中的图片
php正则表达式匹配URL中的域名


    
[3]php静态类的罪与罚(原理详解与实例分析)
    来源: 互联网  发布时间: 2013-12-24

php静态类
静态类指的是无需实例化成对象,直接通过静态方式调用的类。

例子,
 

代码示例:

<?php
class Math
{
public static function ceil($value)
{
return ceil($value);
}

public static function floor($value)
{
return floor($value);
}
}
?>

此时类所扮演的角色更像是命名空间,这或许是很多人喜欢使用静态类最直接的原因。

静态类的问题

本质上讲,静态类是面向过程的,因为通常它只是机械的把原本面向过程的代码集合到一起,虽然结果是以类的方式存在,但此时的类更像是一件皇帝的新衣,所以可以说静态类实际上是披着面向对象的壳儿,干着面向过程的事儿。

面向对象的设计原则之一:针对接口编程,而不是针对实现编程。这有什么不同?打个比方来说:抛开价格因素,你喜欢独立显卡的电脑还是集成显卡的电脑?我想绝大多数人会选择独立显卡。独立显卡可以看做是针对接口编程,而集成显卡就就可以看做是针对实现编程。如此说来针对实现编程的弊端就跃然纸上了:它丧失了变化的可能性。

一个文章管理系统的例子。
 

代码示例:

<?php

class Article
{
public function save()
{
ArticleDAO::save();
}
}

?>

Article实现必要的领域逻辑,然后把数据持久化交给ArticleDAO去做,而ArticleDAO是一个静态类,就好像焊在主板上的集成显卡一样难以改变,假设我们为了测试代码可能需要Mock掉ArticleDAO的实现,但因为调用时使用的是静态类的名字,等同于已经绑定了具体的实现方式,Mock几乎不可能,当然,实际上有一些方法可以实现:
 

代码示例:

<?php
class Article
{
private static $dao = 'ArticleDAO';

public static funciton setDao($dao)
{
self::$dao = $dao;
}

public static function save()
{
$dao = self::$dao;

$dao::save();
}
}
?>

有了变量的介入,可以在运行时设定具体使用哪个静态类:
 

代码示例:
<?php
Article::setDao('MockArticleDAO');
Article::save();
?>

虽然这样的实现方式看似解决了Mock的问题,但是首先它修改的原有的代码,违反了开闭原则,其次它引入了静态变量,而静态变量是共享的状态,有可能会干扰其它代码的执行,所以并不是一个完美的解决方案。

补充说明,利用动态语言的特性,其实可以简单的通过require一个不同的类定义文件来实现Mock,但这样做同样有弊端,设想我们在脚本里需要多次变换实现方式,但实际上我们只有一次require的机会,否则就会出现重复定义的错误。

对象的价值

如果放弃静态类,转而使用对象,应该如何实现文章管理系统的例子?
 

代码示例:

<?php

class Article
{
private $dao;

public function __construct($dao = null)
{
if ($dao === null) {
$dao = new ArticleDAO();
}

$this->setDao($dao);
}

public function setDao($dao)
{
$this->dao = $dao;
}

public function save()
{
$this->dao->save();
}
}

?>

实际上,这里用到了人们常说的依赖注入技术,通过构造器或者Setter注入依赖的对象:
 

代码示例:
<?php
$article = new Article(new MockArticleDAO());
$article->save();
?>

对象有自己的状态,不会发生共享状态干扰其它代码的执行的情况。

关于什么时候用静态类,这个需要在实际的编程中灵活控制,用的不好,反而影响性能。


    
最新技术文章:
▪PHP函数microtime()时间戳的定义与用法
▪PHP单一入口之apache配置内容
▪PHP数组排序方法总结(收藏)
▪php数组排序方法大全(脚本学堂整理奉献)
▪php数组排序的几个函数(附实例)
▪php二维数组排序(实例)
▪php根据键值对二维数组排序的小例子
▪php验证码(附截图)
▪php数组长度的获取方法(三个实例)
▪php获取数组长度的方法举例
▪判断php数组维度(php数组长度)的方法
▪php获取图片的exif信息的示例代码
▪PHP 数组key长度对性能的影响实例分析
▪php函数指定默认值的方法示例
▪php提交表单到当前页面、提交表单后页面重定...
▪php四舍五入的三种实现方法
▪php获得数组长度(元素个数)的方法
▪php日期函数的简单示例代码
▪php数学函数的简单示例代码
▪php字符串函数的简单示例代码
▪php文件下载代码(多浏览器兼容、支持中文文...
▪php验证码(附截图) iis7站长之家
▪php文件下载(防止中文文件名乱码)的示例代码
▪解决PHP文件下载时中文文件名乱码的问题
▪php数组去重(一维、二维数组去重)的简单示例
▪php小数点后取两位的三种实现方法
▪php Redis 队列服务的简单示例
▪PHP导出excel时数字变为科学计数的解决方法
▪PHP数组根据值获取Key的简单示例
▪php数组去重的函数代码示例
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3