iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >php和tp5学习笔记
  • 297
分享到

php和tp5学习笔记

php学习开发语言 2023-08-30 23:08:01 297人浏览 八月长安
摘要

之前看过PHP的基础教学视频,了解了一下,自己没有上手实践,现在为了项目需要,需要扎实学习一下,所以做一下笔记吧。 php学习笔记 1.环境1.用phpstudy搭建php环境2.搭建thin

之前看过PHP的基础教学视频,了解了一下,自己没有上手实践,现在为了项目需要,需要扎实学习一下,所以做一下笔记吧。

php学习笔记

1.环境

1.用phpstudy搭建php环境

之前看过一个4小时的基础视频,感觉不错,没基础的可以去了解下;然后就是去phpstudy安装小皮面板,搭建服务器环境;然后安装phpstORM,可以参考这个,包括了资源安装破解汉化。记得修改hosts文件C:\windows\System32\drivers\etc
搭建成功后:在这里插入图片描述
然后开始学习php进阶知识,这里我看了某博主的学习视频,开始动态网站开发的学习。首先是Hello World。
在这里插入图片描述
这里设置一下本地服务器的文件地址
在这里插入图片描述
在这里插入图片描述
这里之后就搁置了,没有继续学习php,不过接下来打算直接学习thinkphp5框架,至于php的知识可以看看手册了解一下。

2.搭建thinkphp环境

  1. 安装启动phpstudy.
  2. composer官网下载安装,composer类似于python里的pip,是php的安装包管理器,安装地址选择如下:
    在这里插入图片描述
  3. 在目录C:\phpstudy_pro\WWW下打开cmd,下载tp5.1到你的工程tp5.1test下
composer create-project topthink/think=5.1.* tp5.1test
  1. 打开phpstudy(apach和Mysql),修改网站地址为你的工程文件夹的public,以后就会直接访问这里面的index文件(入口文件),如下
    在这里插入图片描述

  2. C:\Windows\System32\drivers\etc\hosts里面添加域名,之后就可以用Http://mytp5_study.com/访问了。

127.0.0.1     mytp5_study.com
  1. 如果要更新项目版本,直接进入项目根目录,然后直接如下代码:
composer update topthink/framework

2.知识点

2.1 URL

  1. http://serverName/index.php/模块名/控制器名/方法名/参数名/参数值…
  2. 默认public 目录内的 index.php 为入口文件
  3. 在config 目录下的 app.php里面有设置默认模块名,默认控制器名和默认操作名。

2.2 模块

  1. ThinkPHP5.1 默认是多模块架构,也可以设置为单模块操作;
  2. 所有模块的命名空间以 app 这三个字母作为根命名空间(可通过环境变量更改);
  3. 模块下的类库文件命名空间统一为:app\模块名
  4. ThinkPHP5.1 提供了一个类库 Env 来获取环境变量;return Env::get(‘app_path’)
系统路径Env参数名称
应用根目录root_path
应用目录app_path
框架目录think_path
配置目录config_path
扩展目录extend_path
composer 目录vendor_path
运行缓存目录runtime_path
路由目录route_path
当前模块目录modu

2.3 控制器

  1. 类名和文件名大小写保持一致,并采用驼峰式(首字母大写);
  2. 如果创建的是双字母组合,比如 class HelloWorld;URL 访问时必须为:public/hello_world;如果你想原样的方式访问 URL,则需要关闭配置文件中自动转换:'url_convert' => false
  3. 如果想改变根命名空间 app 为其它,可以在根目录下创建.env 文件;然后写上配对的键值对即可,app_namespace=application;
  4. ThinkPHP 直接采用方法内 return 返回的方式直接就输出了;使用 JSON 输出array,直接采用 json 函数;
  5. 使用 view输出模版,默认输出方式为 html 格式输出,可以更改配置文件里的默认输出类型:'default_return_type' => 'json',
  6. 如果继承了基类控制器,那么可以定义控制器初始化方法:initialize();initialize()方法会在调用控制器方法之前执行,initialize()方法不需要任何返回值,输出用 PHP 方式,return 无效。
  7. 前置操作:继承 Controller 类后可以设置一个$befoReactionList 属性来创建前置方法;
<?phpnamespace app\index\controller;use think\Controller;//首先要继承Controller类class Before extends Controller{    protected $beforeActionList=[//设置前置方法属性        'first',        'second' => ['except'=>'one'],//除了调用one以外的方法,都先执行seconde方法        'third'=>['only'=>'one,two']//只有one方法或者two方法,在执行前先执行third方法    ];    //受保护方法    protected function first()    {        echo "first
"
; } protected function second() { echo "second
"
; } protected function third() { echo "third
"
; } //方法 public function one() { return "one"; } public function two() { return "two"; }}
  1. 跳转和重定向:. Controller 类提供了两个跳转的方法,success(msg,url)和 error(msg);
public function index(){if ($this->flag) {//如果不指定 url,则返回$_SERVER['HTTP_REFERER']$this->success('成功!', '../');} else {//自动返回前一页$this->error('失败!');}}

成功或错误有一个固定的页面模版:‘thinkphp/tpl/dispatch_jump.tpl’;在 app.php 配置文件中,我们可以更改自己个性化的跳转页面。

变量说明
$data要返回的数据
$msg页面提示信息
$code返回的 code
$wait跳转等待时间 单位为秒
$url跳转页面地址
  1. 空方法和空控制器
    当访问了一个不存在的方法时,系统会报错,我们可以使用_empty()来拦截;
public function _empty($name){return '不存在当前方法:'.$name;}

当访问了一个不存在的控制器时,系统也会报错,我们可以使用 Error 类来拦截(系统默认为 Error 类,如果需要自定义,则在 app.php 配置文件中修改"empty_controller")

class Error{public function index(Request $request){return '当前控制器不存在:'.$request->controller();}}

2.4 数据库

连接:根目录的 config/database.php 设置数据库连接信息,这里的'prefix'=> 'tp_';然后在control里面拿到表tp_user的信息,这里有两种方式访问表:table和name

<?phpnamespace app\Index\controller;use think\Db;class Data{    public function index()    {    // $data = Db::table('tp_user')->select();    $data = Db::name('user')->select();    return json($data);    }}

也可以创建model,然后在control中导入User_model使用:

use app\Index\model\User;,,,$data=User::select();

要调试 sql 是否正确,建议打开 app_trace,可以查看原生 SQL
2. 查询
find():只查询一条数据,没有查询到任何值,则返回 null。
findOrEmpty():查询一条数据,但在没有数据时返回一个空数组
findOrFail():查询一条数据,在没有数据时抛出一个异常。
select():获取多列数据,查询不到任何数据时返回空数组。
selectOrFail():查询不到任何数据时抛出异常。

Db::getLastSql():得到最近一条 SQL 查询的原生语句。
where():指定数据查询(Db::table(‘tp_user’)->where(‘id’, 27)->find())。
value():查询指定字段的值(单个),没有数据返回 null。
colunm():查询指定列的值(多个),没有数据返回空数组。
order():按指定要求排序
removeOption():清理掉上一次查询保留的值。
3.增
insert():向数据表添加一条数据, 如果新增成功,insert()方法会返回一个 1 值,如果你添加一个不存在的数据,会抛出一个异常 Exception,如果采用的是 mysql 数据库,支持replace写入,使用 data()方法来设置添加的数据数组(Db::name(‘user’)->data($data)->insert();)。

public function add()   {    $data=[        'id'=>2,        'name'=>'李白',        'age'=>55,        'time'=>date('Y-m-d H:i:s')    ];    Db::name('user')->insert($data);   }

insertGetId():在新增成功后返回当前数据 ID。
insertAll():批量新增数据,但要保持数组结构一致;也支持 data()方法,和单独新增类似;也支持 reaplce 写入,和单独新增类似(Db::name(‘user’)->insertAll($data, true);)。
4.改
update():修改数据,修改成功返回影响行数,没有修改返回 0;或者使用 data()方法传入要修改的数组,如果两边都传入会合并;如果修改数组中包含主键,那么可以直接修改不用查询。

public function update()   {    $data=[        'name'=>'苏轼'    ];    $out=Db::name('user')->where('id',2)->update($data);     return $out;   }

inc():对字段增值。
dec():对字段减值。
exp():在字段中使用 mysql 函数。
raw():在列表中修改更新,更加容易方便;
setField():更新一个字段值;
增值 setInc()和减值 setDec(),值如果不指定第二个参数,则步长为 1。
5.删
delete():根据主键直接删除,还可以用列表删除多条,通过where()方法来删除,true 参数删除数据表所有数据(Db::name(‘user’)->delete(true))。

public function delete()   {    Db::name('user')->where('id',1)->delete();   }

比较查询:where(字段名,表达式,查询条件)(<>、>、<、>=、<=)。

class Search{    public function compare()    {        $result=Db::name('user')->where('id','<>',3)->select();#查询id不等于3的所有数据        // return Db::getLastSql();#SELECT * FROM `tp_user` WHERE `id` <> 3        return json($result);    }}

区间查询:
like 表达式(模糊查询),支持数组传递进行模糊查询;whereLike()和 whereNoLike()。

Db::name('user')->where('email','like',['xiao%','wu%'], 'or')->select();SELECT * FROM `tp_user` WHERE (`email` LIKE 'xiao%' OR `email` LIKE 'wu%')

between 表达式具有两个快捷方式 whereBetween()和 whereNotBetween()。
in 表达式具有两个快捷方式 whereIn()和 whereNotIn()。
null 表达式具有两个快捷方式 whereNull()和 whereNotNull()。
exp 表达式可以自定义字段后的 SQL 语句。
8.时间查询
使用>、<、>=、<=time来筛选匹配时间的数据;
使用 between 关键字来设置时间的区间;
快捷方法 whereTime(),直接使用>、<、>=、<=;
快捷方法between 和 not between
whereBetweenTime(),如果只有一个参数就表示一天

关键字说明
today 或 d今天
yesterday昨天
week 或 w本周
last week上周
month 或 m本月
last month上月
year 或 y今年
last year去年

聚合查询
count():可以求出所查询数据的数量,可设置指定 id,比如有空值(Null)的 uid,不会计算数量。
max():求出所查询数据字段的最大值;求出的值不是数值,则通过第二参数强制转换(Db::name(‘user’)->max(‘price’, false))。
min(), avg(), sum()。
10.子查询
使用 fetchSql()方法,可以设置不执行 SQL,而返回 SQL 语句,默认 true;

Db::name('user')->fetchSql(true)->select();

使用 buidSql()方法,也是返回 SQL 语句,但不需要再执行 select(),且有括号;

Db::name('user')->buildSql(true);

闭包的方式执行子查询

$result = Db::name('one')->where('id', 'in', function ($query) {$query->name('two')->where('gender', '男')>field('uid');})->select();

原生查询
使用 query()方法,进行原生 SQL 查询,适用于读取操作,SQL 错误返回 false。
使用 execute 方法,进行原生 SQL 更新写入等,SQL 错误返回 false。
12.链式查询方法
where()方法:通过键值对来数组键值对匹配的查询方式;通过数组里的数组拼装方式来查询; 字符串形式传递。
field()方法:指定要查询的字段;给指定的字段设置别名;可以直接给字段设置 MySQL 函数; 使用 field()方法中字段排除,可以屏蔽掉想要不显示的字段。
alias()方法:给数据库起一个别名。
limit()方法:限制获取输出数据的个数;传递两个参数,比如从第 3 条开始显示 5 条 limit(2,5);分页模式(第几条开始,一共几条)。
page()分页方法,优化了 limit()方法,无须计算分页条数;Db::name('user')->page(1, 5)->select();
order()方法,可以指定排序方式,没有指定第二参数,默认 asc。
group()方法,多字段分组统计。
having,使用 group()分组之后,再使用 having()进行筛选。

2.5 模型

定义:class User extends Model;模型类需要去除表前缀(tp_),采用驼峰式命名;可以开启应用类后缀(class_suffix),设置完毕后,所有的控制器类名和模型类名需要加上 Controller 和 Model。
默认主键为 id,你可以设置其它主键,比如 uid:protected $pk = 'uid';
从控制器端调用模型操作,如果和控制器类名重复,可以设置别名;use app\model\User as UserModel
模型和控制器一样,也有初始化,在这里必须设置 static 静态方法:protected static function init()
模型操作数据和数据库操作一样,只不过不需要指定表:UserModel::select();
数据库操作返回的列表是一个二维数组,而模型操作返回的是一个结果集:[[]] 和 [{}]。
2.添加
首先需要实例化模型($user= new UserModel();),然后再对模型进行数据操作。
可以先设置对象属性值,然后通过save方法保存一条数据,,save()返回布尔值。

$user->id=5;        $user->username='特斯拉';        $user->age=44;        $user->time=date('Y-m-d H:i:s');        $user->save();

也可以通过 save()传递数据数组的方式,来新增数据, 当新增成功后,使用$user->id,可以获得自增 ID:echo $user->id;

$user->save([             'id'   =>7,            'username'=>'爱因斯坦',            'age'=>84,            'time'=>date('Y-m-d H:i:s')            ]);

使用 saveAll()方法,可以批量新增数据,返回批量新增的数组。

$dataAll=[            [     'username'=>'高斯',                'age'=>54,                'time'=>date('Y-m-d H:i:s'),            ],            [                 'username'=>'开普勒',                'age'=>43,                'time'=>date('Y-m-d H:i:s'),                ]        ];        $user->saveAll($dataAll);

删除
对模型类使用get()方法,通过主键查询到对象,然后应用delet()方法删除。

$user=UserModel::get(3);$user->delete();

对模型类使用destory()方法,传入主键,删除数据

UserModel::destory([5,7]);

通过数据库类的查询条件删除;

UserModel::where('id', '>', 80)->delete();

使用闭包的方式进行删除;

UserModel::destroy(function ($query) {$query->where('id', '>', 80);});

修改
使用get()方法通过主键获取对象,然后修改对象数据,最后save()

$user = UserModel::get(118);$user->username = '李黑';$user->email = 'lihei@163.com';$user->save();

通过 where()方法结合 find()方法的查询条件获取的数据,进行修改;

$user = UserModel::where('username', '李黑')->find();$user->username = '李白';$user->email = 'libai@163.com';$user->save();

通过 saveAll()方法,可以批量修改数据,返回被修改的数据集合;批量更新 saveAll()只能通过主键 id 进行更新。
使用静态方法结合 update()方法来更新数据。
用 isUpdate()方法显示操作。

//显示更新$user->isUpdate(true)->save();//显示新增$user->isUpdate(false)->save();

模型获取器
该方法为 public,命名规范为:getFieldAttr();获取时return $user->status;

public function getStatusAttr($value){$status = [-1=>'删除', 0=>'禁用', 1=>'正常', 2=>'待审核'];return $status[$value];}

如果你定义了获取器,并且想获取原始值,可以使用 getData()方法;return $user->getData('status');
直接输出无参数的 getData(),可以得到原始值,而$user 输出是改变后的;

dump($user->getData());dump($user);

使用 WithAttr 在控制器端实现动态获取器。
6.模型修改器
模型修改器的命名规则为:setFieldAttr
7.模型搜索器
一个搜索器对应模型的一个特殊方法,该方法为 public; 方法名的命名规范为:searchFieldNameAttr();在控制器端,通过 withSearch()静态方法实现模型搜索器的调用。
8.模型数据集
数据集由all()和 select()方法返回数据集对象; 判断数据集是否为空,我们需要采用 isEmpty()方法; 使用模型方法 hidden()可以隐藏某个字段,使用 visible()显示只某个字段; 使用 append()可以添加某个获取器字段,使用 withAttr()对字段进行函数处理; 使用模型方法 filter()对筛选的数据进行过滤; 使用 diff()和 intersect()方法可以计算两个数据集的差集和交集;
9. 模型自动时间戳
系统全局开启统自动创建和更新时间戳功能在 database.php 中,设置'auto_timestamp' => true;动时间戳开启后,会自动写入 create_time 和 update_time 两个字段;的默认的类型是 int,如果是时间类型,可以更改如下:

'auto_timestamp' => 'datetime', //或protected $autoWriteTimestamp = 'datetime'

如果只想设置某一个模型开启,需要设置特有字段:protected $autoWriteTimestamp = true;
如果业务中只需要 create_time 而不需要 update_time,可以关闭它;protected $updateTime = false;也可以动态实现不修改 update_time:$user->isAutoWriteTimestamp(false)->save()
10.模型只读字段
模型中可以设置只读字段,就是无法被修改的字段设置:protected $readonly = ['username', 'email'];除了在模型端设置,也可以动态设置只读字段:$user->readonly(['username', 'email'])->save()
11. 模型类型转换
系统可以通过模型端设置写入或读取时对字段类型进行转换;数据库查询读取的字段很多都是字符串类型,我们可以转换成如下类型:
integer(整型)、float(浮点型)、boolean(布尔型)、array(数组)、object(对象)、serialize(序列化)、json(json)、timestamp(时间戳)、datetime(日期)
通过var_dump($user->price);获取字段类型
模型中数据完成通过 auto、insert 和 update 三种形式完成;
12.模型查询范围和输出

2.6 模板

2.7 路由

来源地址:https://blog.csdn.net/weixin_38226321/article/details/129068805

--结束END--

本文标题: php和tp5学习笔记

本文链接: https://www.lsjlt.com/news/383878.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • php和tp5学习笔记
    之前看过php的基础教学视频,了解了一下,自己没有上手实践,现在为了项目需要,需要扎实学习一下,所以做一下笔记吧。 php学习笔记 1.环境1.用phpstudy搭建php环境2.搭建thin...
    99+
    2023-08-30
    php 学习 开发语言
  • 学习笔记-TP5框架学习笔记\(路由\)
    TP5框架简单理解 (PS:只做粗略、关键知识的记录,TP程序的开始。详情请阅读官方手册) 1. 架构总览 TP程序的开始 PHP >=5.3.0, PHP7 ThinkPHP5.0应用基于MVC(模型-视图-控制器)的方...
    99+
    2023-10-25
    学习 php 开发语言
  • PHP 学习笔记 (3)
    昨天笔记2说道了PHP的标记以及短标记,今天记录下如何吧PHP从HTML分离手册参考:http://www.php.net/manual/zh/language.basic-syntax.phpmode.phpPHP手册告诉我们,PHP凡是...
    99+
    2023-01-31
    学习笔记 PHP
  • 如何在 Linux 上学习 PHP 和 Apache?附带学习笔记!
    PHP 和 Apache 是 Web 开发中最常用的两个工具之一,它们的组合可以用于创建动态网站和 Web 应用程序。本文将向您展示如何在 Linux 系统上学习 PHP 和 Apache,以及如何使用它们来构建 Web 应用程序。 第一...
    99+
    2023-08-17
    linux 学习笔记 apache
  • PHP中的魔术方法和学习笔记
    在PHP中,魔术方法(Magic Methods)是一组特殊的方法,它们以双下划线(__)作为前缀,用于在类中实现一些特殊的行为和功能。这些方法会在特定的情况下自动调用,而不需要我们显式地调用它们。在...
    99+
    2023-10-07
    php 学习 笔记
  • H3CNE学习笔记
      H3CNE五日“游” ——之第一天 废话少说 直接进入真题!!!!(哈哈 ) H3CNE   H3C认证初级网络工程师 第    一   节 路由器、交换机及其操作系统介绍 路由器 1、 路由器的作用 连接具有不同介质的链路 连接网络或...
    99+
    2023-01-31
    学习笔记 H3CNE
  • Python学习笔记
    Python介绍 Python是一种解释型、面向对象的语言。 官网:www.python.org Python环境 解释器:www.python.org/downloads 运行方式: 交互模式。在IDLE中运行。 脚本模式。文件的后缀...
    99+
    2023-01-30
    学习笔记 Python
  • python_os_sys学习笔记
    sys.argv 命令行参数List,第一个元素是程序本身路径 sys.exit(n) 退出程序,正常退出时exit(0) sys.version 获取Python解释程序的版本信息 sy...
    99+
    2023-01-31
    学习笔记 python_os_sys
  • tornado学习笔记
    一.UIMOTHODS: 1.在项目目录创建uimothods.py文件(名称可以任意)内容: def test2(self): return ('hello uimothods')2.tornado项目文件中导入并注册: #导入f...
    99+
    2023-01-30
    学习笔记 tornado
  • Python 学习笔记
    rs=Person.objects.all() all返回的是QuerySet对象,程序并没有真的在数据库中执行SQL语句查询数据,但支持迭代,使用for循环可以获取数据。 print rs.query 会打印出原生sql语句 rs=Pe...
    99+
    2023-01-31
    学习笔记 Python
  • 学习笔记(3)
    1.* 匹配零个或多个字符(通配符中)2.ls 的-d选项不仅仅可以显示指定目录的信息,还可以用来表示不递归子文件夹。  # ls -dl /etc 显示/etc目录的信息  # ls -d /etc 只显示/etc下面的文件夹3.显示/v...
    99+
    2023-01-31
    学习笔记
  • PHP Switch 语句之学习笔记
    PHP 中的 Switch 语句用于执行基于多个不同条件的不同动作。 Switch 语句 如果您希望有选择地执行若干代码块之一,请使用 Switch 语句。 使用 Switch 语句...
    99+
    2022-11-15
    PHP Switch
  • GNS3学习笔记
    最近在自学CCNA,为了搭建路由模拟器先后下载了Boson Network 、DynamipsGUI用的不是很顺手,后来听朋友推荐GNS3很好用,他们报的CCNP培训班老师用的就是GNS,平时的模拟实验都是用这个完成的,由于我本机已有下好的...
    99+
    2023-01-31
    学习笔记
  • python3学习笔记
    好久不用python,努力捡起来ing python3语法 字符串 repr()把其他类型变量转换为字符串 ord()把单个字符转换为相应的ascii码 int()把其他进制的“字符串”转换为十进制 int(str,n...
    99+
    2023-01-31
    学习笔记
  • Kafka 学习笔记
    😀😀😀创作不易,各位看官点赞收藏. 文章目录 Kafka 学习笔记1、消息队列 MQ2、Kafka 下载安装2.1、Zookeeper 方式启动2.2、KRaft 协议启动2.3...
    99+
    2023-08-30
    kafka 学习 笔记
  • MySQL 学习笔记
    😀😀😀创作不易,各位看官点赞收藏. 文章目录 MySQL 学习笔记1、`DQL` 查询语句1.1、基本查询1.2、函数查询1.2.1、单行函数1...
    99+
    2023-10-01
    mysql 学习 笔记
  • PHP学习笔记(观隅反三)
    前言 不知不觉距离上篇PHP的文章 PHP学习笔记(才贯二酉)已经过去好多天了,今天看到推送——1024程序员节,莫名还有些小激动(os:自知自己的一些雕虫小技肯定和程序员这个技术深似海的称号扯不上什...
    99+
    2023-09-01
    1024程序员节 php 开发语言
  • python3 学习笔记
    本人很少写 python 代码, 一般都是用 go 的, 去年时用 python 写过一些收集系统信息的工具, 当时是边看手册边写的. 如今又要用 python 来写一个生成 xlsx 的工具, 就又需要查看手册了, 至于为什么不用 g...
    99+
    2023-01-31
    学习笔记
  • 学习笔记3
    一文件查找和压缩1文件查找locate 搜索依赖于数据库,非实时搜索,搜索新建文件需手动更新,适于搜索稳定不频繁修改文件 find 实时搜索,精确搜索,默认当前目录递归搜索 find用法 -maxdepth...
    99+
    2023-01-31
    学习笔记
  • PHP学习笔记:在线教育与学习平台
    前言:随着互联网的不断发展,在线教育逐渐成为学习的一种新方式。越来越多的学生和学习者选择通过网络获取知识。而在线学习平台的搭建离不开强大的后台支持,而PHP作为一种成熟且功能强大的编程语言,被广泛应用于在线教育平台的开发中。功能需求:在搭建...
    99+
    2023-10-21
    在线教育 PHP 学习平台
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作