首页  >  文章  >  后端开发  >  [PHP] 浅谈PHP之美

[PHP] 浅谈PHP之美

WBOY
WBOY原创
2016-06-23 13:39:211185浏览

[PHP] 浅谈PHP之美


另载,http://blog.1988de.com/?p=1018

------------------------------------------
语言排行 2012年
1 C         1972
2 java         1995
3 Object-C     1986
4 C++         1983
5 PHP         1994
6 C#         2000
8 Python     1989
9 Perl      1987

大家都知道,Facebook、淘宝早期都是用PHP写的,在中国,PHP在百度、新浪、腾讯这三大互联网公司中应用比较多。
据了解,就中国的互联网巨头公司,基本都会使用PHP语言,就连主要使用JAVA的淘宝、支付宝等公司也会用到PHP。
(这些只从他们对PHP的招聘计划中就能看出来)

C诞生于1972的贝尔实验室,java诞生于1995年SUN公司。
1994年,PHP是由Rasmus Lerdorf开始用perl写的一个网站维护和流量统计小工具。
1995年,用C重写,并发布了PHP1.0.
1997年,以色列两哥Zeev Suraski 和 Andi Gutmans重写了PHP编译器,并在1998年发布了PHP3。
2000年,以Zend Engine 1.0内核为基础的PHP 4发布。此之前PHP只是面向过程的。
2004年,PHP 5发布了,从此PHP迈向面向对象行列,这时PHP也在中国得到了空前的发展。
2013年,PHP最新版本5.5.7,我们线上使用的是5.3.25。支持命名空间、新的垃圾回收机制、内置php-fpm等特性。
2014年10月16日,鼓励用户升级到这个版本PHP 5.6.
2014年,PHP7的开发提上议程,号称将要打破一切。


PHP目前是由Zend公司支持,由社区主导开发的语言,相比java目前落户于oracle,还是有点草根的。
但是,近几年PHP引入面向对象后的发展还是很可观的。

PHP能在web开发中的占据一席之地,必有其原因

1、进入门槛低,上手快(但是任何程序开发的深入,都需要涉及到一定计算机和软件工程等专业知识体系的基础)
2、开发、部署、调试非常方便快速(这也是很多大型互联网公司会使用PHP的原因之一)
3、非常适合中小型Web网站开发(换句话说,非常适合创业公司)
4、大型web系统的粘合剂
5、适合基于web的linux系统管理

PHP(PHP: Hypertext Preprocessor的缩写,中文名:“PHP:超文本预处理器”)(具体介绍参加维基百科)

PHP之美,她到底美在何处:

1、语法简单灵活


    每一种编程语言,都是基于某个特定环境为了解决某一类问题而诞生的。
    就如人类语言的诞生,是某个孤立的群体,为了个体间的有效沟通,而形成的特定语言。
    而编程语言是人与计算机,计算机与计算机之间为了更有效的沟通,而形成的特定语言。

    所以,在理论上,其他编程语言能做的事,PHP也都可以实现,但PHP的强项,就是WEB开发。
    (因为PHP是在互联网浪潮到来时专为WEB开发所诞生的)

    PHP的流行,其简单易学的语法功不可没,换句话说,学习PHP门槛低,上手快。
    这也促使大量其他行业人员选择PHP尝试进入IT行业,还有其他语言开发者选择转入PHP开发等。
    像百度这些大型互联网企业,每年都会录取大量科班出身的C或java的开发者,从0开始培训PHP。
    
    PHP 语法的实现,其实是基于C,并混合了Java、Perl 以及 PHP 自创新的部分语法等。
    说白了,PHP其实就是集编译、执行为一体的用C实现的“大型程序软件”。
    其简单灵活的语法规则,使得PHP在开发、部署、调试非常便捷,这是PHP最大的优势。

    毫不夸张的说,PHP可以做到随写、随测、随时上线,这种特性是静态编译语言所无法替代的。


2、无所不能的数组

    PHP 中的数组实际上是一个有序映射。映射是一种把 values 关联到 keys 的类型。
    PHP的数组包括索引数组和关联数组,
    所以,完全可以把它当成真正的数组,或列表(向量),散列表(是映射的一种实现),字典,集合,栈,队列以及更多可能性。
    其中,key 可以是 integer 或者 string。value 可以是任意类型。这里的key会有强制转换。(参见手册)
  下面列了两个例子:    <?php $arr = array();    $arr['$usd'] = '$usd';    $arr['0.5'] = '0.5';    $arr['-1'] = '-1';    $arr['//'] = '//';    $arr['%%'] = '%%';    $arr['??'] = '??';    $arr['**'] = '**';    $arr['呵呵'] = '呵呵';    $arr[8.7] = 8.7; // array(8=>8.7)    print_r($arr);    ?>    <?php function getArray() {        return array(1, 2, 3);    }    // on PHP 5.4    $secondElement = getArray()[1];    // previously    $tmp = getArray();    $secondElement = $tmp[1];    // or    list(, $secondElement) = getArray();    ?>


    此外,PHP提供了非常丰富的数组相关操作函数,包括拆分、合并、追加、查找、删除、排序等等。

3、弱类型

    参见:http://www.laruence.com/2008/08/22/412.html
    弱类型,就是说PHP并不严格验证变量类型,在申明一个变量的时候,并不需要显示指明它保存的数据的类型:
 <?php $var = 1; //int    $var = "laruence"; //string    $var = 1.0002; //float    $var = array(); // array    $var = new StdClass; //object;    ?>
    当然,对于PHP的弱类型,有其优势,也有其劣势,这里我们只说它的优势:

    PHP的数据类型有3类8种:
    整型int、浮点型double/float、boolean、字符型string(标量)
    索引数组/关联数组、对象(复合)
    资源、NULL(特殊)

    弱类型最大的优势,就是开发者不用去关心变量类型,只要知道该变量目前的值是否是自己当前需要的就够了。
如,当有程序返回值时,我们的判断可以这样:    <?php if ($return) { //我们这样就可以判断是否有返回值了        echo 'OK!';    }    ?>    如,值的比较:    <?php if ($test == 1) { //$test 可以为TRUE、整数1、浮点1.0、字符‘1’    }    ?>
在PHP中,所有的变量都是用一个结构-zval来保存的, 在Zend/zend.h中我们可以看到zval的定义:    typedef struct _zval_struct {        zvalue_value value;        zend_uint refcount;        zend_uchar type;        zend_uchar is_ref;    } zval;    其中zvalue_value是真正保存数据的关键部分,现在到了揭晓谜底的时候了,PHP是如何在ZE的基础上实现弱类型的呢? 因为zvalue_value是个联合体(union),    typedef union _zvalue_value {        long lval;        double dval;        struct {            char *val;            int len;        } str;        HashTable *ht;        zend_object_value obj;    } zvalue_value;
    借用这样的机制,PHP就实现了弱类型,因为对于ZE的来说,它所面对的永远都是同一种类型,那就是zval。

4、函数库
    
    使用过PHP的童鞋应该知道,PHP拥有大量的系统内置函数。还有,应该尽可能的使用内置函数,效率高。
  <?php function myrow($id, $data)    {        return "<tr><th>$id</th><td>$data</td>\n";    }    $arr = get_defined_functions();    print_r($arr);    ?>
5、扩展

    目前PHP的第三方包管理工具,如pecl、pear、composer等,包括了很多优秀的类包和扩展。
    也就是说,我们很多功能模块,可以直接采用现有的类包了,因为它们很多的确很优秀。

    PECL是PHP扩展库,提供了所有已知的扩展和托管设施的目录,下载和PHP扩展的开发。
    PEAR - PHP扩展和应用库
    Composer PHP的包的依赖管理程序

    除了以上这些,PHP的ZE内核对外提供了扩展接口,也就是说,我们完全可以写C扩展,并动态加载到PHP中使用。
    这样,可以提高一定的性能。
    Yaf框架,就是基于这种特性开发的。

6、LAMP关键词

    众所周知,LAMP,这个web开发的黄金组合,包括目前流行的LNMP等。
    为什么这四个会走在一起呢,这需要回头看看发展历史了:

    Linux,该操作系统的内核由林纳斯·托瓦兹在1991年10月5日首次发布。Linux也是自由软件和开放源代码软件发展中最著名的例子。
    Apache,是Apache软件基金会的一个开放源代码的网页服务器,1996年4月以来,Apache一直是Internet上最流行的HTTP服务器:1999年5月它在57%的网页服务器上运行,到了2005年7月这个比例上升到了69%。
    MySQL,一个开放源代码的关系数据库管理系统,几度被sun收购,09年被oracle收购sun,而正式落户甲骨文。
    PHP,PHP:Hypertext Preprocessor,即“PHP:超文本预处理器”。是一种开源的通用计算机脚本语言,尤其适用于网络开发并可嵌入HTML中使用。

    这四个家伙,都有一个共同的特点,就是成功的开源软件。
    由于其开源免费,并基于linux平台集成安装,更重要的是LAMP完全适应了互联网浪潮,高效、快速、低成本,导致LAMP所向无敌。

7、开源及其社区

    PHP的开源性,包括很多成熟和活跃的社区,在zend公司带领之下,PHP逐渐走向成熟,尤其在PHP5.3之后,越来越适应更多的场景和需要了。


PHP的美中不足,不足在何处:


1、语法简单灵活
    PHP语法的简单和灵活,同时也是PHP的软肋。PHP在一定程度上不适合大型企业使用,部分原因就在于此。
    使用过JAVA的童鞋,来看PHP,都会觉得PHP太弱了,是的,JAVA拥有成熟的平台、框架、规范、标准。
    但是,笔者认为,如果可以很好的规范、设计和架构整个PHP开发,PHP同样可以适用于大型企业,百度,新浪就是对PHP实践的很好案例。

2、没有多线程,没有RPC

    PHP的语言设计上,没有多线程编程,没有RPC远程调用,但是业界存在很多实现PHP多线程的解决方案。
    curl/socket/YRC

3、不适合大计算量任务、长时间执行的任务
    由于PHP的动态特性,PHP不适合去做常驻进程,和去处理大计算量任务,一是内存溢出问题,二是CPU使用问题
    也就是说,PHP不适合CPU密集型应用程序。
    PHP约定默认超时时间为30S。


综上,我们使用PHP,就是看中PHP在web开发上的随写、随测、随时上线的特性。
更多时候,对于整个系统架构来说,更多的核心是在数据分布式、缓存命中、负载均衡、CDN、业务逻辑、安全这些模块上。
所以,如果可以,就使用PHP吧,实在不行,OK,换强项的语言或解决方案,就这么简单。

对PHP的质疑:

1、PHP真的不适合开发企业级web应用吗?
    架构、架构,适不适合企业级,不是开发语言说了算,而是整个架构设计。
    在合适的地方使用合适的东西,在合理的地方使用能最优势的东西。
    业界很多案例说明,不是我们应该使用哪个开发语言,而是哪个更适合我们的需要。

    百度为什么有大量模块从C迁往PHP?
    淘宝为什么从LAMP架构迁往JAVA?
    新浪微博日均十亿的PV,为什么使用LNMP?

2、PHP真的性能差吗?
    开发语言一定程度上,是不会最先达到性能瓶颈的。具体参照大话PHP之性能

3、PHP真的不适合职业发展吗?
    很多童鞋担心选择了PHP,会不会马上走向职业发展瓶颈,还是那句话,作为开发,语言只是工具。
    这些你真的都懂了吗?PHP的ZE、ZM、COW、设计模式、LB、CDN、LRC、RPC、SOA、分布式、CACHE、Restful、fastcgi、LOC等等

总之,选择她并喜欢她吧,写有灵魂的代码和程序,让世界因此而不同。

//------------------------------------------------------------------------------------

选择的比较语言:Java、.NET、C/C++、PHP、Python、Perl

以上均属于服务器端开发语言,其中Java、.NET、C/C++属于静态编译型语言,PHP、Python、Perl属于动态解释型语言


1、Hello world注:假设你已经配置好了各种语言开发环境[PHP]hello.php<?php echo 'hello world';?>#php hello.php[C]hello.c#include <stdio.h>int main(){        printf("%s\n","hello world");}#gcc hello.c -o hello#./hello[Java]hello.javapublic class HelloWorld{    public static void main(String[] args) {          System.out.println("Hello World!");    }}#javac hello.java#java hello//java 后来出来了JSP,其实是简化了Servlet,来提高Web开发效率[C#]hello.csusing System;// A "Hello World!" program in C#namespace HelloWorld{    class HelloWorld{        public static void Main(string[] args){               Console.WriteLine("HelloWorld");        }    }}# csc Hello.cs# Hello//语法很类似Java,它有着不错的组件对象模型COM的特性,C#继承类用:冒号。//注,C#是一个语言,.net是一个平台,上面支持用C#或者VBdotNet写代码。asp同jsp样,用来写动态网页的。[python]hello.py#!/usr/bin/env pythonprint 'Hello World'  //python 是一种面向对象的脚本语言,语法没有大括号,主要靠缩进实现代码块,有些人认为这样的结果清晰,明了//主要应用于系统管理和Web编程,包括3D游戏开发等[Perl]hello.pl#!/usr/bin/perlprint "Hello, World!\n";//perl 被更多的用于系统管理的脚本语言,用来结合 或者 替代shell作为系统管理的程序语言//perl的优势在于文本处理(强大的正则表达式,PHP就是兼容perl的) 和 数据库处理</stdio.h>



------------------------------------------

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn