PHP 基础总结
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 基础总结的更多相关文章
- java基础集合经典训练题
第一题:要求产生10个随机的字符串,每一个字符串互相不重复,每一个字符串中组成的字符(a-zA-Z0-9)也不相同,每个字符串长度为10; 分析:*1.看到这个题目,或许你脑海中会想到很多方法,比如判 ...
- node-webkit 环境搭建与基础demo
首先去github上面下载(地址),具体更具自己的系统,我的是windows,这里只给出windows的做法 下载windows x64版本 下载之后解压,得到以下东西 为了方便,我们直接在这个目录中 ...
- js学习笔记:webpack基础入门(一)
之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...
- Golang, 以17个简短代码片段,切底弄懂 channel 基础
(原创出处为本博客:http://www.cnblogs.com/linguanh/) 前序: 因为打算自己搞个基于Golang的IM服务器,所以复习了下之前一直没怎么使用的协程.管道等高并发编程知识 ...
- [C#] C# 基础回顾 - 匿名方法
C# 基础回顾 - 匿名方法 目录 简介 匿名方法的参数使用范围 委托示例 简介 在 C# 2.0 之前的版本中,我们创建委托的唯一形式 -- 命名方法. 而 C# 2.0 -- 引进了匿名方法,在 ...
- HTTPS 互联网世界的安全基础
近一年公司在努力推进全站的 HTTPS 化,作为负责应用系统的我们,在配合这个趋势的过程中,顺便也就想去搞清楚 HTTP 后面的这个 S 到底是个什么含义?有什么作用?带来了哪些影响?毕竟以前也就只是 ...
- Swift与C#的基础语法比较
背景: 这两天不小心看了一下Swift的基础语法,感觉既然看了,还是写一下笔记,留个痕迹~ 总体而言,感觉Swift是一种前后端多种语言混合的产物~~~ 做为一名.NET阵营人士,少少多多总喜欢通过对 ...
- .NetCore MVC中的路由(1)路由配置基础
.NetCore MVC中的路由(1)路由配置基础 0x00 路由在MVC中起到的作用 前段时间一直忙于别的事情,终于搞定了继续学习.NetCore.这次学习的主题是MVC中的路由.路由是所有MVC框 ...
- .NET基础拾遗(5)多线程开发基础
Index : (1)类型语法.内存管理和垃圾回收基础 (2)面向对象的实现和异常的处理基础 (3)字符串.集合与流 (4)委托.事件.反射与特性 (5)多线程开发基础 (6)ADO.NET与数据库开 ...
- .NET 基础 一步步 一幕幕[面向对象之方法、方法的重载、方法的重写、方法的递归]
方法.方法的重载.方法的重写.方法的递归 方法: 将一堆代码进行重用的一种机制. 语法: [访问修饰符] 返回类型 <方法名>(参数列表){ 方法主体: } 返回值类型:如果不需要写返回值 ...
随机推荐
- windows下docker的安装及常用命令学习
docker search 镜像名 本文主要介绍Docker在Windows下的安装.关于Docker的介绍和文档在其官网中可以找到:http://www.docker.com .安装环境:Windo ...
- Python Web框架 tornado 异步原理
Python Web框架 tornado 异步原理 参考:http://www.jb51.net/article/64747.htm 待整理
- vtk文件编写
在paraview中加载vtk文件,可以很好的显示三维空间图像,如下cpp代码: #include <iostream> #include <fstream> #include ...
- System.Threading.Tasks.Task 引起的 IIS 应用池崩溃
接口服务运行一段时间后,IIS应用池就会突然挂掉,事件查看日志,会有事件日志Event ID为5011的错误 为应用程序池“PokeIn”提供服务的进程在与 Windows Process Activ ...
- 基于HA机制的MyCat架构——配置HAProxy
HAProxy简介HAProxy提供高可用性.负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费.快速并且可靠的一种解决方案. HAProxy特别适用于那些负载特大的web站点,这些站 ...
- SQL PKG示例
CREATE OR REPLACE PACKAGE PKG_SYS_LOG IS -- Author : Li Cong -- Created : 2009-10-12 -- Purpose : 存放 ...
- C++语言------顺序表实现,用动态数组的方法
C++ 中常用的一些东西,通过使用动态数组来实现顺序表, 掌握了一下知识点: 1.预处理有三中方法 宏定义,文件包含,条件编译 2.使用同名的变量时,可以在外层使用命名空间 类解决变量名重定义的错误 ...
- JavaScript回调函数及数组方法测试
JavaScript回调函数及数组方法测试 具体代码如下: <!DOCTYPE html> <html lang="en"> <head> &l ...
- .37-浅析webpack源码之事件流make(4)
赶紧完结这个系列咯,webpack4都已经出正式版了. 之前的代码搜索到js文件的对应loader,并添加到了对象中返回,流程如下: this.plugin("factory", ...
- [转]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 ...