FluentInterface
最近时不时的会去学习下设计模式,在DesignPatternsPHP学习中,发现一个特别喜欢的设计模式————FluentInterface,我找不到它的翻译。我个人把它理解为连贯操作/级联操作。在实际中,我发现ThinkPHP和Typecho中均使用了这种模式,并且都在数据库操作类使用这种模式进行连贯操作。于是我用这个模式编写了一个计算器类Calculator,代码如下:
最近时不时的会去学习下设计模式,在DesignPatternsPHP学习中,发现一个特别喜欢的设计模式————FluentInterface,我找不到它的翻译。我个人把它理解为连贯操作/级联操作。在实际中,我发现ThinkPHP和Typecho中均使用了这种模式,并且都在数据库操作类使用这种模式进行连贯操作。于是我用这个模式编写了一个计算器类Calculator,代码如下:
class Util
{
/**
* 获取多列的数组
*
* @access protected
* @param array $array 待处理数组
* @param array $key 期望键索引
* @param boolean $strict 是否严格(每个数组满足所有键索引存在)
* @return array 结果集
*/
protected function _arrayColumns(array $array, array $key, $strict = false)
{
$result = array();
foreach ($array as $val) {
$temp = array();
foreach ($key as $value) {
if (array_key_exists($value, $val)) {
$temp[$value] = $val[$value];
}
}
if (!$strict || ($strict && count($temp) == count($key))) {
$result[] = $temp;
}
}
return $result;
}
/**
* 获取给定索引的数组
*
* @access public
* @static
* @param array $array 待处理数组
* @param mixed $key 期望键索引
* @param boolean $strict 是否严格(每个数组满足所有键索引存在),仅对多列生效
* @return array 结果集
*/
public static function arrayColumn(array $array, $key, $strict = false)
{
//多列数组,多列处理
if (is_array($key) && count($key) > 1) {
return $this->_arrayColumns($array, $key, $strict);
}
$key = is_array($key) ? $key[0] : $key;
if (function_exists('array_column')) {
return array_column($array, key);
}
$result = array();
foreach ($array as $val) {
if (array_key_exists($key, $val)) {
$result[] = $val[$key];
}
}
return $result;
}
}
需求决定了我的改造
假如你有其他需求或者更好的建议,请不要吝啬,联系我
在工作中,遇到二维数组排序的问题,然后我自己手撸,结果发现怎么调试都出错,更何况效率的问题。最后在别人的帮助下,找到了过往使用的工具方法,因此就去翻看array_multisoort()函数说明,同时发现,公司曾经的封装略显不足,因此我运用之前封装的_array_column函数,成功为二维数组排序,代码如下:
一直以为自己HTTP协议已经挺熟了,结果发现,事与愿违,我还是太年轻。Etag,不知道;expires知道,但不知道结合服务器的妙用。在此趴下一篇深入理解HTTP协议(http://www.blogjava.net/zjusuyong/articles/304788.html)以表警示,以后常温习。
上周在实习中,我得到了一个任务,而这个任务需要解析数据同时文件中的只存在时间,而无日期,日期则被保存在文件名中,例如:server20141210,于是我想到了intval(),但是经过实验发现,输出0。
这让人很纳闷,intval()函数不是从字符串中取出数值吗?于是翻看PHP官方文档,在Return Values中看到:Strings will most likely return 0 although this depends on the leftmost characters of the string,这告诉字符串中必须左边第一个字符为数值才能被转换为整型数,因此达不到我需要的目的。