HTML5 history API改变浏览器地址无需hash和刷新加载页面技术
现在很多网站的前端做的非常炫,点击某个链接瞬间改变浏览器的地址栏的地址,改变的方式不是使用锚点,而是直接改变 URL,页面稍后局部加载完成。如果直接复制页面地址在新的浏览器选项卡中打开则是全部加载整个页面。这样的前端技术体验,一开始让我和很多的前端工程师觉得现有的知识不可能做到。后来才了解到,在一般的比较老的浏览器中是不可能实现的,需要在 Chrome, Safari, FF4+, and IE10pp4+ 才能做到!。
最开始发现这样的效果是在 GITHUB 中,后来看到很多同行的技术博客也有使用了这样类似的技术的。我问过一个做前端的同事,问他的网站的这样的技术是怎么实现的,他告诉我说是使用锚点;我说,锚点是有“#”号的,但是我并没有看到“#”号啊;他说,那个“#”号是可以隐藏的。之前也了解过这样的技术,大概知道是 HTML5 history 相关的 API 可以实现,当他告诉我使用隐藏锚点时,我顿时感觉很奇怪,于是才写了这篇文章。
PHP数组式访问接口ArrayAccess技术
ArrayAccess 提供像访问数组一样访问对象的能力的接口。看 Web Artisan Laravel 框架的 Illuminate\Container 就实现了 ArrayAccess 接口,这样就可以像操作数组的方式一样来操作对象。这样的语言预定义接口功能很少人知道,即使不知道也不会影响一个程序员的开发和设计。PHP 的设计者们不直接实现这样的接口就是让程序员有更强的能力创造新的行为的对象。
实现了 ArrayAccess 的类需要实现四个抽象方法,分别是 offsetExists, offsetGet, offsetSet, offsetUnset 。当使用 isset($obj['index']), $obj['index'], $obj['index'] = $value, unset($obj['index']) 时,会分别触发这些方法。接口摘要如下:
VPS Reload OS后SSH连接报错解决技术
VPS reload OS 后 ssh 连接报错如下:
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY! Someone could be eavesdropping on you right now (man-in-the-middle attack)! It is also possible that a host key has just been changed. The fingerprint for the RSA key sent by the remote host is e8:ec:d0:51:08:4a:46:7e:69:1f:41:75:41:9d:dc:99. Please contact your system administrator. Add correct host key in /Users/maybeyes/.ssh/known_hosts to get rid of this message. Offending RSA key in /Users/maybeyes/.ssh/known_hosts:6 RSA host key for 107.155.89.225 has changed and you have requested strict checking. Host key verification failed.
PHP低级错误:Function name must be a string技术
印象中,对 PHP 的这种错误很少遇到,可是一旦遇到,一下子还找不出问题所在。
当一个人在开发的过程中很疲惫的时候,低级错误犯了,眼睛看着屏幕,不知所以然,于是全网寻找答案。下面的代码会出现 PHP Error:Function name must be a string。
<?php $_GET('name'); $_POST('name'); $_COOKIE('name'); ?>
函数名方法名必须是一个字符串,这样的报错提示很容易给人误导,PHP 5.3 开始支持匿名函数,变量一样可以当作函数来使用。
Laravel框架illuminate\support\collection排序问题技术
Laravel 的 Collection 的排序有个问题,前几天折腾了好久,一直怀疑是自己代码有问题。Collection 对象执行 sort 后需要执行 values 方法,否则 Collection 对象的 items 排序结果没有生效。当然手动的 toArray() 是生效的。查看 Collection sort 方法内部实现是调用了 PHP 的 uasort 函数,该函数排序后会维持原来的 key => value 关系。
官方文档截取如下:
Collection values() Reset the keys on the underlying array. Return Value Collection