阅读源码步骤

1.了解项目依赖

composer.json文件定义了您当前项目的依赖项,以及依赖项的一些相关信息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
"require": {
"php": ">=7.1.0",
"topthink/framework": "dev-master",
"topthink/think-captcha": "^1.0",
"topthink/think-installer": "^1.0.14",
"topthink/think-queue": "1.1.6",
"topthink/think-helper": "^1.0.7",
"karsonzhang/fastadmin-addons": "~1.3.2",
"overtrue/pinyin": "^3.0",
"phpoffice/phpspreadsheet": "1.12",
"overtrue/wechat": "4.2.11",
"nelexa/zip": "^3.3",
"ext-json": "*",
"ext-curl": "*",
"ext-pdo": "*",
"ext-bcmath": "*",
"txthinking/mailer": "^2.0"
},

2.了解项目结构

addons目录:插件存放目录

application: 应用目录 (.htaccess文件为apche可识别的配置文件)

dist: distribution 编译的代码/库

error: 错误页面

extend: 扩展类库目录 用于存放一些自定义的类

runtime: 记录日志

image-20230425143125533.png

project 应用部署目录
├─application 应用目录(可设置)
│ ├─common 公共模块目录(可更改)
│ ├─index 模块目录(可更改)
│ │ ├─config.php 模块配置文件
│ │ ├─common.php 模块函数文件
│ │ ├─controller 控制器目录
│ │ ├─model 模型目录
│ │ ├─view 视图目录
│ │ └─ … 更多类库目录
│ ├─command.php 命令行工具配置文件
│ ├─common.php 应用公共(函数)文件
│ ├─config.php 应用(公共)配置文件
│ ├─database.php 数据库配置文件
│ ├─tags.php 应用行为扩展定义文件
│ └─route.php 路由配置文件
├─extend 扩展类库目录(可定义)
├─public WEB 部署目录(对外访问目录)
│ ├─static 静态资源存放目录(css,js,image)
│ ├─index.php 应用入口文件
│ ├─router.php 快速测试文件
│ └─.htaccess 用于 apache 的重写
├─runtime 应用的运行时目录(可写,可设置)
├─vendor 第三方类库目录(Composer)
├─thinkphp 框架系统目录
│ ├─lang 语言包目录
│ ├─library 框架核心类库目录
│ │ ├─think Think 类库包目录
│ │ └─traits 系统 Traits 目录
│ ├─tpl 系统模板目录
│ ├─.htaccess 用于 apache 的重写
│ ├─.travis.yml CI 定义文件
│ ├─base.php 基础定义文件
│ ├─composer.json composer 定义文件
│ ├─console.php 控制台入口文件
│ ├─convention.php 惯例配置文件
│ ├─helper.php 助手函数文件(可选)
│ ├─LICENSE.txt 授权说明文件
│ ├─phpunit.xml 单元测试配置文件
│ ├─README.md README 文件
│ └─start.php 框架引导文件
├─build.php 自动生成定义文件(参考)
├─composer.json composer 定义文件
├─LICENSE.txt 授权说明文件
├─README.md README 文件
├─think 命令行入口文件

3.追踪请求

  1. parent::_initialize()

父类初始化的时候有内容,子类是会继承的,

但是子类如果也有初始化的时候,父类是会被覆盖掉的,为了保留父类的初始化内容就会使用

  1. 简单的验证手机号码是否正确的正则表达式 /^1\d{10}$/

    /正则/,

    ^表示开头,

    $表示结尾,

    \d表示数字,

    {10}表示前面的\d有10位

  2. Test::$test

1
2
3
4
5
class Test{
public static $test = 1;
public static function test(){
}
}
Test::$test            取得$test属性的值

类中静态方法和静态属性的引用方法

(两个冒号(::)是对类中的方法的静态引用;也就是不需要实例化对象,直接通过类名对类中的方法进行引用)

4 .闭包

​ 1.对闭包的理解
​ 闭包是指有权访问另一个函数作用域中变量的函数,创建闭包的最常见的方式就是在一个函数内创建另一个函数,创建的函数可以访问到当前函数的局部变量。

​ 2.闭包的特点
​ 1.让外部访问函数内部变量变成可能

​ 2.变量会常驻在内存中

​ 3.可以避免使用全局变量,防止全局变量污染;

​ 3.闭包的好处和坏处
​ 好处:可以读取其他函数内部的变量,并将其一直保存在内存中。

​ 坏处:可能会造成内存泄漏或溢出。

5.PHP双引号和单引号区别

1.双引号解析变量,但是单引号不解析变量。
2.在双引号里面插入变量,变量后面如果有英文或中文字符,它会把这个字符和变量拼接起来,视为一整个变量。一定要在变量后面接上特殊字符,例如空格等分开。
3.如果在双引号里面插变量的时候,后面不想有空格,可以拿大括号将变量包起来。
4.双引号解析转义字符,单引号不解析转义字符。但,单引号能解析\' 和\
5.单引号效率高于双引号,尽可能使用单引号
6.双号和单引号可以互插!!!双引号当中插入单引号,单引号当中插入变量,这个变量会被解析。
<?php
$legend = '猛虎';
$NoAlike = "心有'$legend',细嗅蔷薇";
echo $NoAlike;
?>
7.神奇的字符串拼接胶水——(.)点,用来拼接字符串。
8.我们将定界符声明字符串视为双引号一样的功能来看待。

6.var_dump() 是一个函数。向括号()中间插入变量。这个函数,会打印出来数据类型,还会对应显示变量的长度和值。

7.XML

可扩展标记语言 (Extensible Markup Language, XML) ,标准通用标记语言的子集,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。 XML是标准通用标记语言 可扩展性良好,内容与形式分离,遵循严格的语法要求,保值性良好等优点