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 基础 一步步 一幕幕[面向对象之方法、方法的重载、方法的重写、方法的递归]
方法.方法的重载.方法的重写.方法的递归 方法: 将一堆代码进行重用的一种机制. 语法: [访问修饰符] 返回类型 <方法名>(参数列表){ 方法主体: } 返回值类型:如果不需要写返回值 ...
随机推荐
- SSH 学习笔记
零.背景 在看 pm2 的 deploy 功能的时候,对 ssh 的不熟悉导致错误频出,包括之前对 github 的配置也用到了 SSH,所以找个机会整理一下. 一.介绍 SSH 是每一台 Linux ...
- Windows下Mongodb安装及配置
安装文件:MongoDB-win32-x86_64-2008plus-ssl-3.2.6-signed.msi 电脑配置:win7 64位 mongodb的安装很简单,设置好安装路径后,一直Next直 ...
- Linux - 针对用户账号的常用操作
用户目录 除root用户外,其他默认的用户目录一般为/home/<user name>. 可以通过如下步骤修改默认用户目录 修改/etc/passwd文件中相应用户的路径信息 停止此用户的 ...
- cytoscape.js在vue项目中的安装及案例
1. 安装: npm i cytoscape --save 2. 引入:main.js import cytoscape from 'cytoscape'; Vue.prototype.$cytosc ...
- 【spring揭秘】1、关于IOC的基础概念
1.基础概念 IOC有三种注入方式: 1.构造方法注入,就是通过构造方法进行实例化成员属性对象,优点是实现对象之后直接就可以使用,但是参数过多也是个麻烦 2.setter方法注入,实现相应的sette ...
- div居中的几种方式
摘自:https://www.cnblogs.com/ones/p/4362531.html DIV居中的几种方法 1. 1 body{ 2 text-align:center; 3 } 缺点:b ...
- android stdio Error Could not find com.android.tools common 25.2.2
Error:Could not find com.android.tools:common:25.2.2. Searched in the following locations: file:/D:/ ...
- 剑指offer十七姊妹篇之二叉树的创建、遍历、判断子二叉树
1.二叉树节点类 public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public Tr ...
- Silverlight中使用MVVM(1)--基础
Silverlight中使用MVVM(1)--基础 Silverlight中使用MVVM(2)—提高 Silverlight中使用MVVM(3)—进阶 Silverlight中使用MVVM(4)—演练 ...
- Hadoop2源码分析-准备篇
1.概述 我们已经能够搭建一个高可用的Hadoop平台了,也熟悉并掌握了一个项目在Hadoop平台下的开发流程,基于Hadoop的一些套件我们也能够使用,并且能利用这些套件进行一些任务的开发.在Had ...