PHP 7.0.0 发布了!

03 Dec 2015

The PHP development team announces the immediate availability of PHP 7.0.0. This release marks the start of the new major PHP 7 series. PHP 7.0.0 comes with a new version of the Zend Engine, numerous improvements and new features such as
  • Improved performance: PHP 7 is up to twice as fast as PHP 5.6
  • Significantly reduced memory usage
  • Abstract Syntax Tree
  • Consistent 64-bit support
  • Improved Exception hierarchy
  • Many fatal errors converted to Exceptions
  • Secure random number generator
  • Removed old and unsupported SAPIs and extensions
  • The null coalescing operator (??)
  • Return and Scalar Type Declarations
  • Anonymous Classes
  • Zero cost asserts
For source downloads of PHP 7.0.0 please visit our downloads page, Windows binaries can be found onwindows.php.net/download/. The list of changes is recorded in the ChangeLog. The migration guide is available in the PHP Manual. Please consult it for the detailed list of new features and backward incompatible changes. The inconvenience of the release lateness in several time zones is caused by the need to ensure the compatibility with the latest OpenSSL 1.0.2e release. Thanks for the patience! It is not just a next major PHP version being released today. The release being introduced is an outcome of the almost two years development journey. It is a very special accomplishment of the core team. And, it is a result of incredible efforts of many active community members. Indeed, it is not just a final release being brought out today, it is the rise of a new PHP generation with an enormous potential. Congratulations everyone to this spectacular day for the PHP world! Grateful thanks to all the contributors and supporters!
]]>

创业剧本

< ![CDATA[

作者:Sam Altman · 插图:Gregory Koberger

我们花了很多时间在为创业团队提供建议。尽管一对一的建议会一直很重要,但是我们认为对广泛建议进行提炼,并提供给 YC 和 YC 旗下公司会有助于 YC 的成长。所以我们觉得我们需要把这些都公开给大家。
本剧本适合且只适合刚来到创业世界的人阅读。本剧本大部分内容对于已阅读过我们的合伙人所写的东西的人来说已不新鲜 — 本剧本的目的就是将内容做成合集。关于如何规模化一家创业公司的说明或许会有第二部分 — 但本剧本已基本覆盖了创业起步的部分。
作为一家创业公司,你的目标就是做一些用户喜欢的东西。如果你要做的话,接下来你还需要考虑如何得到更多用户。但是这第一部分是非常关键的 — 思考下今天非常成功的公司吧。他们都开始于一个非常受用户欢迎且用户自愿为其宣传的产品。如果你在这个部分失败了,你就永远失败了。如果你欺骗你自己,认为你的用户喜欢你的产品但实际上他们不喜欢,你仍然会失败。
创业公司坟墓里充斥着这类自认为他们可以跳过此步的人。
打造一个受一小群用户热爱的产品会比打造一个受很多用户喜欢(请注意”喜欢”与”热爱”的区别)的产品更好。尽管”一小群热爱”和”一大群喜欢”看起来的积极感觉一样多,但比起后者需要将用户从”喜欢”转化为”热爱”,前者获取更多用户会很简单。
如果要用一个词汇来警告一个准备创业的人:(你的产品)弱爆了!我们从 YC 创业者中收集到的最一致的一条反馈是,创业是他们无法想象的难,因为他们没有一个针对此工作和启动强度的框架。加入一家正在火箭飞船轨道上高速发展的创业公司是更为明智的选择。
在另一方面,实际上创建一个创业公司并不会对你的职业生涯产生很多威胁 — 如果你非常善于技术的话,失败了还会找到工作。大部分人非常不善于评估风险。我个人认为更为危险的是你有一个自己非常热衷的想法和产品,但你仍然待在一个安全,舒适,不过瘾的工作岗位上。
为了创业成功,你需要有:一个好想法(包括一个好市场),一个好团队,一个好产品,和强大的执行。

继续阅读“创业剧本”

PHP 开发者的 Docker 之旅

PHP 开发者的 Docker 之旅 用 PHP 作为我们「Docker 开发大礼包」开篇是带着一些朝圣的心情的。这是一门堪称「古老」的语言,这也是一门争议最多的语言,这更是一门不断涅槃的语言。「PHP 是最好的语言」这个流传已久的梗,或许正是对我国最有群众基础的编程语言描述里,最经典的注解。 就让我们一起回顾一下 PHP 的发展历程作为此系列文章的开篇。历史是最好的老师,他给每个未来提供启示。 谁创造了 PHP? Rasmus Lerdorf 在 1994 年创造了 PHP,Andi Gutmans 和 Zeev Suraski 之后于 1997 年重写了 PHP 的解析器,之后他们在以色列成立了著名的 Zend 公司来维护 PHP 的开发。 PHP 是什么的缩写? 起先的意思直白的有点近乎粗鲁「Personal Home Page」,后来改成了「PHP: Hypertext Preprocessor」即便用今天的眼光看也是很酷炫的命名。 PHP 最著名的版本? PHP 5 发布于 2004 年 7 月 13 日,距今正好第十一个年头。 下一个 PHP 版本? PHP 7 计划于 2015 年 11 月 12 日发布。 PHP 的形象代言人? 一只蓝色的大象,因为「elePHPant」(黄色的那头是 Hadoop)。 谁在主导 PHP 的方向? PHP Group 来维护其标准,Zend 作为商业公司提供参考实现。 HHVM 又是什么? HipHop Virtual Machine (HHVM) 是 Facebook 对 PHP 的一次革命性衍进,HHVM 采用实时编译进程,使得 PHP 的执行效率大幅提升。Facebook 在 2013 年全面采用 HHVM 运行 PHP,间接拉升了 PHP 生态的逼格,激发了整个 PHPer 群体的活力。 PHP 的包依赖怎么做? Composer PHP 的单元测试怎么做? PHPUnit 常见的 PHP 技术栈和应用场景? LAMP(Linux + Apache + MySQL + PHP)长期占据着我国互联网应用的主流架构。即便在今天,这也是电商和社区类互联网公司的主要技术栈。尤其在电商领域,说 PHP 托起半个中国的购物车都不为过。 为什么 ASP 和 JSP 都没有 PHP 受众广? 当年 FTP 比起 VPS 简直是白菜价。但这也间接养成了 PHP 开发重功能轻工程的通病,加上部署的随意性,上规模后运维虐成狗。 就这个运维问题,作者 Rasmus Lerdorf 怎么看? I’m not a real programmer. I throw together things until it works then I move on. The real programmers will say “Yeah it works but you’re leaking memory everywhere. Perhaps we should fix that.” I’ll just restart Apache every 10 requests. 翻译过来就是:「重启应该就有好运气」。 那怎么破的,能教教吗? 上 Docker! Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器几乎没有性能开销,可以很容易地在机器和数据中心中运行。最重要的是,他们不依赖于任何语言、框架包括系统。

]]>

c++:关于char型变量与字符串地址的输出

在c里面如果指针是一个基本数值型 int ,foalt ,long等,如果输出里有 cout << ptr << endl; 其中ptr是指针的名,则输出的值是指针的地址, 如果是char * (char指针) 则输出的是char指针的值。

在C++中,熟悉int和char型的变量是最基本不过的了,不过,我想,很多初学者会跟我一样,搞不懂如何输出一个char变量的地址?就举下面一个例子:
int i=97;
char c=’a’;
cout<<“line 1: i=”<<i<<“\t\t”<<“c=”<<c;
cout<<“\nline 2: &i=”<<&i<<“\t”<<“&c=”<<&c;
我想,对于line 1的输出结果是没有任何疑问的,而且,我想对于初学指针的朋友来说,你可能也会跟我一样,毫不犹豫的认为输出的会是两个地址,可是,你只答对了一半!
的确,line 2中的&i输出的是int变量i的地址,可是,当你看到运行结果的时候,你是不是应该会很惊讶:为什么&c输出的却是一个乱码?
首先,我想先介绍一下在C++中字符串的基础知识。
在C++中,字符串是以空终止符(’\0’)结尾的字符数组,通过字符串中第一个字符的指针访问字符串。也就是说,字符串的值是字符串中第一个字符的(常量)地址。如下的面3种形式表示
char *str=”string”;
char str2[]=”string2″;
char str3[]={‘s’,’t’,’r’,’i’,’n’,’g’,’3′,’\0′};
cout<<“line 3: str=”<<str<<endl;
cout<<“line 4: str2=”<<str2<<endl;
cout<<“line 5: str3=”<<str3<<endl;
运行可知,这3行的输出就是保存的字符串的值,而并非我们认为的地址。那么,我们可以联系到前面&c,其实这就是一个char *的变量,所以,输出的自然就应该是字符串的值。可是,&c保存的字符串是没有终止符的,因此输出的也就是乱码了。
最近,在读到《C++程序设计教程》(第4版)第12章的时候,我才解决了这个疑惑。实际上,任何程序员希望输出为地址的指针变量都要作一个转换,即强制char *转换成void *,那么,char型变量和字符串的地址就可以以十六机制的格式输出了,如下所示:
cout<<“line 6: static_cast<void *>(&c)=”<<static_cast<void *>(&c)<<endl;
cout<<“line 7: static_cast<void *>(str)=”<<static_cast<void *>(str)<<endl;
此时,可以看到输出的结果就是char类型变量和字符串变量的地址了。
]]>