一点想法和抱怨

突然想起当年学历史的时候,降到货币的来源,剩余财产。

为什么会想到这个呢?现如今的工作中,有各种冗杂的事务要去做,让我对我的工作极其的消极。本身写代码不仅要在公司加班,还要电脑带回家继续在家里加班(这些当然都是没有公司相应回报的),根本没有剩余时间,让我如何去做好其余的类似code review,写这种那种流程,文档?如同没有剩余财产,当然也不会产生交易,产生货币,产生GDP,除非是虚拟的,map到我们的工作,这个虚拟,就是我们的应付态度了。

为什么2013年是PHP之年[原创翻译]

2012年是PHP社区杰出的一年,由于一些迫切需要的功能加入到了5.4版本,而且还有无数的项目,使得PHP达到了新的高度。
在这篇文章里,我将和大家重温下过去人们对PHP的大量疑问,同时一窥为什么我说2013是PHP之年。

敌意
这可能令你惊讶,但是许多人对php开发者有偏见,当然对php语言本身也一样。你应该知道我的意思,如果你在过去的几年里由于来自别人的压力考虑过学习ruby。
“可是,在你改变主意是,你应该扪心自问:为什么PHP有这么多的污点?”
好吧,就想很多生活中的重要问题,这没有一个十分明确的答案。在网上搜索过一些关于php的意见之后,你会发现大概有80%的关于反对php的意见都是来自于他们的根深蒂固的无知,不管以什么样的形式的表达。

初学者
有这样的初学者,他们并没有真正了解的运行原理。这导致了问题出现,就像:为什么你不能利用php监听按钮的事件?包括一些相似的关于AJAX的问题。

一种语言统治了一群人
下面,看看这样一群人,他们除了自己用的不知道其他的语言或者框架。这就是对php产生意见的某些人,比如坚持说rails比php简单多了的哪些人等等。

还在php4里面挣扎的人
第三种误解来自那些没有跟着php的发展与时俱进的一群人。相反,他们仍然还在古老的语言里面纠结,尽管它已经是很多年前的语言了。这导致了一些论调,比如:php不是面向对象的,或者:php真垃圾,不支持命名空间。哈哈,你懂我的意思。

规模
还有,有很多的天才开发者,他们坚持认为php不能形成规模,或者php没有标准等等。当然,这些是完全错误的。规模和语言本身没什么关系,和服务关系更大,当然还有你的应用的架构。至于标准,哈哈,你去google一下PHP-FIG.
——————————————————————————————————————————–
小贴士:
什么是PHP-FIG?
这个组织旨在为了项目成员来讨论我们项目之间的共性,还有找到我们写作的方法。我们的主要受众就是我们自己,但是我们也意识到剩下的PHP社区正在观望,如果其他人愿意把我们现在在做的移植过去,这是很受欢迎的,但是这不是目的。
——————————————————————————————————————————–

不幸的事实就是,弥漫在互联网的这些对php的意见基本都是错的,或者是过时的
PHP不完美
不过,在这些批评里面也有一些是事实。PHP确实不是完美的。有一些核心特性和方法的实现是不合理的,这些意见是完全正确的。
尽管这些不合理之处并不是毫无缘由的。我们今天所说的php源自一种模板语言。自从那时候起,他演变成过各种各样的形式,转变成一门实用的语言,然后又进化成我们现在在用的完全面向对象的语言。在这演变历史中,有很多优秀的项目浮现过,也有越来越多点人掌握了新加入的东西。这却导致了一门语言中各种不同‘风格’的代码。现在你可能会疑问,为什么不可以去反对这么语言中这些并不好的部分。
这个问题的答案就想为什么我们仍然在做网站的时候兼容老版本的IE浏览器一样。不要误会我的意思,我也很想去放弃它,但是很多这种重大的改动不是一蹴而就的。希望随着时间的变化,PHP能进一步的推动面向对象编程,形式上来讲,可以用点号操作符来替代他的对象的函数用法,并不仅仅是可以接受的‘->’操作符的使用。比如。作为‘array_push($arr, “Value”)’的替代形式可以是这样的‘$arr.push(“value”)’
别着急,这种事情都是发展的很慢的看看PHP5.5的特性。老式的面向函数的MYSQL操作已经被摒弃了,这有利于更新的面向对象的实现。

当前形势
说完了过去,我们来说说现在。有一些相当酷的项目,有一些汲取了别的语言的优点,来推动PHP达到更高的水平。让我们来看看这些:
1.Composer(PHP包管理器)
2.Laravel框架
3.测试驱动的开发
4.PHP5.4/5.5

Composer
受到一些工具的启发,比如打包机和网络打印机管理器,PHP社区现在已经有了防止重造轮子的方法,向Composer致敬。Node.js 是第一种我用packages比较舒适的语言,如果你以前用过它,你就知道我指的是什么。Packages是转载你本地的项目目录,对大多数插件来讲,很容易找到文档,这也是的你提交自己的packages时相对比较简单。
PEAR?
PHP很多年来一直给用户提供一个大型库的选择,那就是PEAER,但它并不是想象中的那么好用。如果我只是要去获取一些纯文本文件,会感觉它非常之笨重。而且,你必须要全局地安装它所有的包。这就使得你在你发布项目源码的时候必须去通知所有人那些包你用了,这会导致一些版本不统一的问题,还有其他类似的问题。
Composer只需要本地的包就解决了所有的此类问题。也可以去创建每个项目的独立文件。这意味着你可以很容易的去发布你的项目,只需要这写独立文件,这样其他人就可以用他们自己的Composer的拷贝去纸动画的下载所有具体的单独文件,同时使他们保持更新。
还有一点,Composer是用PHP写的一款轻型应用,它本身就有一个自动加载的特性。这个没有遵循PSR-0标准(上文提到的),这项功能是只有在你需要的时候才去加载需要的文件,这样你的应用就能保持竟可能的精简。
所有的这些特性都是一定的进步,可是,没有社区的共性,这一切都是不存在的。我很高兴告诉你它是很受欢迎的。大型项目,比如Symfony和Laravel,已经将它们的组件上传到了Composer的库,这里是列表(https://packagist.org/)。将框架分解成一些组件意味着你可以很容易的创建你自己的自定义的框架来满足你的需求。从另一方面来讲,再也没有臃肿的框架束缚了。如果你想试试,你可以去选择你需要的组件了。

Laravel
现在如果不详细讨论下Laravel,那就不是一篇关于PHP特性的文章了。我们总是被问到,为什么你们总是 推崇Laravel。其实这是个不对的问题,应该说,为什么不呢?
即使你有一些关于PHP的问题,Laravel几乎将它们全抽象化了,给你的是一种语言的优雅感,像Ruby,但是是用的简易舒适的PHP。
Laravel是由Eloquent(https://packagist.org/packages/illuminate/database)发展而来的,一个完全重新设计的处理数据库的对象关系模型,你从数据库中得到的是一个资源对象,你必须通过一个成员方法来从这个资源对象获取结果。在Laravel中,所有的返回值都遵循PHP标准,你得到的对象可以修改和保存。你可以进行多表查询,得到的结果利用数据调用来保存,当然,仅仅做这些是可笑的,比如验证和自定义查询。另外,如果你不喜欢写SQL,那么这些工作都可以通过面向对象的方式来完成,用简单的可读性搞的方法,比如find和delete
我们只看到了冰山一角,但是,你已经能看到这些改进。Laravel把这种革新带到了PHP的几乎每一个领域包括,模板,路由,迁移,REST风格的类,等等。不过,最好的部分是,在每一个新的版本, Laravel的创造者Taylor Otwell,不断地在改进。
“如果你想更深入地学习下Laravel,我推荐Tuts+ Premium课程,Laravel Essentials(https://tutsplus.com/course/laravel-essentials/),讲师是我们的Jeffrey Way.我不是指的Nettuts+的成员,而是一个看这些教程的家伙。我很诚实地告诉你,我对Laravel的了解是零,但是Jeffrey在这个方面做的是尽可能的优秀”
这不是关于这个框架的文章,但是有社区的支持。一个项目只要有支持维护,它就会有不断的更新和相关的观点。如果你担心它能流行的时间不是太长,那么,只要积极地使用它,那么你就是在加强你的优势。

PHP5.4/5.5
下一件我想讨论的事情是2012年PHP发布的新版本。随着PHP5.4版本的发行,大量的新特性出现了。你可以看下这两篇文章来一窥大概5.4(http://net.tutsplus.com/tutorials/php/php-5-4-is-here-what-you-must-know/),5.5(http://net.tutsplus.com/tutorials/php/what-to-expect-from-php-5-5/)
不过,下面还是要讲讲我最喜欢的几点新特性
Traits
traits使得PHP可以创建“partials”类,这在你不需要覆写的情况下创建相同的对象.(不是太明白这个,可以参考鸟哥的文章http://www.laruence.com/2011/07/02/2097.html);
Generators
Generators可以让你通过数据列表来做一些很酷的事情,也能让你从所有特性中获益
CLI Web Server
另一项伟大的特性是内置的web服务器,通过这个你可以测试你的程序在不同版本php中的兼容性,这一切都不需要类似apache这种服务器软件的支持
Dereferencing
Dereferencing不是一个大的功能,但是它可以在不用方法的情况下来调子元素(这段不明白)。这包括了就像通过下标来引用字符串的字符一样的功能(见http://www.laruence.com/2011/07/02/2097.html)
新的密码散列API
通过这个新的API,你可以去加密字符串,验证或者加强密码,当然你不需要去了解任何的bcrypt或者别的哈希算法

这些特征只是很少一部分的新特性,还有一整个列表的特性正在为了下个版本的发布处于讨论阶段,按照日程应该在今年的晚些时候发布。

测试驱动的开发
最后,让我们讨论下测试的问题。尽管在2012年里,被接纳的有点晚了,我们的社区还是看到了测试驱动开发模式的广泛被采纳。我可以去调查下这方面增长的百分比,但是我感觉你去看看不通的开发者站点还有论坛能更好的说明这个增长。你肯定能看到一个spike!说到PHP中的测试,PHPUnit是一个很好被接受的标准
为什么测试很重要?
很多时候,你准备写代码了,但是你在实现需求的时候漏掉了很多东西。我说这些是指的你计划一件事情的时候,当你实现它的时候,容易失去大局,漏掉一些细节。另一个普遍的问题一直在增长,当给大项目写代码的时候,结束的时候,你可能写了大量的类和大量的文件他们都是不相干的。你剩下的可能是一些纠结的方法的演化,这样才能跟上进度。就像搭积木游戏,随着一块积木的增加,你可能搞倒了另一块,毁了整个项目。这只是两个例子,当然还有很多其他的。
测试驱动开发带来哪些帮助?
你在写任何产品的代码之前写好了清晰的测试样例。这意味着,当你开始写真实代码的时候,这就被限定必须遵循最开始的计划。不光这一段,是完全彻底地,所有都被你的测试所跟进。如果你更新了代码,不经意间没有通过测试,你会马上发现。
是的,实现这些测试需要额外的步骤,但是请三思后行。有任何人通过这种模式的开发获益么?当然没有。测试也是一样的,在你开始开发项目之前,多加思考,就想一个牛仔。
延伸阅读
测试驱动的开发(https://tutsplus.com/course/test-driven-php/)
PHP中的测试驱动开发(http://net.tutsplus.com/sessions/test-driven-php/)

总结
这个时代成为php开发者是令人振奋的。很多既有的问题正在或者已经被解决了,至于其他的问题,我们都可以通过框架和测试来找到解决方案
你的想法呢?你是否已经在码字?不同意我们?如果这样的话,在下面留言吧。

[本文译自netTuts+,转载请保留出处,本文固定链接http://coderaladdin.com/why-2013-is-the-year-of-php/ ‎]

mysql复合查询结果集顺序的一个问题

刚到家,@冰冻的狐狸在qq上给我留言,问这两句SQL为什么查询结果的排序不同

SELECT * FROM `pp_user_history` order by id desc;
SELECT * from (SELECT * FROM `pp_user_history` order by id desc) as hh GROUP BY hh.item_id;

我在本地用两条sql测试了下

SELECT * FROM words ORDER BY id ASC;
SELECT * FROM (SELECT * FROM `words` ORDER BY id ASC) AS hh GROUP BY hh.pinyin_s;

果然是不同的

仔细结果集发现
YJ1_21]E_LOZ6ET7`L`VRI7
通过红框圈出来的那个字段得到如下结论:

结果集排序默认按照主查询的group by字段升序排

BTW.明天年会,尼玛还有一个项目要赶着上线,哥要是不是请了将近三天假陪老娘在医院哥也搞完了啊,催个毛线!今天组里有个同事提离职了,我也和老大说了自己的想法和看法。人是需要成长的,路,也该是不断探索的,我想如果我不按照寻常路走下去,或许我是会遭受许多的挫折和磨难,但是我想也会得到更多。

在此新年之际,谢过老大一年来对我的悉心教导。谢谢!

Apache虚拟主机支持rewrite的设置

今天在用CI写东西的时候,要优化下url,结果.htaccess中rewrite无效,google了很多文章,看了很多CI中国的帖子,没一个说到虚拟主机的apche配置的,甚至社区里面的“前辈大牛”还说和apche配置无关。经过多番尝试,发现在虚拟主机中对url重写的配置需要在虚拟主机配置的前面才行,不知道我得出的这个结论是否正确,请各位访客指正。

顺便感慨下,今天也和斌哥说到的,虽然在公司里面做的产品有这么大流量,看起来是个很好的平台,但是有关服务器,有关负载均衡等方面的东西我们毫不涉及,这些都是需要我们自己平时去充实的知识。当然,写好当下自己该写好的代码是最重要的。

apache配置如下

<VirtualHost *:80>
<Directory "D:/wamp/www/CodeIgniter">
    AllowOverride All
</Directory>
ServerName loc.ci.com
DocumentRoot "D:/wamp/www/CodeIgniter"
</VirtualHost>

母亲周三又要过来这边医院检查了,希望一切都好,努力挣钱!!!

更正下,刚突然想到去看了下vps上本博客的apache virtualhost配置,发现顺序是可以不放前面的
像这样

<VirtualHost *:80>
ServerName loc.ci.com
DocumentRoot "D:/wamp/www/CodeIgniter"
<Directory "D:/wamp/www/CodeIgniter">
    AllowOverride All
</Directory>
</VirtualHost>

Directory后面的路径要写全