PHP(Hypertext Preprocessor)是一种被广泛应用的开源通用脚本语言,尤其适用于Web开发。可用于服务端脚本、命令行脚本、桌面应用程序三大领域。

PHP 的 SAPI(服务器应用程序编程接口)提供了一个和外部通信的接口,有点类似于socket,使得PHP可以和其他应用进行交互数据。常见有用于 Apache 的 php5_module、 nginx 的 CGI 、IIS 的 ISAPI、还有 Shell 的 CLI。

CGI(Common Gateway Interface):通用网关接口,它描述了 Web 服务器和请求处理程序(如 PHP)之间数据传输的一个标准协议。请求处理程序也被叫做CGI程序。

FastCGI(Fast Common Gateway Interface):CGI 协议的增強版本,虽然 CGI 协议已经解决了 Web 服务器与 CGI 程序间的通信的问题。可是每一次 Web 请求都会先 fork 出 CGI 程序进程,处理完后结束进程,这种 fork-and-execute 模式非常浪费资源。

PHP-CGI: PHP 官方自带的 FastCGI 管理器。虽然是php官方出品,但是性能太差,而且也很麻烦不人性化,修改 php.ini 配置后需要重启才能生效,无法平滑重启。

FPM(FastCGI Process Manager FastCGI 进程管理器):用于替换 PHP FastCGI 的大部分附加功能,对于高负载网站是非常有用的。支持平滑停止/启动的高级进程管理功能。

PHP 支持数据类型
标量类型(4): boolean、integer、 float(double)、string
复合类型(3): array、object、callable(可调用)
特殊类型(2):resource(资源) NULL(无类型)

伪类型(pseudo-types) :是在 PHP 文档里为了确保代码的易读性,用于指示参数可以使用的类型和值。

总结:
1、字符串有四种表示法:单引号、双引号、heredoc、nowdoc。string 最大可以达到 2GB
1、任何资源和 NAN 都是TRUE,空标记生成的 SimpleXML 对象为FALSE。
2、精度丢失问题用BCMath(任意精度数学库 )
2、数组的键名只能是整型或字符串,布尔值、浮点数、合法的数字字符串都会强转为整型。NULL转为空字符串。
3、其它类型被转换成对象,会创建一个内置类 stdClass 对象实例。
5、资源类型的变量保存了到外部资源的一个引用,它是通过函数来建立和使用的。垃圾回收系统会自动释放无用资源,但持久数据库连接比较特殊。
9、尚未被赋值和被 unset() 的变量都值为 NULL

变量:用美元符号后面跟变量名来表示一个变量,变量名区分大小写。

静态变量:仅在函数作用域中存在,当程序执行离开此作用域时,其值并不丢失。

可变变量:一个变量的变量值却是另一个变量的变量名。如:$a='b'; $$a='bbb'; echo $b;

预定义变量:系统内置变量,PHP会自动将所有的外部变量表示成内建环境变量。
超全局变量
$php_errormsg :前一个错误信息
$HTTP_RAW_POST_DATA : 原生POST数据
$http_response_header :HTTP 响应头
$argc : 传递给脚本的参数数目
$argv : 传递给脚本的参数数组

超全局变量:在全部作用域中始终可用的内置变量。
$GLOBALS : 引用全局作用域中可用的全部变量
$_SERVER : 服务器和执行环境信息
$_GET : HTTP GET 变量
$_POST : HTTP POST 变量
$_FILES : HTTP 文件上传变量
$_REQUEST : HTTP Request 变量
$_SESSION : Session 变量
$_ENV : 环境变量
$_COOKIE :HTTP Cookies

常量: 值不变的量。一旦定义就不能取消和修改,常量的值只能是标量。

魔术常量:__LINE__、__FILE__、__NAMESPACE__、__DIR__、__FUNCTION__、__CLASS__、__METHOD__、__TRAIT__ (都不区分大小写)

表达式: 任何有值的东西。

运算符:可以通过给出的一或多个值来产生另一个值的符号。

递增/递减运算符:递增/递减操作不会影响布尔值。NULL 值递增为 1,递减无效。

错误控制运算符:将 @ 放置在一个 PHP 表达式之前,表示忽略表达式执行的错误信息。

执行运算符:反引号(``)会将其中的内容作为 shell 命令来执行。反引号不能在双引号字符串中使用。

字符串运算符:"." 和 ".=" 用于字符串拼接。

数组相加:数组相加不会覆盖;数组合并(array_merge),字符串键名会覆盖,数字键名则不会。

可变函数:当把变量写成函数调用形式时,PHP 将尝试执行与变量值同名的函数。

匿名函数(Anonymous functions):允许临时创建一个没有指定名称的函数,常用作回调。是通过 Closure 类来实现的。

类常量:在类内部定义为常量。

类的自动加载:通过 spl_autoload_register() 函数注册自动加载器,当使用尚未被定义的类和接口时,会自动加载文件。 注意, __autoload() 函数也能实现,但它以后的版本可能被弃用。

范围解析操作符: 一对冒号(::)用于访问静态成员,类常量。

Trait:实现了一种代码复用的方法,弥补了单继承的不足。

匿名类:PHP 7 开始支持匿名类,它可以创建一次性的简单对象。

重载:重载一般是指,定义多个参数类型或者个数不同,的同名方法。PHP 所提供的重载是通过魔术方法动态地创建类属性和方法。

遍历对象:对象的所有可见属性,才能够被用于遍历为,属性变量名与属性值的键值对。

魔术方法:一些能够在特殊情况下,被自动调用方法被称为魔术方法,如果你想实现相应的魔术功能,可以定义具体实现。

__construct():构造方法
__destruct():析构方法
__call():调用不存在的方法
__callStatic():调用不存在的静态方法
__get():获取不存在的属性
__set(): 属性赋值
__isset(): isset()
__unset():unset()
__sleep() :serialize()
__wakeup() : unserialize()
__toString(): 打印对象
__invoke(): 以函数的方式调用对象
__set_state() :var_export() 导出类
__clone():使用clone 关键字复制对象时,会对对象的所有属性执行一个浅复制。
__debugInfo():var_dump()

类型约束:指定函数的参数限制。必须为对象,接口,数组,或者 callable类型。

对象和引用:默认情况下对象是通过引用传递的,但这又不完全正确。但是官方解释,我没看懂。

序列化:使用函数serialize()来返回一个包含字节流的字符串来表示。

序列化对象:序列化一个对象将只会保存类的名字和对象所以变量,不会保存方法。

命名空间:命名空间是一种封装类的方法,用于防止类名冲突。

错误处理:PHP7 以后,大多数异常被作为 Error 异常抛出,Error 并非继承自 Exception 类。未被处理的 Error 异常,被报告为一个致命错误(Fatal Error)

异常处理:异常可以被try/catch 块所捕获,如果未捕获,则调用异常处理函数(事先通过 set_exception_handler() 注册)进行处理。在PHP 5.5后才能用 finally。

生成器:提供了一种更容易的方法来实现简单的对象迭代,相比于实现 Iterator 接口的方式,性能开销和复杂性大大降低。它还允许你在 foreach 代码块中写代码来迭代返回值。

生成器语法:在函数内部使用 yield 关键字,来生成许多它所需要返回的值。

引用:用不同的名字访问同一个变量内容。引用不是指针。

预定义异常:Exception 和 ErrorException 两个异常类。

预定义接口:
Traversable(遍历)接口
Iterator(迭代器)接口
IteratorAggregate(聚合式迭代器)接口
ArrayAccess(数组式访问)接口
Serializable 序列化接口
Closure 匿名函数类
Generator 生成器类

垃圾回收机制:每个php变量存在一个叫 "zval" 的变量容器中。一个zval变量容器,除了包含变量的类型和值,还包括两个字节的额外信息。is_ref 用来标识这个变量是否是属于引用集合,refcount 表示指向这个zval变量容器的变量个数,这被称作引用计数。当指向变量容器的,变量个数为0时,就会在下一个垃圾回收周期时,被标记为垃圾。一旦根缓冲区满了或者手动调用 gc_collect_cycles() 函数时,就会执行垃圾回收。

PHP 基础总结的更多相关文章

  1. java基础集合经典训练题

    第一题:要求产生10个随机的字符串,每一个字符串互相不重复,每一个字符串中组成的字符(a-zA-Z0-9)也不相同,每个字符串长度为10; 分析:*1.看到这个题目,或许你脑海中会想到很多方法,比如判 ...

  2. node-webkit 环境搭建与基础demo

    首先去github上面下载(地址),具体更具自己的系统,我的是windows,这里只给出windows的做法 下载windows x64版本 下载之后解压,得到以下东西 为了方便,我们直接在这个目录中 ...

  3. js学习笔记:webpack基础入门(一)

    之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...

  4. Golang, 以17个简短代码片段,切底弄懂 channel 基础

    (原创出处为本博客:http://www.cnblogs.com/linguanh/) 前序: 因为打算自己搞个基于Golang的IM服务器,所以复习了下之前一直没怎么使用的协程.管道等高并发编程知识 ...

  5. [C#] C# 基础回顾 - 匿名方法

    C# 基础回顾 - 匿名方法 目录 简介 匿名方法的参数使用范围 委托示例 简介 在 C# 2.0 之前的版本中,我们创建委托的唯一形式 -- 命名方法. 而 C# 2.0 -- 引进了匿名方法,在 ...

  6. HTTPS 互联网世界的安全基础

    近一年公司在努力推进全站的 HTTPS 化,作为负责应用系统的我们,在配合这个趋势的过程中,顺便也就想去搞清楚 HTTP 后面的这个 S 到底是个什么含义?有什么作用?带来了哪些影响?毕竟以前也就只是 ...

  7. Swift与C#的基础语法比较

    背景: 这两天不小心看了一下Swift的基础语法,感觉既然看了,还是写一下笔记,留个痕迹~ 总体而言,感觉Swift是一种前后端多种语言混合的产物~~~ 做为一名.NET阵营人士,少少多多总喜欢通过对 ...

  8. .NetCore MVC中的路由(1)路由配置基础

    .NetCore MVC中的路由(1)路由配置基础 0x00 路由在MVC中起到的作用 前段时间一直忙于别的事情,终于搞定了继续学习.NetCore.这次学习的主题是MVC中的路由.路由是所有MVC框 ...

  9. .NET基础拾遗(5)多线程开发基础

    Index : (1)类型语法.内存管理和垃圾回收基础 (2)面向对象的实现和异常的处理基础 (3)字符串.集合与流 (4)委托.事件.反射与特性 (5)多线程开发基础 (6)ADO.NET与数据库开 ...

  10. .NET 基础 一步步 一幕幕[面向对象之方法、方法的重载、方法的重写、方法的递归]

    方法.方法的重载.方法的重写.方法的递归 方法: 将一堆代码进行重用的一种机制. 语法: [访问修饰符] 返回类型 <方法名>(参数列表){ 方法主体: } 返回值类型:如果不需要写返回值 ...

随机推荐

  1. windows下docker的安装及常用命令学习

    docker search 镜像名 本文主要介绍Docker在Windows下的安装.关于Docker的介绍和文档在其官网中可以找到:http://www.docker.com .安装环境:Windo ...

  2. Python Web框架 tornado 异步原理

    Python Web框架 tornado 异步原理 参考:http://www.jb51.net/article/64747.htm 待整理

  3. vtk文件编写

    在paraview中加载vtk文件,可以很好的显示三维空间图像,如下cpp代码: #include <iostream> #include <fstream> #include ...

  4. System.Threading.Tasks.Task 引起的 IIS 应用池崩溃

    接口服务运行一段时间后,IIS应用池就会突然挂掉,事件查看日志,会有事件日志Event ID为5011的错误 为应用程序池“PokeIn”提供服务的进程在与 Windows Process Activ ...

  5. 基于HA机制的MyCat架构——配置HAProxy

    HAProxy简介HAProxy提供高可用性.负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费.快速并且可靠的一种解决方案. HAProxy特别适用于那些负载特大的web站点,这些站 ...

  6. SQL PKG示例

    CREATE OR REPLACE PACKAGE PKG_SYS_LOG IS -- Author : Li Cong -- Created : 2009-10-12 -- Purpose : 存放 ...

  7. C++语言------顺序表实现,用动态数组的方法

    C++ 中常用的一些东西,通过使用动态数组来实现顺序表, 掌握了一下知识点: 1.预处理有三中方法 宏定义,文件包含,条件编译 2.使用同名的变量时,可以在外层使用命名空间 类解决变量名重定义的错误 ...

  8. JavaScript回调函数及数组方法测试

    JavaScript回调函数及数组方法测试 具体代码如下: <!DOCTYPE html> <html lang="en"> <head> &l ...

  9. .37-浅析webpack源码之事件流make(4)

    赶紧完结这个系列咯,webpack4都已经出正式版了. 之前的代码搜索到js文件的对应loader,并添加到了对象中返回,流程如下: this.plugin("factory", ...

  10. [转]SQL - Create XML - How to set Unicode UTF-8

    本文转自:https://stackoverflow.com/questions/44754356/sql-create-xml-how-to-set-unicode-utf-8 I found a ...