小项目,就是那种没有商业项目特别要求(比如涉及支付、手机端、微信版)之类,由个人能一两个月内完全独立的开发完成的项目。
小到一个数学算法问题,大到一个简单的cms、论坛。都算在内。
我认为,博客就是一个很好的锻炼项目。
所以我开发了OneBlog、freelog两个基于bootstrap的现代博客。
每个TPer、每个技术人员都应该有自己的技术博客来管理知识、分享知识和交流问题。
## 真实例子
有一天,网上我看到了一个密码生成器
![document/2015-08-23/55d9d081d911e](http://box.kancloud.cn/document_2015-08-23_55d9d081d911e.png)
我在想他背后是怎么实现的呢?
他的需求是什么?我也写一个试试吧。
这个密码生成器的最终目的生成定长的随机字符串,只不过可选供生成的随机字符创的字符范围。
所以他应该有2个参数,字符串类型和长度。关键算法是随机拼长。
在我思考之下写出了这样一个函数:
~~~
/**
* 用于生成唯一密码
* @param len int 密码长度 默认8
* @param pattern string 密码字符的范围 第一个是阿拉伯数字 开关 第二个是小写字母 第三个大写字母 第四个是特殊字符 如果 都用到就是1111 至少要有一个1
*/
function randpass($len=8, $pattern='1000'){
static $seed = array(
'0123456789',
'abcdefghijklmnopqrstuvwxyz',
'ABCDEFGHIJKLMNOPQRSTUVWXYZ',
'+=-@#~,.[]()!%^*$'
);
if(!is_string($pattern) || strpos('1', $pattern) == -1 || strlen($pattern) > count($seed))
send_error('','生成随机字符串模式格式有误');//项目中报错,通用的应该是抛异常
$pattern = str_split($pattern);
$randStr = '';
foreach ($pattern as $key => $value) {
if($value == '1')
$randStr .= $seed[$key];
}
// echo $randStr;
$temppass = array_fill(0, $len, '');
if(!function_exists('getChar')){
function getChar(&$value, $key, $seed){
$value = $seed[mt_rand(0,strlen($seed)-1)];
}
}
array_walk($temppass, 'getChar', $randStr);
$temppass = implode('', $temppass);
return $temppass;
}
~~~
第一步,根据模式拼接随机母串;
第二步,用空字符串填充定长的目标数组;
第三步,遍历数组,将目标数组通过getChar随机函数进行替换值;
最后,将目标数组合并成字符串返回。
我非常同意“十万个小时定律”,要成为一个优秀的程序员,必须花足够的时间在编程上。所以适当的小项目和私活是必要的。
- 序
- 前言
- 内容简介
- 目录
- 基础知识
- 起步
- 控制器
- 模型
- 模板
- 命名空间
- 进阶知识
- 路由
- 配置
- 缓存
- 权限
- 扩展
- 国际化
- 安全
- 单元测试
- 拿来主义
- 调试方法
- 调试的步骤
- 调试工具
- 显示trace信息
- 开启调试和关闭调试的区别
- netbeans+xdebug
- Socketlog
- PHP常见错误
- 小黄鸭调试法,每个程序员都要知道的
- 应用场景
- 第三方登录
- 图片处理
- 博客
- SAE
- REST实践
- Cli
- ajax分页
- barcode条形码
- excel
- 发邮件
- 汉字转全拼和首字母,支持带声调
- 中文分词
- 浏览器useragent解析
- freelog项目实战
- 需求分析
- 数据库设计
- 编码实践
- 前端实现
- rest接口
- 文章发布
- 文件上传
- 视频播放
- 音乐播放
- 图片幻灯片展示
- 注册和登录
- 个人资料更新
- 第三方登录的使用
- 后台
- 微信的开发
- 首页及个人主页
- 列表
- 归档
- 搜索
- 分页
- 总结经验
- 自我提升
- 进行小项目的锻炼
- 对现有轮子的重构和移植
- 写技术博客
- 制作视频教程
- 学习PHP的知识和新特性
- 和同行直接沟通、交流
- 学好英语,走向国际
- 如何参与
- 浏览官网和极思维还有看云
- 回答ThinkPHP新手的问题
- 尝试发现ThinkPHP的bug,告诉官方人员或者push request
- 开发能提高效率的ThinkPHP工具
- 尝试翻译官方文档
- 帮新手入门
- 创造基于ThinkPHP的产品,进行连带推广
- 展望未来
- OneThink
- ThinkPHP4
- 附录