• 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() 函数时,就会执行垃圾回收。

     

  • 相关阅读:
    阅读 图解HTTP ,读书笔记
    javascript 红宝书笔记之操作日期
    设计模式之抽象工厂模式
    设计模式之工厂方法模式
    数据库知识点③
    设计模式之装饰者模式
    设计模式之观察者模式
    心理控制方法——阅读Notes
    使用PL/SQL编写存储过程访问数据库
    《认知盈余》——阅读感受与体会
  • 原文地址:https://www.cnblogs.com/zbseoag/p/9898537.html
Copyright © 2020-2023  润新知