php7

作者: 简栋梁 | 来源:发表于2019-02-09 16:38 被阅读0次
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的功能,但是速度慢。

详细分析:http://www.runoob.com/php/php-superglobals.html

(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处于未初始化的状态。

定义、初始化的关系
https://zhidao.baidu.com/question/108348358.html

(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、文件信息、判断
文件信息、判断.png
36、文件夹操作
目录操作.png
37、删除深层文件夹下文件(递归)
递归深入文件夹.png
38、模板引擎

概念
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)特性

抽象类.png
(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)

官网:https://psr.phphub.org/

48、json

(1)json_encode() ——php转json字符串。
(2)json_decode() ——json转php对象。
(3)防止在转码中,中文乱码的现象:加入可选参数。

相关文章

网友评论

      本文标题:php7

      本文链接:https://www.haomeiwen.com/subject/ovwnsqtx.html