zoukankan      html  css  js  c++  java
  • PHP学习和使用总结

    起因

    学习和使用PHP也有不少年头了,而自己也在学习和使用其他许多语言。我想通过这个总结来给自己一个交代。另一方面也分享一下开发经验,如何用PHP开发和管理大型的项目。

    闲聊

    许多人说自己1天学会PHP,头3天就写了个网站。的确PHP是个上手简单的语言,原因在于:

    1. 它不需要编译就能运行;这使得你的学习-实践成本很低;
    2. 它容错很高,使得你的程序总是能先运行,而不是一大堆报错。
    3. 它的不严谨,书写随意,你觉得应该可以这样写,它就能这样写。

    PHP最初的目的是为了做一个个人网站,非常快,非常简单。所以到了今天,PHP还是包含了大量的早期为了简单起见保留的语法。比如,你不需要定义任何函数就能执行PHP,这一点和shell,perl是一样的;PHP在设计时没少参考服务器的脚本语言。

    PHP的简单也招来很多歧视,这些歧视不是没有道理,但是我想说的是,还好他们没有在写PHP了。一个项目是否严谨且符合工程标准,需要开发团队极强的自我约束能力,否则就算是用严谨而简洁著称Python,也能写出很烂的项目代码。

    PHP发展至今,已经包含了命名空间,类,方法,函数,反射,异常处理,协程,异步IO等等复杂的实现;这使得PHP能够像比如JAVA一样应对大型web项目。而PHP 7编译完成的脚本执行速度已经快要达到HHVM的速度了。

    公平的说,PHP还有很多短板(2017年1月10日),比如多线程和异步编程依旧很不成熟。缺乏权威的包管理体系,以至于社区贡献的公共库不多,比如和java比是少的多,为了兼顾性能,许多扩展包都是用C语言写的,使得扩展的开发成本不低,安装也复杂。那同样是脚本语言的Python,怎么没有干掉PHP呢?一个是历史原因,很多项目已经是PHP了。一个是Python在从2.* 跨域到 3.*的尴尬情况。虽然Python已经有超越PHP的占有率,但是国内Web开发领域,用Python的貌似不多。包括我自己用Python还是在服务器管理、数据统计等方面,少有用于网站开发。个人感觉Python开发网站还是不如PHP来得方便。


    正文

    这份总结也可以当做一份教程使用。但是起码需要C语言的程序基础,因为不会包含如何使用条件语句或者循环体这样的东西。大概是下面3个内容。

    目录

    1. 入门
    2. 语法
    3. web服务器
    4. 简洁严谨的使用PHP
      • 项目、框架
      • 规范
      • 技巧


    ## 1. 入门 这里假设你有过任意一种编程语言的经验了。

    1.1 怎么运行PHP

    如果你对Linux 或 Unix(MacOS比如)熟悉,那么恭喜你,运行PHP的方法和shell脚本完全相同:
    首先你创建一个文本文件,里面随便写个字符串,比如"Hello world",注意,随便写就是其字面意思,不要关心语法什么的。就像用记事本写个文本文件那样。

    然后

    $ php index.php
    

    或者在脚本顶部加上 #!/usr/bin/env php ,然后

    $ chmod +x index.php
    $ ./index.php
    

    就可以看到输出了Hello world。

    那么问题来了,windows下如何运行PHP,linux 或 MacOS下,PHP从哪来?总得安装吧。

    1.2 安装

    1.2.1 windows:

    Windows 下PHP安装就是一个复制粘贴的过程,在php.net的官网上找到Windows的版本,下载,解压之后,得到的目录中的 bin/php.exe 就是php了。在cmd命令行下执行

    /path/to/php/bin/php.exe index.php
    

    可以运行刚才的脚本。

    1.2.2 Linux 使用包管理安装:

    redhat 或 Centos下用yum install php 可能遇到php版本不是最新的问题。所以这里强烈建议用源码安装最新稳定版本。
    如果你正在使用MacOS,PHP默认是有安装的,版本一般还凑合,特别是有经常升级系统,应该还是挺新的,如果要安装其他版本,那么可以使用brew install来安装PHP。brew 工具可自己Google一下。

    1.2.3 Linux、MacOS 编译安装:

    MacOS的gcc编译器是XCode提供的,所以编译之前,你得先安装XCode。其他linux环境只要不是太旧,应该没有问题。可以在官网查看编译要求。

    # 在MacOS下面你可能遇到大量的头文件不存在的问题。安装完xcode后,还需要执行下面指令,即使这样,还可能继续遇到/usr下权限问题。。。请多多google
    xcode-select --install
    

    然后到官网下载稳定版本的php安装包,比如现在是PHP 5.6.* 或者 PHP 7。你可能好奇PHP 6呢,流产了,据说是社区贡献的代码质量问题和管理问题导致。

    下载好的代码包安装过程和其他Linux下源码安装方式一样:

    # 解压并安装
    tar zxf php.*.tar.gz
    cd php.*
    ./configure 
    make && make install
    

    新版MacOS可能遇到/usr/include文件夹不存在,可Google解决。不过你可以考虑使用系统自带的PHP。

    如何验证安装?执行指令 php -v 可看到php的版本信息。如果有,就是安装成了。

    1.2.4 选择IDE

    早期我们学习PHP的同学都喜欢文本编辑器,比如nodepad++,vim。。。不过现在有更好的选择。喜欢自己捣腾的还是可以选择VIM或者Sublime也不错。如果要一个完整的、现成的IDE,最好的是PHPStorm,但是这个要钱,不过盗版横行。。。如果用其他IDE,我觉得还不如用Sublime,顺便还多学个Python,而且不强制收费。

    1.2.4 如何使用IDE运行PHP脚本?

    待补充



    ## 2 语法

    2.1 先学习例子

    刚才说在文本文件index.php中随便写一个字符串,不要考虑语法,就这一点来,PHP比shell上手都简单,因为在shell中这么干,得报错(Hello: command not found)。我可以这么做原因是,如果要执行一段PHP代码,需要用<?php [代码内容] ?> 将代码包裹起来,比如下面这样:

    <?php
    //PHP每个完整表达式,函数调用,都应该以;结尾,但是表达式,或者函数调用中间可以换行
    echo "Hello world";
    ?>
    

    而其他部分,PHP会跳过直接输出。如果你熟悉JSP 或者 ASP,这是一样的,在JSP中你可以用<% [java 代码] %>。而上面的代码还有一种更加简洁的书写方式:

    这是一种输出内容的时候的一种简写方式,省略了echo 语法和 php 关键字,还有一个分号也不写了。
    <?="Hello world"?>
    

    这里你可能好奇,php没有函数吗?一般语言执行的不应该起码是个函数吗?比如C语言的print("Hello World")?echo确实不是函数,是一个语法,就像C语言中声明一个变量:

    //这里也没有括号,int也不是函数
    int age;
    

    所以echo不具备作为函数的一些特质,但是多了一些语法的功能,比如输出多个值可以

    <?php
    echo "hello","world";
    
    //如果一个php文件全部是php代码,结尾的?>不要写,目前先记着就行,为啥不写可以Google一下。
    

    2.2 变量、函数、类

    2.2.1 变量

    任何一个PHP变量都是以$开头,这个没有例外,变量名包含字母数字下划线和“unicode字符(这个玩玩就好,不要用它)”,和C一样,不能数字开头,区分大小写。

    <?php
    //php定义变量不需要事先声明
    
    $name = "kevin";//字符串
    $age = 30;//整数
    
    $name = $age;//弱类型使得你可以这样赋值,但是就像开头说的,你要这么做,PHP不会拒绝,但是你的代码就容易出问题,而且不严谨了
    
    $句子 = $name . " is a man.";//php支持unicode,不过也别这么干,英文命名是最好的选择,拼音都不要用。
    
    echo $句子;
    //得到输出:30 is a man.
    //这里你可以看到 英文句号 可以连接2个字符串,但是这样也导致了对象不能用.操作了,这也是个历史遗留问题,PHP一开始压根就没考虑过会有对象这回事。
    

    2.2.2 函数

    <?php
    /**
      * 直接来例子最容易理解
      */
    function add($a,$b = 1) {
        return $a + $b;
    }
    
    echo add(1,2);
    //得到输出:3
    

    上面定义了一个函数add,用于两个数相加,第二个数默认是1,这样如果add($a) 就相当于 $a + 1或者$a++;的功能。PHP函数没有定义返回值,而且要求function开头,因为PHP是弱类型的,返回值是什么类型,它并不关心。调用的人去理解就行了。自从有了面向对象后,函数就不再提倡使用了,所以函数应该多用于及其简单的场景,或者练习中。

    2.2.3 类

    class Math {
        function add($a,$b = 1) {
            return $a + $b;
        }
    }
    
    $m = new Math();
    echo $m->add(1,2);
    //得到输出3
    

    上面定义了一个Math类,包含一个add的公有方法,php的类和java一样,有抽象类,接口,私有方法,保护方法等等,但是先不介绍了(免得1天学不完)。

    这里看到,用new 关键字实例化了类,这个各种语言基本一样。用了->符号来调用对象的方法,这问题前面说了,因为句号被占用了,C语言中指向结构体的指针也是用->这个符号来引用成员数据,PHP使用它也算是能够接受。

    2.2.4 恭喜你完成了PHP入门

    如果你想用PHP写点东西,只需要再有一个函数手册就好了。但是你还有很多疑问,比如怎么把东西递交给用户的浏览器?



    ## 3 Web服务器 PHP最大的用处就是做网站,在终端里面加加减减,输出点东西,往往是练习或者单元测试,关于PHP单元测试,后面也会介绍。

    PHP 最常见的使用组合是和Apache一起,如果你在用MacOS,只要启用个人站点的功能,就是一个完美的PHP + APACHE的服务器环境了。而其他使用Linux和windows的人可能就要麻烦一些,要自己编译和配置。为了简单起见,这里用php-fpm的方式来运行php,而需要的web服务器是:Nginx。

    Nginx 安装

    待续

  • 相关阅读:
    NHibernate初学者指南(12):日志
    NHibernate初学者指南(10):一级和二级缓存
    【翻译】EF 4.2 Code First 演示
    【翻译】EF 4.2 Model & Database First演示
    NHibernate初学者指南(14):配置的三种方式
    NHibernate初学者指南(16):条件查询
    NHibernate初学者指南(7):映射模型到数据库之方式三
    NHibernate初学者指南(13):监测与分析
    NHibernate初学者指南(6):映射模型到数据库之方式二
    NHibernate初学者指南(18):验证单个属性
  • 原文地址:https://www.cnblogs.com/didda/p/6263019.html
Copyright © 2011-2022 走看看