PHP笔记

PHP基础笔记


语言简介

PHP (原本的全称 Personal Home Page 后来改为Hypertext Preprocessor)是一种弱类型、解释型的开源计算机脚本语言,常用在网页开发,有加拿大程序员拉斯姆斯·勒多夫于1995年发明,是拉斯姆斯·勒多夫为了要维护个人网页,而用c语言开发的一些CGI工具程序集,来取代原先使用的Perl程序,后由两个以色列人重写后发扬光大的,PHP是一种被广泛应用的开源通用脚本语言,尤其适用于 Web 开发并可嵌入 HTML 中去。它的语法利用了 C、Java 和 Perl,易于学习。该语言的主要目标是允许 web 开发人员快速编写动态生成的 web 页面,但 PHP 的用途远不只于此。

参考

基础问题

进程和线程的区别

编译型语言、解释型语言 的差别。

参考

PHP基础语法

require、include、requireonce 和 includeonce 区别

require 和 include 几乎完全一样,除了处理失败的方式不同之外。require 在出错时产生 ECOMPILEERROR 级别的错误。换句话说将导致脚本中止而 include 只产生警告(E_WARNING),脚本会继续运行。

require_once 语句和 require 语句完全相同,唯一区别是 PHP 会检查该文件是否已经被包含过,如果是则不会再次包含。

参见 include_once 的文档来理解 _once 的含义,并理解与没有 _once 时候有什么不同。

参考

字符串 4 种表达方式:

  1. 单引号
    1. 描述
      1. 最简单表示方法,不解析变量,转义只支持(/’ // ),其他/r /n 都不支持
    2. 使用场景:
      1. 一般不解析变量的短字符串尽可能都用它
  2. 双引号
    1. 描述
      1. 字符串中的变量和特殊字符的转义序列将会被替换
    2. 使用场景:
      1. 需要解析变量 或者 需要解析转义例如 \n \r 时
  3. heredoc
    1. 描述:
      1. 语法结构: <<< 结构就象是没有使用双引号的双引号字符串,这就是说在 heredoc 结构中单引号不用被转义,但是上文中列出的转义序列还可以使用。变量将被替换,但在 heredoc 结构中含有复杂的变量时要格外小心。
    2. 使用场景:
      1. 大段文字需要解析变量和转义解析时
  4. nowdoc
    1. 描述:
      1. 语法结构(自 PHP 5.3.0 起)就象 heredoc 结构类似于双引号字符串,Nowdoc 结构是类似于单引号字符串的。Nowdoc 结构很象 heredoc 结构,但是 nowdoc 中不进行解析操作。这种结构很适合用于嵌入 PHP 代码或其它大段文本而无需对其中的特殊字符进行转义。与 SGML 的 <![CDATA[ ]]> 结构是用来声明大段的不用解析的文本类似,nowdoc 结构也有相同的特征。
      2. 一个 nowdoc 结构也用和 heredocs 结构一样的标记 <<<, 但是跟在后面的标识符要用单引号括起来,即 <<<‘EOT’。Heredoc 结构的所有规则也同样适用于 nowdoc 结构,尤其是结束标识符的规则。
    2. 使用场景:
      1. 大段文字不需要解析变量和转义时

参考

  1. php手册

预定义变量 (包括超全局变量)

  • 超全局变量 — 超全局变量是在全部作用域中始终可用的内置变量
  • $GLOBALS — 引用全局作用域中可用的全部变量
  • $_SERVER — 服务器和执行环境信息
  • $_GET — HTTP GET 变量
  • $_POST — HTTP POST 变量
  • $_FILES — HTTP 文件上传变量
  • $_REQUEST — HTTP Request 变量
  • $_SESSION — Session 变量
  • $_ENV — 环境变量
  • $_COOKIE — HTTP Cookies
  • $php_errormsg — 前一个错误信息
  • $HTTPRAWPOST_DATA — 原生POST数据
  • $httpresponseheader — HTTP 响应头
  • $argc — 传递给脚本的参数数目
  • $argv — 传递给脚本的参数数组

参考

mysql mysqli pdo 的连接对比

建议使用mysqli 或PDO_MySQL扩展。不建议在 新开发中使用旧的mysql扩展,因为它在PHP 5.5.0中被弃用,并在PHP 7中被删除。下面提供了详细的功能比较矩阵。所有三个扩展的总体性能被认为是大致相同的。尽管扩展的性能仅占PHP Web请求总运行时间的一小部分。影响通常低至0.1%。

参考

mysqlnd 全称MySQL Native Driver ,

是mysql的php驱动器,替代了有版权之争的libmysql,他不同于mysqli ,貌似mysql需要通过他来链接数据库

参考

error_reporting

参考

php 数据类型转换原理

参考

php 安装编译时 configure 参数

参考

php 获取IP

HTTP_CLIENT_IP
HTTP_X_REAL_FORWARDED_FOR
HTTP_X_FORWARDED_FOR
REMOTE_ADDR

参考

php 安装编译时 configure 参数

参考

PHP如何获取 DELETE 或者 PUT 请求的参数参数

参考

PHP数组的实现原理

参考

PHP变量的实现原理

1、深入浅出PHP(Exploring PHP)
http://www.laruence.com/2008/08/11/147.html

2、深入理解PHP原理之Opcodes
http://www.laruence.com/2008/06/18/221.html

3、深入理解PHP原理之变量(Variables inside PHP) 
http://www.laruence.com/2008/08/22/412.html

4、 深入理解PHP原理之变量作用域(Scope in PHP) 
http://www.laruence.com/2008/08/26/463.html

5、深入理解PHP原理之变量分离/引用(Variables Separation) 
http://www.laruence.com/2008/09/19/520.html

6、 深入理解PHP之数组(遍历顺序) 
http://www.laruence.com/2009/08/23/1065.html

7、深入理解PHP内存管理之谁动了我的内存 
http://www.laruence.com/2011/03/04/1894.html

参考

empty 和 isset的区别

empty — 检查一个变量是否为空,判断一个变量是否被认为是空的。当一个变量并不存在,或者它的值等同于FALSE,那么它会被认为不存在。如果变量不存在的话,empty()并不会产生警告。

由于PHP是弱类型语言,加之下方多种情况都是空,所以尽量用isset(),避免不必要的麻烦,工作中碰见不少这样的问题,格外小心

以下的东西empty认为是空的:

"" (空字符串)
0 (作为整数的0)
0.0 (作为浮点数的0)
"0" (作为字符串的0)
NULL
FALSE
array() (一个空数组)
$var; (一个声明了,但是没有值的变量)

isset() 检测变量是否已设置并且非 NULL, 简单来说就是 var 存在并且值不是 NULL 则返回 TRUE,否则返回 FALSE。

参考

类与对象 概念 & 使用场景 & 意义 abstract class和interface

注意继承管理,什么能继承,什么不能,能继承几个都要搞清楚,最后看一下laravel的代码是怎么用的就行

参考

对象 class

  • 对象特性
    • 封装
    • 继承
    • 多态
  • 存在价值意义
  • 使用场景
  • 使用习惯

抽象类

接口

静态类

trait 和 class 的使用场景对比

参考

Static(静态)关键字

参考

命名空间

手册

session

服务器存储浏览器

参考

cookie

参考

session 分布式注意事项

参考

异常处理

  • 错误级别
  • 捕获方式
  • 如何设计一套项目使用的错误记录规则模块
  • 配置

参考

项目异常处理模块设计

  • 首先错误等级分好,每一个等级有一个代码段 类似http的请求状态吗那样子
  • 自己抛出来的异常要单独定义一个继承与Exception 的,然后自己在程序中,不同的位置要注意跑出不同等级的code,不同的http状态吗等等

参考

PHP魔术方法

参考

mysql持久链接

参考

PHP垃圾回收机制

参考

++ — ++i i++

参考

++ — ++i i++

参考

list

参考

引用赋值

参考

命令行模式 cli

能运行个小的脚本即可

参考

正则表达式

能写出来个有哪些字符就行了

参考

mysql mysqli pdo 等等

参考

设计模式

知道有几种,然后手写一个单利模式

参考

CGI 、 fastcgi 、 fpm-cgi 都是什么?

知道有几种,然后手写一个单利模式

参考

代码的执行过程

主要目的研究从用户网址开始到返回,整个服务器的流程图

参考

PHP 7 的新特性、相对于旧版本在性能、底层是实现上重构。

知道有几种,然后手写一个单利模式

参考

一个php文件的解释过程是? 一般加速php有哪些? 提高php整体性能会用到哪些技术?

PHP版本层面、编译层面、opcache、加上框架、参数配置上。等等

参考

PHP历史

手册 1- 5的历史

最受那些规范

PSR 增删改查 put DELETE

参考

laravel 框架学习

介绍、差异性、诞生的目的

参考

学一下集成环境 homestead

参考

PHP 之排序算法 – 冒泡排序

PHP 之排序算法 – 二分查找

PHP 之排序算法 – 快速排序

参考

微博优化之路

  • 性能优化
    • 阿斯达
  • 流程优化

安全SQL攻击、XSS、CSRF、DDos

通过构造Hash冲突实现各种语言的拒绝服务攻击

http://www.laruence.com/2011/12/29/2412.html

php:// — 访问各个输入/输出流(I/O streams)

http://php.net/manual/zh/wrappers.php.php

Tags:

Add a Comment

电子邮件地址不会被公开。 必填项已用*标注