1、启蒙导师:后盾人-向军大叔
2、php配置
(1)php.ini——配置文件
该文件中,分号为注释。因此,跟前打上分号,该配置项失效。
(2)phpinfo()——打印php.ini的配置信息。
3、边界符——<?php?>
(1)若php文件中,只包含php代码,只写<?php
(2)若包含其他语言,要将php代码写在<?php?>中。
<?php?>中只能包含php代码。
4、一条表达式后必须加分号
5、注释
(1)单行注释
\# 注释
// 注释
(2)多行注释
/*
注释
*/
6、变量类型
(1)简单类型
(2)复杂类型
(3)特殊类型
- null
- resource——资源类型,如:图片、视频。
7、类型检测——gettype()
特点:可以检测所有类型,返回类型字符串。
浮点型返回double。
8、类型转换
(1)(xxx)$var
(2)xxxval($var)
(3)settype($var, xxx)
(4)详细分析
9、变量
(1)定义变量
$xxx = 'abc';
$$xxx = 666 // $abc = 666;
(2)变量传值
$a = $b;
(3)变量传址(引用)
// 相当于局部变量$a = &$b
$a = &$b;
function xxx( &$a ){}
xxx( $b )
(4)超全局变量(共8个数组)
// 常用的
$GLOBALS // 保存全局变量。
$_SERVER // 保存服务器信息。
$_GET // 收集get请求所发送的数据。
$_POST // 收集post请求所发送的数据。
$_REQUEST // 包含$_GET和$_POST的功能,但是速度慢。
(5)全局变量
函数内部不能直接访问全局变量。
但是,超全局变量$GLOBALS保存着所有全局变量,因此可以通过其进行访问。
$xxx = 666;
function a(){ echo $GLOBALS[ 'name' ]; }
global $xxx
作用
在函数内部定义局部变量$xxx,并且引用全局变量$xxx。
global、$GLOBALS的区别:前者传址,后者即是全局变量本身。
详细分析:https://www.cnblogs.com/Life-Record/p/4964344.html
弊端
不要使用global局部变量的形式,会污染全局。
(6)变量检测及删除
- isset($a)——检测变量是否初始化。
- unset($a)——断开变量$a与其内存区的关系,且让$a处于未初始化的状态。
(7)静态变量
- 定义
static $a; - 作用
持久保存信息 - 理解
若函数中,定义了静态变量,它只会在函数首次运行时进行定义、初始化,后续再运行该函数,则不会执行定义、初始化,但是它一直会在内存中,可以对其进行赋值操作,从而可以持久存值。
(8)变量作用域
- JS
允许向外访问,禁止向内访问。 - PHP
禁止双向访问,只能通过$GLOBALS、传址方式访问。
10、字符串相关知识点
(1)双引号中可以插入变量
// 花括号
$xxx = 'HelloWorld';
echo "你好{$xxx}tony"; // 你好HelloWorldtony
// 使用花括号包裹变量,防止与随后的字符混淆,被识别为$xxxtony变量。
// 尾随逗号、空格
echo '你好$xxx,tony'; // 你好HelloWorld,tony
echo '你好$xxx tony'; // 你好HelloWorld tony
// 单引号
echo "你好'$xxx'tony"; // 你好'HelloWorld'tony
(2)声明编码规则,防止中文乱码
header("content-type: text/html; charset: utf-8");
(3)转义字符
注意转义字符在视图层中,渲染效果的差异性。
多个\n在浏览器中,只会渲染出一个空格。
(4)大篇幅字符串
$str = <<<xxx // 内容随便写,如:html
xxx;
(5)字符串拼接
echo $a.$b.'xxx';
(6)字符长度判断
strlen($str) // 英文
mb_strlen($str, 'utf8') // 中文
mb——multi bit多字节
(7)字符头尾修剪
trim()
ltrim()
rtrim()
(8)大小写转换
strtoupper() // 全部转为大写
strtolower() // 全部转为小写
ucfirst() // 首字母转为大写
ucwords() // 每个单词首字母转为大写
(9)md5加密
md5($str) // 生成不可逆的32位16进制字符串
(10)字符串、数组互转
explode() // 分
implode() // 合
(11)字符串截取
substr($str, startIndex, length) // 英文
mb_substr($str, startIndex, length, 'utf8') // 中文
11、常量
(1)定义
const XXX = 666; // 性能更好,而且类内外通用。
define( 'XXX', 666 );
规范的命名为大写。
(2)访问性
任何块而言,对内、对外均可访问。
(3)查询已定义的常量
get_defined_constants()
12、三元表达式
(1)?:
false ?: '666' // 返回666
(2)??
$xxx ?? '666' // $xxx未定义或者值为空时,返回666
13、文件引入
(1)include()
弱加载
(2)require()
强加载。若找不到文件,停止后续代码执行
(3)include_once()、require_once()
只加载一次,防止重复加载
14、命名空间
(1)概念
- 根目录
当前文件。 - 子目录
文件内的命名空间、引入文件的命名空间。
命名空间可嵌套,可看作文件夹。
(2)定义
namespace xxx;
(3)作用
防止同一个文件中、文件之间,同名函数冲突。
首个命名空间定义,必须放在文件顶部。
(4)无冲突的访问调用
use \namespace1\testFn as testFn1;
use \namespace1\testFn as testFn2;
testFn1();
testFn1();
15、三点运算符、默认参数
与ES6无异。
16、函数传参约束
(1)弱约束
在定义参数时,前面加上参数类型,可以限制参数,但是允许可转换可以情况。
若定义参数(int $xxx),' 666 '可以正常传入。
(2)强约束
弱约束的基础上,在文件顶部加上严格模式语句,此时传入参数必须与定义参数相符。
// 严格模式
declare(strict_types = 1);
17、函数返回约束
写法
在左花括号前加上 : 类型
function xxx(): int {} // 整型
function xxx(): ?int {} // 整型或者null
function xxx(): void {} // 无返回
若函数不加return, 默认返回null。
18、变量函数
function abc(){};
$xxx = 'abc';
$xxx();——abc();
19、数组
(1)普通数组
[ 1, 2, 3 ]
(2)关联数组
[ 'name' => 'tony', 'age' => 18 ]
(3)指针选择索引项,并返回
current($array) // 表示当前索引项
next($array) // 移动指针到下个索引项,且表示当前索引项
prev($array) // 移动指针到上个索引项,且表示当前索引项
key($array) // 当前索引
新建数组默认指针指向首位。
(4)遍历
foreach( $array as $item ){} // 最常用
list($a, $b, $c) // 相当于一个遍历操作的中介
(5)遍历且操作数组
array_filter( $array, $callback ) // 输出过滤
array_map( $callback, $array ) // 更改索引项内容
array_walk_recursive( $array, fn ) // 升级版array_map(),遍历且递归,深入子组数
array_values( $array ) // 遍历时,返回当前索引项的值,配合filter和map使用
(6)堆栈
unshift($array, $item) // 头进
shift($item) // 头出
push($array, $item) // 尾进
pop($item) // 尾出
array_merge( $array1, $array2 ) // 数组合并,相同键名的项则替换
(7)长度
count($array)
(8)key、value大小写切换
arrray_change_key_case( $array, CASE_UPPER / CASE_LOWER ) // 切换key为大小写
array_change_value_case( $array, CASE_UPPER / CASE_LOWER ) // 切换value为大小写
(9)序列化缓存存取
- 概念
实际上是将数组转成字符串后,存到特定文件中。 - 关键函数
serialize($array) // 序列化为字符串
unserialize($str) // 反序列化为数组
file_get_contents( $fileName ) // 取出文件内容
file_put_contents( $fileName, $str ) // 内容存放到文件
20、时间
(1)概念
时区影响时间。
(2)读写时区
date_default_timezone_get() // 获取当前设置的时区
date_default_timezone_set( 'PRC' ) // 设置时区为中国
(3)返回时间
date( 'Y-m-d H-i-s' ) // 规定格式输出
getdate() // 输出时间数组(将时分秒拆分,好用)
(4)返回时间戳
time() // 返回秒
microtime() // 返回微秒
strtotime() // 涵盖时间、时间戳功能
(5)使用类,操作时间、时间戳(与JS相似)
DataTime() // 关键作用
DataInterval() // 辅助作用
21、计算
ceil($float) // 向上取整
floor($float) // 向下取整
round($float) // 四舍五入
max($num1, $num2) // 取最大值
min($num1, $num2) // 取最小值
mt_rand($startNum, $endNum) // 取范围内随机数
22、php常用打印
echo // 擅长打印简单类型,允许多个
print_r() // 擅长打印数组、对象的结构
var_dump() // 升级版print_r,附带类型信息,允许多个
var_export() // 打印出符合php语法的数组
详细分析:https://blog.csdn.net/qq_25600055/article/details/80824443
23、连接符
. // 字符串拼接,相当于JS的 +
-> // 调用方法,相当于JS的 .
=> // 键值关联,相当于JS数组中键值对的 :
24、错误
(1)错误类型
- 警告后,后续代码会继续执行。
- 致命错误后,立即停止执行代码。
(2)错误屏蔽
- 错误屏蔽符@(@表达式)
- php.ini中,关掉display_errors。
作用是防止错误信息在页面上打印,影响用户体验。
(3)错误日志
- 概念
php错误信息总会在错误日志上记录。 - 路径
php.ini中,error_log的值。
25、类
(1)格式
class TestClass{
public $xxx;
public function yyy(){}
public function __construct( $name ){
$this->name = $name;——通过实例参数,初始化属性。
}
}
(2)专用名词
- 继承 = 派生
- 父类 = 基类
- 子类 = 派生类
26、继承
(1)格式
class Child extends Parent{ }
(2)访问权限符
(3)方法重写
若子类与父类中,存在同名方法,即是方法重写。
(4)parent关键字
- 若子类重写了方法,即会覆盖原方法。
- 若子类重写了方法,并且在新方法内部开头,加上parent::method(),则只会在原有基础上,添加功能。
public function xxx(){
parent::xxx();
// 新增功能,不会覆盖原语句
}
(5)final关键字
final class TestClass(){} // 该类禁止被继承
final public function test(){} // 该方法禁止被重写
(6)继承后修改访问权限
只能往开放方向修改
// 父
protected $xxx;
// 子
public $xxx;
27、连接数据库所需要的库
(1)mysqli
php7+
(2)mysql
php7之前版本
28、连接数据库流程
(1)连接到数据库平台
$link = mysqli_connect( ip, username, password );
(2)连接失败处理
if( !$link ){ exit( '数据库连接失败' ); }
(3)设置字符集
mysqli_set_charset( $link, 'utf8' );
(4)选择数据库
mysqli_select_db( $link, 库名 );
(5)准备sql语句(增删改查)
$sql = 'sql语句';
(6)发送sql语句
$res = mysqli_query( $link, $sql );
(7)返回处理结果(内容在下节)
(8)关闭与平台的连接,释放资源
mysqli_close( $link );
29、返回处理结果的函数
(1)返回关联数组,并且指针会往下条数据移动
mysqli_fetch_assoc( $res );
(2)返回索引数组
mysqli_fetch_row( $res );
(3)返回关联、索引数组的合并数组
mysqli_fetch_array( $res );
(4)返回sql语句查询的数据条数
mysqli_num_rows( $res );
(5)返回修改、删除,即受影响的数据条数
mysqli_affected_rows( $link );
(6)返回刚才增加数据的id
mysqli_insert_id( $link );
30、<? = $xxx?> 等价于 <?php echo $xxx?>
31、使用GD库绘画
常作用于绘制水印、动态图像验证码。
- 创建画布
- 创建颜色
- 绘制内容
- 说明mime类型
- 输出图片
- 销毁画布
32、会话控制
(1)cookie
setcookie() // 增删cookie
$_COOKIE // 保存所有cookie
(2)session
session_start() // 打开session存储区(必须)
session_destroy() // 释放session
$_SESSION[ 'key' ] = 'value' // 增加session
unset( $_SESSION[ 'key' ] ) // 删除session
33、文件操作(方式一)
(1)打印文件内容
readfile(url)
(2)以数组形式,返回文件内容
file(url)
(3)以带格式字符串的形式,返回文件内容
file_get_contents( url )
(4)替换文件内容
file_put_contents( url, $str )
34、文件操作(方式二)
(1)以某权限打开文件,返回该文件的资源对象。(根据权限,开放相应函数)
$fp = fopen( url, '权限代号' )
// 权限代号
r // 只读
r+ // 读写
w // 只写
w+ // 读写
a // 只写,后续补充文件内容,不覆盖内容。
a+ // 读写,后续补充文件内容,不覆盖内容。
(2)写入内容
fwrite( $fp, $str )
(3)移动光标位置(操作关键)
fseek( $fp, index )
(4)读取内容
fread( $fp, $num )
(5)关闭文件
fclose( $fp )
35、文件信息、判断
文件信息、判断.png36、文件夹操作
目录操作.png37、删除深层文件夹下文件(递归)
递归深入文件夹.png38、模板引擎
概念
php为控制器,html为页面模板。控制器组织模板,生成新页面,达到php、html分离。
39、魔术方法
(1)概念
在达到触发条件时,系统自动触发的方法。因此,在类中定义即可。
(2)__get( $name )
- 触发条件:访问实例protected / private成员时
- 参数:成员名
(3)__set( $name, $value )
- 触发条件:设置实例protected / private成员时
- 参数:成员名、成员的值
(4)__unset( $name )
- 触发条件:删除实例protected / private成员时
- 参数:成员名
(5)__isset( $name )
- 触发条件:判断实例protected / private成员时
- 参数:成员名
(6)__construct( $name1, $name2, ... )
- 触发条件:创建实例时
- 参数:成员名
(7)__destruct()
- 触发条件:实例被销毁时(如:脚本运行结束)
- 参数:自定义
(8)__call( $name, $array )
- 触发条件:调用未定义的对象方法时
- 参数:方法名、该方法参数组成的数组
(9)__callStatic()
- 触发条件:调用未定义的静态方法时
- 参数:方法名、该方法参数组成的数组
该魔术方法也是静态的
(10)__autoload( $name )
- 触发条件:创建未定义类的实例时
- 参数:该未定义类名
由于类是未定义的,因此该魔术方法必须写在类外
(11)其他魔术方法
- __toString()
- __debugInfo()
- __sleep()
- __wakeup()
- __clone()
40、类中常量、静态成员的调用
(1)调用时
用 :: 连接
(2)在类内
可以用self代替$this
(3)在类外
可以用类名直接调用(Person::NAME)
41、静态成员、实例成员
(1)静态成员只能被类,访问调用。(因此,成员内部无$this)
(2)实例成员只能被实例,访问调用。
42、抽象类
(1)比拟
伟大的父辈们,朴素内敛。每个父辈的祖训,当代子辈必须谨记。
(2)特性
(3)关键词(abstract)
43、接口
(1)关系
类 > 抽象类 > 接口
(2)概念
接口.png
44、trait(多继承)
(1)继承方式
trait Yello{ }
trait People{ }
class Chinese{
use Yello, People;
}
(2)概念
trait.png
45、异常处理
(1)概念
异常处理.png
(2)格式
异常处理标准格式.png
(3)自定义异常处理
自定义异常处理.png
46、PDO
(1)定义:通用型数据库连接工具。
(2)作用:使用PDO库,代替其他数据库专用连接库。因此,一份连接数据库的代码,可以作用于不同类型的数据库。
(3)准备工作
想连接哪个数据库,就先要为PDO安装相应数据库驱动(插件的插件)。
安装方法:更改php.ini或者设置集成环境软件。
(4)概念
PDO-1.png
PDO-2.png
PDO-3.png
47、PHP标准规范(PSR)
48、json
(1)json_encode() ——php转json字符串。
(2)json_decode() ——json转php对象。
(3)防止在转码中,中文乱码的现象:加入可选参数。
网友评论