今天一个阳光明媚的大周天,小崔百无聊赖的翻看着各种老旧的经典电影,无奈谁让自己是没女朋友的单身狗呢。闲来无事就记录一下PHP的一些基础知识吧!
1、PHP是什么?
PHP是一种创建动态交互性站点的服务器脚本语言。
2、PHP的语法
PHP脚本可以放置在文档的任何位置,PHP脚本是以<?php开始,?>结束。PHP文件的默认扩展名是“.php”,PHP文件通常包含HTML标签和PHP脚本代码。PHP中每个代码行必须以分号(;)结束,分号是一种分隔符,用来把指令集区分开来。
3、PHP变量
变量是用于存储信息的容器。
4、echo、print、print_r、printf、sprintf、var_dump的区别
echo是PHP语言,没有返回值,可以输出一个或多个简单类型数据(int、string)。
print即使函数又不能算是函数(print()可以打印数据,print也可以直接打印数据),有返回值,可以打印一个简单类型的数据(int、string)。
print_r是函数,有返回值,可以打印复杂类型的数据(array、object)。
printf是函数,输出格式化之后的字符串。
sprintf是函数和printf一样,唯一不同的是它不会直接输出,而是要赋值给一个变量。
var_dump是函数,用来输出变量的内容、类型、长度,通常用来调试。
5、EOF(heredoc)是什么及使用方法
EOF(heredoc)是一种在命令行和程序语言里定义一个字符的方法。
- 结尾必须以分号结束,否则编译不成功。
- EOF可以用任何字符代替,但首位必须一致。
- 结束标识必须顶格独自占一行(从首行开始前后不能衔接任何空白字符)
- 开始标识可以不带引号或带单双引号,不带引号和带单双引号效果一样。
5、PHP数据类型
integer(整型)、string(字符串)、float(浮点型)、boolean(布尔)、array(数组)、object(对象)、null(空值)
6、PHP常量
常量是一个简单值得标识符,该值在脚本中不能改变。常量名称是由英文、下划线、和数字构成,但是数字不能作为首字母(常量名不需要加$符),常量是全局的。
define('常量名称', '常量值', false),define用来定义常量,第一个参数是常量名称,第二个参数是常量值,第三个参数是bool(true、false)默认是false大小写敏感,true是大小写不敏感。
7、PHP注释符号
- /*多行注释*/
- //单行注释
- #单行注释
8、在PHP里.的作用是什么
在PHP里.的作用是拼接字符串
9、PHP运算符
- 算术运算符:+相加、-相减、*乘法、/除法、-x取反、%除法取余、.拼接、intdiv()整除(PHP7+新增运算符)
- 赋值运算符:=左侧操作数被设置为右侧表达式数、+=相加、-=相减、*=相乘、/=相除、%=除法取余、.=连接两个字符串
- 递增、递减运算符:++i(先i+1,然后返回i)、i++(先返回i,然后i+1)、--i(先i-1,然后返回i)、i--(先返回i,然后i-1)
- 比较运算符:==相等、===绝对相等(类型相同)、!=不等、!==绝对不等、<>不等、<小于、>大于、<=小于等于、>=大于等于
- 逻辑运算符:and与、or或、&&与、||或、xor异或、!非
- 数组运算符:+集合、==相等、===恒等、!=不相等、!==不恒等、<>不相等
- 三元运算符:格式(isset($x) ? $x : $y),PHP7+新增null合并运算符??(格式:$x ?? '$x为空',$x存在不为null,返回$x。为null返回错误提示)
- 组合比较符:PHP7+新增组合运算符也称之为太空船运算符,可以轻松实现两个变量的比较,不仅限于数值类的比较。组合运算符格式:<=>,组合运算符解析:$x = $a <=> $b,$a > $b则$x等于1,$a < $b则$x等于-1,$a == $b则$x等于0。
10、if...elseif...else和switch判断语句
if...elseif...else和switch都是根据条件判断去执行不同动作。
11、超全局变量
超全局变量是PHP自带变量,在脚本的全部作用域都可用。$GLOBALS、$_GET、$_POST、$_FILES、$_ENV、$_SERVER、$_COOKIE、$_SESSION、$_REQUEST
12、PHP循环
while、do...while、for、foreach
13、魔术常量
__LINE__文件中当前行号、__FILE__文件完整的路径和文件名、__CLASS__当前类名、__FUNCTION__当前函数名、__METHOD__当前类名和方法名、__NAMESPACE__当前命名空间、__DIR__文件所在目录、__TRAIT__代码复用方法traits
14、include、require、include_once、require_once的区别
include、require、include_once、require_once包含加载文件其他文件代码
include、require不同之处:require会产生致命报错,当文件代码有错误的时候脚本会停止执行,include在文件代码有错误时会生成一个警告,脚本会继续执行。
include_once、require_once只包含一次,如果已经存在文件代码,就不会继续包含加载。
15、cookie、session的相同和不同之处
cookie、session跨页面不跨用户,cookie只能能保存字符串类型数据,session可以保存任何人类型数据。cookie产生于服务器,存储在客户端。session产生于服务器,存储在服务器。
16、Redis和MemCached的区别:
Redis和MemCached都是key-value存储系统,MemCached存储数据类型单一,Redis可存储多种数据类型。Redis速度比MemCached快,MemCached存在内存中,断电数据会丢失。
17、Redis数据类型
string字符串、hash散列、list列表、set集合、sorted set有序集合
18、MySQL int(11)可以保存手机号码吗
不可以,int类型的长度4个字节,手机号在第5个字节的时候会被吞掉。
19、MySQL索引有几种,有什么区别没有
- 普通索引:没有任何限制
- 唯一索引:与普通索引类似,不同之处就是索引字段值是唯一的允许有空值
- 主键索引:一般是建表的时候设置,主键值是唯一的,不允许有空值
- 复合索引:多个列上创建索引,加速复合条件查询
- 全文索引:在MySQL5.6之前只有MyISAM引擎有全文索引,MySQL5.6之后InnoDB也支持全文索引。
20、MySQL中MyISAM和InnoDB的区别
MyISAM引擎查询快,支持全文索引,不支持事务、外键,支持表级锁。
InnoDB引擎查询慢,增删改快,支持事务、外键,支持事务和行级锁。MySQL5.6之后支持全文索引。
21、InnoDB 4大特征
- 插入缓冲
- 二次写
- 预读
- 自适应hash索引
21、数据库优化
- 选择合适的字段类型(比如用varchar替换char)
- 用join连接代替子查询
- 使用union联合代替手动创建临时表
- 事务
- 锁定表
- 使用外键
- 使用索引
- 优化查询语句
- 分库、分表
22、优化查询语句的方法
- select查询尽量不要直接用*,直接使用指定的字段
- 在相同类型的字段上作比较操作(不用进行类型转换)
- 不要在索引的字段上使用函数操作
- 尽量使用数字类型字段
- 避免使用!=、<>、is null、is not null
- 建议每张表都设置自增主键
- 避免大事务操作
源代码已上传GitHub:https://github.com/cuiyuanxin/php-demo/blob/master/basics.php
笔记持续更新。。。
纯手打笔记,如有错误请评论提出,谢谢。