Jul 09
luoxi坨坨胡同儿 PHP
闭包的概念早已应用在其他某些编程语言中,而且使用的人越来越多,可见大家对函数式编程的喜爱。PHP从5.3后也开始支持闭包,此文就简单介绍一下PHP中闭包的实现。由于本人对闭包的理解和应用水平不高,所以疏漏误解之处请多多包涵并指正 
首先来看看这两个概念:Lambda和Closure,其实说它们是“两个”概念有些不合适,Lambda是Closure的基础,两者都是匿名方法,只是使用时略有不同。
引用一下网上的介绍:
Lambda函数(通常所谓的匿名函数)简单来说就是一次性函数,可以在任何时候定义,且经常赋值给一个变量。函数自身和对应变量处于同一个作用域内,当离开变量的作用域后,该函数也将消亡,Lambda不保存任何状态。
闭包(Closure)是指一个可以在自己环境中执行的函数,调用时可以访问已经绑定的变量。它们来源于函数式编程世界,在那里有非常多的应用。闭包和Lambda函数类似,但是闭包还可以和定义时指定的外部变量交互。
我们可以简单地理解为Closure可以访问父级视野(parent scope)定义的变量,而Lambda不行。
下面举个例子来说明,比如我想对某一数组的每个元素追加
阅读全文 »
May 07
luoxi坨坨胡同儿 PHP
数字转汉字,如:123 转为 一百二十三。这种需求遇到的时候不多,但,我还是遇到了
闲话不多说,直接上代码:
阅读全文 »
May 07
luoxi坨坨胡同儿 PHP, 分词
二分法是一种简单的中文分词方法,其原理就是把中文字符串按两个字进行切分,如“imdonkey的主人要发奋了”,拆分完就是“imdonkey/的主/主人/人要/要发/发奋/奋了”。当然,为了更好的被搜索引擎利用,现实项目中还会对结果进一步处理,这里就不多说了,因为作者本人目前也不懂呢。
好,闲话不多说,直接上代码:
阅读全文 »
Apr 26
luoxi坨坨胡同儿 Java, 算法
其实这是个经典算法题,但我却刚刚听说,可见对于算法,我已经漠视很久了。这不是一个专业程序员应该有的状态…… 在此推荐一篇关于
程序员能力矩阵的文章,please enjoy~
这个题目是听公司同事说起的,当时我的第一反应也是建立一个哈希表,然后循环检查元素是否已经存在于这个表中,没有就添加进去,并检查下一个,如果有就说明此链表是个环。甚至为了优化性能,可以隔几个检查一次,这样还能减少比对次数。后来google了一下,豁然开朗~
简单说来,就是设置两个指针(fast, slow),初始值都指向头,slow每次前进一步,fast每次前进二步(如果能证明其他数值性能更高,欢迎补充),如果链表存在环,则fast必定先进入环,而slow后进入环,两个指针必定相遇。(当然,fast先行头到尾部为NULL,则为无环链表)
阅读全文 »
Apr 25
luoxi坨坨胡同儿 PHP
编码过程中遇到个错误,就是在处理json时,数值较大的int值在解码后数据被损坏,比如:
$array = array(
"id1" => 2147483647,
"id2" => 2147483648
);
$json = json_encode($array);
$out = json_decode($json, true);
var_dump($out);
理论上应该看到:
array(2) {
["id1"]=>int(2147483647)
["id2"]=>int(2147483648)
}
但实际在我的电脑上却得到:
array(2) {
["id1"]=>int(2147483647)
["id2"]=>int(-2147483646)
}
这是由PHP整数值范围决定的,而这个范围依赖于操作系统。在32位操作系统中,PHP的整数最大值是2147483647,你可以通过输出PHP_INT_MAX看到。
一般情况下
阅读全文 »
Mar 28
luoxi坨坨胡同儿 PHP
做web开发,必然会涉及到Session,这是由于http协议本身是无状态的(每次响应都是独立的,彼此间没有联系),所以如果需要在页面跳转间保持某个用户的身份,就要在每次连接时告诉服务器端你的唯一标示号,即Session ID。这样,服务器端便可通过Session ID得到所需的数据。
在PHP中,Session是通过$_SESSION这个全局变量来set/get的,不过在使用之前要先初始化。初始化是通过session_start函数(如果php.ini中将session.auto_start设为1,则会自动初始化),之后PHP会为request自动生成一个唯一随机数作为Session ID,生成算法默认提供了MD5 (128 bits) 和SHA-1 (160 bits),由php.ini中session.hash_function设定。其实也可以自定义,比如在随机数基础上将来访者的IP地址也加入到算法中
阅读全文 »
Jan 31
luoxi坨坨胡同儿 CodeIgniter, PHP
此文主要是提出一种让CodeIgniter自动加载所有自定义类的办法,即lazyloading。(只适用于没有带参数的构造函数的类)
先举个例子,如果我在一个controller中想调用某自定义的library,一般来讲需要两步:
1. $this->load->library(“mylib”);
2. $this->mylib->myfunction();
虽然第一步不是每次都要调用,但至少要在使用前初始化一次。当需要的library比较多时,假如再加上需要的model类,那就有点烦人了。所以,我们要做的就是去掉第一步,不管在controller,library还是model中,让codeigniter自动load需要的类,这样我们就能更专注于业务逻辑,而不用考虑载入的问题。
阅读全文 »
Dec 30
luoxi坨坨胡同儿 Amazon, Java, SOAP, WebService
Amazon目前已提供了N多服务,这里只涉及其中的Product Advertising API。通过它,你可以访问Amazon的数据库,实现很多有用的功能,如:获取商品信息、买家/卖家的评论、还可以搜索物品、促销信息等,这些数据有助于建立你自己的电子商务网站。
下面简单讲述一下用Java语言访问Product Advertising API,并写了两个搜索物品和浏览目录的例子。
相关链接:
Product Advertising API
amazon-product-advertising-api-sample
阅读全文 »
Dec 14
luoxi坨坨胡同儿 Linux, PHP
这里介绍的方法是经过试验可行的(虽然后来遇到了其他问题,见文章下面),在此感谢原作者的贡献!
原文地址:http://voae.com/enable-php-imagerotate-gd
……
发现问题:Apache有时会莫名kill掉进程,查看log有类似“child pid *** exit signal Segmentation fault”的错误,重启Apache后正常,但过儿又会异常依旧…
这种情况虽然偶尔出现,但却是不可忽视的隐患。经google,感觉似乎是由于PHP升级后,和模块间兼容性的bug。
所以迫不得已,只能rollback回之前的PHP版本,然后用Debian Etch libapache2-mod-php5 with bundled libgd (GDLib)一文中提到的方法,并实践成功!这个办法虽然麻烦些,但对系统影响最小,首推这个。
阅读全文 »
Recent Comments