84669 person learning
152542 person learning
20005 person learning
5487 person learning
7821 person learning
359900 person learning
3350 person learning
180660 person learning
48569 person learning
18603 person learning
40936 person learning
1549 person learning
1183 person learning
32909 person learning
在设计模式,代码规范,技巧等方面,有没有一些短小而精悍的代码可供学习?
平时比较忙,github上大量优秀的项目我也不能一一比对去看,去研究。所以想去看下优秀且短小的代码,用零碎的时间。
认证0级讲师
从哪个页面来,返回就到那个页面去。用到str_replace函数。
define(SINA_LOGIN_URL,'http://weibosina/'); define(TX_LOGIN)URL,'http://weibotx/'); $referer_from =str_replace(array(SINA_LOGIN_URL,TX_LOGIN_URL), '', $_SERVER['HTTP_REFERER']); $S->assign('return_back',$referer_from); $_SERVER[‘HTTP_REFERER’]表示从哪个页面跳转过来的。 str_replace在这里替换成具体的那个页面比如:http://weibosina/login.php这个页面跳转走的。那么$referer_from = login.php了。
获取浏览器类型
通过$_SERVER[“HTTP_USER_AGENT”]来识别: public function index() { $browser = 'other'; if(strpos($_SERVER["HTTP_USER_AGENT"], "TheWorld") || strpos($_SERVER["HTTP_USER_AGENT"], "QIHU THEWORLD")){ $browser = 'world'; }elseif(strpos($_SERVER["HTTP_USER_AGENT"], "Maxthon")){ $browser = 'aoyou'; }elseif(strpos($_SERVER["HTTP_USER_AGENT"], "TencentTraveler")){ // or (strpos($_SERVER["HTTP_USER_AGENT"], "Trident") AND strpos($_SERVER["HTTP_USER_AGENT"], "SLCC2")) $browser = 'telcent'; }elseif(strpos($_SERVER["HTTP_USER_AGENT"], "SE 2") AND strpos($_SERVER["HTTP_USER_AGENT"], "MetaSr")){ $browser = 'sogou'; }elseif(strpos($_SERVER["HTTP_USER_AGENT"], "360SE") AND !strpos($_SERVER["HTTP_USER_AGENT"], "TencentTraveler")){ $browser = '360'; }elseif(strpos($_SERVER["HTTP_USER_AGENT"], "QIHU 360EE") AND !strpos($_SERVER["HTTP_USER_AGENT"], "TencentTraveler")){ $browser = '360'; }elseif(strpos($_SERVER["HTTP_USER_AGENT"], "MSIE 9.0")){ $browser = 'ie9'; }elseif(strpos($_SERVER["HTTP_USER_AGENT"], "MSIE 8.0")){ $browser = 'ie8'; }elseif(strpos($_SERVER["HTTP_USER_AGENT"], "MSIE 7.0")){ $browser = 'ie7'; }elseif(strpos($_SERVER["HTTP_USER_AGENT"], "MSIE 6.0")){ $browser = 'ie6'; }elseif(strpos($_SERVER["HTTP_USER_AGENT"], "Firefox")){ $browser = 'firefox'; }elseif(strpos($_SERVER["HTTP_USER_AGENT"], "Chrome")){ $browser = 'chrome'; }elseif(strpos($_SERVER["HTTP_USER_AGENT"], "Safari")){ $browser = 'safari'; } redirect("/start/$browser");exit; }
中英文混合截取指定长度。
有一些自己写的函数,来实现完美截取,但是比较麻烦,繁琐。如果精确度不需要太高的话那就用系统自带的mb_substr()函数好了:mb_substr('我们123a好', 0, 6,'utf-8'); //输出:我们123a'utf-8' 一定要加上去他没有把中文算成2个字符,所有的算成1个字符,这对于有中英文混合的字符串,只需要截图前6位,这样的例子来说,非常实用。
获取url后缀一个内置函数搞定:
$ext = strrchr($filename,'.');
等于与全等于==、=== 对应的是!=和!==。
没有!=== 啊,混蛋!
子frame如何跳出自身的框架,执行父框架的操作。
echo ""; die;1
用parent.xx.xx 执行。
换行符unix系列用 n
windows系列用 rnmac用 rPHP中可以用PHP_EOL来替代,以提高代码的源代码级可移植性如:
类似常用的还有DIRECTORY_SEPARATOR可以用函数get_defined_constants()来获取所有PHP常量
define 一个常量
define(ROOT,direname(_FILE__)); echo ROOT; 上面输出的确可以输出ROOT的值,但是也会有一个警告: Use of undefined constant ROOT - assumed 'ROOT' 所以,定义常量时,一定要加个引号。 define('ROOT',direname(_FILE__)); echo ROOT;
数组装换成带引号的字符串
$row = array('ayi','太原','hello',78); $b = "'".implode( "','", $row ) . "'"; var_dump($b); // "'ayi','太原','hello','78'"
PHP返回404
header('HTTP/1.1 404 Not Found'); header("status: 404 Not Found");
PHP面向对象和面向过程区别面向过程 和 面向对象 只是思维方式的差异,与语言无关
从软件工程学上看面向过程 自顶向下分析,自底向上编程面向对象 自顶向下分析,自顶向下编程因此面向过程 必须清晰的了解项目的每一个细节后才可动手面向对象 可在粗略了解项目时就可动手,在实现过程中逐步细化现在的人都很浮躁,不愿意沉下心来做艰苦细致的调差分析工作。这就是 oop 备受推崇的主要原因之一
xml转换成json
$xml_obj = simplexml_load_string($xml_info); $json = json_encode($xml_obj);
分页传统的分页,我们都是先select count(*) 求出总共有多少,再用LIMIT 0,20 来求出这一页有多少。
$sql = "SELECT SQL_CALC_FOUND_ROWS * FROM user WHERE username = 'yangyi' LIMIT {$start},{$limit}"; $list = $this->db->fetchAll($sql); $total = $this->db->fetchOne('SELECT FOUND_ROWS()'); return array('list' => $list, 'total' => $total); 用到了 SELECT SQL_CALC_FOUND_ROWS * FROM 和SELECT FOUND_ROWS()来联合求出。
14.去除换行PHP在不同的系统中,换行是不同的
Linux:\n Windows:\r\n mac:\r 所以去除回车换行的方法: 1.使用str_replace 来替换换行 $str= str_replace(array("\r\n", "\r", "\n"), "", $str); 2.使用php定义好的变量(比较好的方法) $str= str_replace(PHP_EOL, '', $str);
15 . smarty 里面直接使用 php的内置函数
$start_time = ‘2015-05-23 23:01:23’; 变成 ‘2015年05月23日 23:01’ {=$start_time|strtotime|date_format:"%Y年%m月%d日 %H:%M"=} $score = ‘3:5’ 。分别获取 3 和 5 {=$score|substr:0:1=} {=$score|substr:2:1=}
用php内置函数完成二维数组排序用到的函数是array_multisort() 专门给多纬数组排序。
它的官方介绍文档array_multisort直接例子:
$data[0] = array(‘volume' => 67, ‘edition' => 2); $data[1] = array(‘volume' => 86, ‘edition' => 1); $data[2] = array(‘volume' => 85, ‘edition' => 6); $data[3] = array(‘volume' => 98, ‘edition' => 2); $data[4] = array(‘volume' => 86, ‘edition' => 6); $data[5] = array(‘volume' => 67, ‘edition' => 7); 上面是一个简单的二维数组,如果我想按照里面的volume字段排序: 根据文档介绍,先得把这个需要排序的字段数组给初始化出来: foreach ($data as $key => $row) { $volume[$key] = $row['volume']; $edition[$key] = $row['edition']; } 然后按照这个字段数组排序: array_multisort($volume, SORT_ASC, $data); //直接影响$data的值。 也可以有按照多个值排序,先按照volume倒序排序,如果相同的,再按照edition正序排: array_multisort($volume, SORT_DESC, $edition, SORT_ASC, $data); 最后得到的$data值就是排序好的值了。 volume | edition ——-+——– 98 | 2 86 | 1 86 | 6 85 | 6 67 | 2 67 | 7
17 . 在一个数组中的指定位置插入一个元素,其他元素往后移。用到的是php的内置函数:array_slice。这个函数的作用是分割数组。官方用法它一般有2个用法:
$b = array_slice($a, 0, 3); //表示从0个开始取出3个元素。返回值$b也是一个数组
上面是我们平时用的最多的用法,用分割数组。如果你再加一个字段,就可以分割并且再拼接了,就是我要用到的://在数组$a的第n个元素的位置上插入$p,原来的第n位以以后往后移。//$p如果是个数组就是支持2维数组了。
array_splice($a, $n-1, 0, $p);
加入这个参数的意思是,用$p 去替换掉被移除的,但是,我们的长度是0,没有别移除,然后又拼接上去了。算是奇淫技巧吧。而且也直接更改了$a 的值。
删建:引用
if(file_exists("file.htm"))// 检查是否存在此文件 if(file_exists("chat"))//检查是否存在此文件夹 rename('index.php','index'); //将index.php 改名为 index fopen("name.php","a+"); //建立文件 mkdir("boot","0777"); //建立文件夹且设置属性为777 rmdir ("include");//删除文件夹 unlink("index.php");//删除文件
数据库的查询:引用
$db = new db_query; $db->connect(); $db->query("DROP DATABASE $DbName;");//$dbname 为数据库名
连接:引用
header("location:index.php");//转到网页 echo "第二步:请选择是否删除所有文件[聊天室]";//写出代码 unset($tmp); //清除原有缓存 require("global.php");//缓存 print <<< eot //写出代码 eot;
可以看看当下流行的php框架源码,特别是laravel,写的很友好,注释很清楚。
你这是分享笔记么?
这是个很好的需求,我也希望能由一个提供这种需求的平台,但现实是残酷的。
这里建议可以读一些微框架比如slim也可以针对性的阅读大框架中某个独立单元模块,比如active record。
大框架代码量很大,但是如果针对单一模块来说,代码量还是很小的,而且能满足你的阅读需求
从哪个页面来,返回就到那个页面去。用到str_replace函数。
获取浏览器类型
中英文混合截取指定长度。
有一些自己写的函数,来实现完美截取,但是比较麻烦,繁琐。
如果精确度不需要太高的话那就用系统自带的mb_substr()函数好了:
mb_substr('我们123a好', 0, 6,'utf-8'); //输出:我们123a
'utf-8' 一定要加上去
他没有把中文算成2个字符,所有的算成1个字符,这对于有中英文混合的字符串,只需要截图前6位,这样的例子来说,非常实用。
获取url后缀
一个内置函数搞定:
等于与全等于
==、=== 对应的是!=和!==。
没有!=== 啊,混蛋!
子frame如何跳出自身的框架,执行父框架的操作。
用parent.xx.xx 执行。
换行符
unix系列用 n
windows系列用 rn
mac用 r
PHP中可以用PHP_EOL来替代,以提高代码的源代码级可移植性
如:
类似常用的还有
DIRECTORY_SEPARATOR
可以用函数get_defined_constants()来获取所有PHP常量
define 一个常量
数组装换成带引号的字符串
PHP返回404
PHP面向对象和面向过程区别
面向过程 和 面向对象 只是思维方式的差异,与语言无关
从软件工程学上看
面向过程 自顶向下分析,自底向上编程
面向对象 自顶向下分析,自顶向下编程
因此
面向过程 必须清晰的了解项目的每一个细节后才可动手
面向对象 可在粗略了解项目时就可动手,在实现过程中逐步细化
现在的人都很浮躁,不愿意沉下心来做艰苦细致的调差分析工作。这就是 oop 备受推崇的主要原因之一
xml转换成json
分页
传统的分页,我们都是先select count(*) 求出总共有多少,再用LIMIT 0,20 来求出这一页有多少。
14.去除换行
PHP在不同的系统中,换行是不同的
15 . smarty 里面直接使用 php的内置函数
用php内置函数完成二维数组排序
用到的函数是array_multisort() 专门给多纬数组排序。
它的官方介绍文档array_multisort
直接例子:
17 . 在一个数组中的指定位置插入一个元素,其他元素往后移。
用到的是php的内置函数:array_slice。这个函数的作用是分割数组。
官方用法
它一般有2个用法:
上面是我们平时用的最多的用法,用分割数组。
如果你再加一个字段,就可以分割并且再拼接了,就是我要用到的:
//在数组$a的第n个元素的位置上插入$p,原来的第n位以以后往后移。
//$p如果是个数组就是支持2维数组了。
加入这个参数的意思是,用$p 去替换掉被移除的,但是,我们的长度是0,没有别移除,然后又拼接上去了。算是奇淫技巧吧。而且也直接更改了$a 的值。
删建:
引用
数据库的查询:
引用
连接:
引用
可以看看当下流行的php框架源码,特别是laravel,写的很友好,注释很清楚。
你这是分享笔记么?
这是个很好的需求,我也希望能由一个提供这种需求的平台,但现实是残酷的。
这里建议可以读一些微框架比如slim
也可以针对性的阅读大框架中某个独立单元模块,比如active record。
大框架代码量很大,但是如果针对单一模块来说,代码量还是很小的,而且能满足你的阅读需求