当前位置:  编程技术>php
本页文章导读:
    ▪php验证码函数      function _code($_code_length = 4, $_width = 75, $_height = 25){ for($i=0;$i<$_code_length;$i++){ $_nmsg .= dechex(mt_rand(0,15)); } $_SESSION["code"] = $_nmsg; $_img = imagecreatetruecolor($_width, $_height); $_white = imagecol.........
    ▪PHP命名空间(Namespace)初探      探完闭包[查看],再探命名空间。对于命名空间,官方文档已经说得很详细[查看],我在这里做了一下实践和总结。命名空间一个最明确的目的就是解决重名问题,PHP中不允许两个函数或者类.........
    ▪LotusPhp学习二:Logger组件的使用      今天比较忙,本来想写多点内容,暂时没有办法了,捡个比较简单的组件来写下好了,往后的几章都是介绍组件。LtLogger的使用还是比较简单的,基本代码都是在Autoloader的环境下运行的,所以.........

[1]php验证码函数
    来源:    发布时间: 2013-11-07

function _code($_code_length = 4, $_width = 75, $_height = 25){
for($i=0;$i<$_code_length;$i++){
$_nmsg .= dechex(mt_rand(0,15));
}
$_SESSION["code"] = $_nmsg;

$_img = imagecreatetruecolor($_width, $_height);

$_white = imagecolorallocate($_img, 250, 250, 250);

imagefill($_img, 0, 0, $_white);

$_gray = imagecolorallocate($_img, 196, 196, 196);

imagerectangle($_img, 0, 0, $_width-1, $_height-1, $_gray);

for ($i=0; $i < 6; $i++) {
$_md_color = imagecolorallocate($_img, mt_rand(200,255), mt_rand(200,255), mt_rand(200,255));
imageline($_img, mt_rand(0,$_width), mt_rand(0, $_height),mt_rand(0,$_width), mt_rand(0, $_height), $_md_color);
}

for ($i=0; $i < 50; $i++) {
$_md_color = imagecolorallocate($_img, mt_rand(200,255), mt_rand(200,255), mt_rand(200,255));
imagestring($_img, 1, mt_rand(1,$_width-5), mt_rand(1, $_height-5), "*", $_md_color);
}

for ($i=0; $i < $_code_length ; $i++) {
$_md_color = imagecolorallocate($_img, mt_rand(0,102), mt_rand(0,102), mt_rand(0,102));
imagestring($_img, 5, $i * $_width/$_code_length+ mt_rand(1, 10), mt_rand(1, $_height/2), $_SESSION["code"][$i], $_md_color);
}

header("Content-Type:image/png");

imagepng($_img);

imagedestroy($_img);
}


 

本文链接


    
[2]PHP命名空间(Namespace)初探
    来源:    发布时间: 2013-11-07

探完闭包[查看],再探命名空间。


对于命名空间,官方文档已经说得很详细[查看],我在这里做了一下实践和总结。


命名空间一个最明确的目的就是解决重名问题,PHP中不允许两个函数或者类出现相同的名字,否则会产生一个致命的错误。这种情况下只要避免命名重复就可以解决,最常见的一种做法是约定一个前缀。


例:项目中有两个模块:article和message board,它们各自有一个处理用户留言的类Comment。之后我可能想要增加对所有用户留言的一些信息统计功能,比如说我想得到所有留言的数量。这时候调用它们Comment提供的方法是很好的做法,但是同时引入各自的Comment类显然是不行的,代码会出错,在另一个地方重写任何一个Comment也会降低维护性。那这时只能重构类名,我约定了一个命名规则,在类名前面加上模块名,像这样:Article_Comment、MessageBoard_Comment


可以看到,名字变得很长,那意味着以后使用Comment的时候会写上更多的代码(至少字符多了)。并且,以后如果要对各个模块增加更多的一些整合功能,或者是互相调用,发生重名的时候就需要重构名字。当然在项目开始的时候就注意到这个问题,并规定命名规则就能很好的避免这个问题。另一个解决方法可以考虑使用命名空间。


 


注明:


本文提到的常量:PHP5.3开始const关键字可以用在类的外部。const和define都是用来声明常量的(它们的区别不详述),但是在命名空间里,define的作用是全局的,而const则作用于当前空间。我在文中提到的常量是指使用const声明的常量。


 


 


基础

命名空间将代码划分出不同的空间(区域),每个空间的常量、函数、类(为了偷懒,我下边都将它们称为元素)的名字互不影响, 这个有点类似我们常常提到的‘封装’的概念。


创建一个命名空间需要使用namespace关键字,这样:



<?php

//创建一个名为'Article'的命名空间
namespace Article;

?>


 


要注意的是,当前脚本文件的第一个命名空间前面不能有任何代码,下面的写法都是错误的:



//例一
//在脚本前面写了一些逻辑代码

<?php

$path = "/";

class Comment { }

namespace Article;

?>



//例二
//在脚本前面输出了一些字符

<html></html>
<?php

namespace Article;

?>


 


为什么要说第一个命名空间呢?因为同一脚本文件中可以创建多个命名空间。


下面我创建了两个命名空间,顺便为这两个空间各自添加了一个Comment类元素:



<?php

//创建一个名为'Article'的命名空间
namespace Article;

//此Comment属于Article空间的元素
class Comment { }



//创建一个名为'MessageBoard'的命名空间
namespace MessageBoard;

//此Comment属于MessageBoard空间的元素
class Comment { }
?>


 


在不同空间之间不可以直接调用其它元素,需要使用命名空间的语法:



<?php

namespace Article;

class Comment { }



namespace MessageBoard;

class Comment { }

//调用当前空间(MessageBoard)的Comment类
$comment = new Comment();

//调用Article空间的Comment类
$article_comment = new \Article\Comment();

?>


 


可以看到,在MessageBoard空间中调用article空间里的Comment类时,使用了一种像文件路径的语法: \空间名\元素名


除了类之外,对函数和常量的用法是一样的,下面我为两个空间创建了新的元素,并在MessageBoard空间中输出了它们的值。



<?php

namespace Article;

const PATH = '/article';

function getCommentTotal() {
return 100;
}

class Comment { }




namespace MessageBoard;

const PATH = '/message_board';

function getCommentTotal() {
return 300;
}

class Comment { }

//调用当前空间的常量、函数和类
echo PATH; ///message_board
echo getCommentTotal(); //300
$comment = new Comment();

//调用Article空间的常量、函数和类
echo \Article\PATH; ///article
echo \Article\getCommentTotal(); //100
$article_comment = new \Article\Comment();

?>


 


然后我的确得到了Article空间的元素数据。


 


 


子空间

命名空间的调用语法像文件路径一样是有道理的,它允许我们自定义子空间来描述各个空间之间的关系。


抱歉我忘了说,article和message board这两个模块其实都是处于同一个blog项目内。如果用命名空间来表达它们的关系,是这样:



<?php


    
[3]LotusPhp学习二:Logger组件的使用
    来源:    发布时间: 2013-11-07

今天比较忙,本来想写多点内容,暂时没有办法了,捡个比较简单的组件来写下好了,往后的几章都是介绍组件。

LtLogger的使用还是比较简单的,基本代码都是在Autoloader的环境下运行的,所以我也懒的去引用神马路径,调用神马类库,知道怎么用就可以了。

$log=new LtLogger();

//自己定义log的存放路径
$log->conf('log_file' => '/log/system.log');

$log->log(date('Y-m-d').' 加上当前程序名,操作人就是一条日志了');

挺简单的吧,如果文件本身不存在,会直接创建在指定的路径里,文件存在的话,会追加到日志里,默认每条日志以"\t"来进行分割。

本文链接


    
最新技术文章:
▪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实现文件下载、支持中文文件名的示例代码...
▪php文件下载(防止中文文件名乱码)的示例代码
▪解决PHP文件下载时中文文件名乱码的问题
▪php数组去重(一维、二维数组去重)的简单示例
▪php小数点后取两位的三种实现方法
▪php Redis 队列服务的简单示例
▪PHP导出excel时数字变为科学计数的解决方法
▪PHP数组根据值获取Key的简单示例
▪php数组去重的函数代码示例
 


站内导航:


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

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

浙ICP备11055608号-3