- thinkphp5.0提示不支持redis,not support: redis
Hero.Lin
redis数据库缓存
安装PHP扩展例如宝塔,其他环境请用命令行,安装redis配置完成以后,修改php.ini把redis扩展打开即可,重启环境
- 【PHP】TP5.0模型关联搜索查询
zzoood
phpTP5phpsql数据库
在ThinkPHP5.0中,模型关联为我们提供了一种便捷的方式来操作数据库,尤其是在进行关联查询时。本文将介绍如何在TP5.0中使用模型关联进行搜索查询,并解决可能出现的报错问题。一、模型方法在TP5.0中,模型方法是实现关联的关键。以下是一个示例,展示了如何关联到user表:/***关联user表*/publicfunctionuser(){return$this->belongsTo(User
- thinkphp mysql cache_TP5之Cache的原理及使用 - thinkphp5.0
weixin_39611546
thinkphpmysqlcache
使用TP5做为项目后台接口,在二级目录下配置nginx1、首先,你要确保在不配置二级目录的情况下,可以通过浏览器访问到。例如:http://www.example.com/End/public/index.php?s=index/index/index2、将下面一location进行二...在当今大流量的互联网之中,Cache的重要性不言而喻。ThinkPhp5作为国内主流框架,提供了强大的Cac
- 【PHP】在ThinkPHP 5.0中设置缓存以提高性能
zzoood
phpphp缓存开发语言
在ThinkPHP5.0中,您可以使用Cache类来设置缓存,以提高应用程序的性能。缓存可以减少对数据库的访问次数,从而提高应用程序的响应速度。首先,确保您已经在config.php文件中启用了缓存。在config.php文件中,将cache配置项设置为true:return[//...'cache'=>true,//...];接下来,我们将使用您提供的代码示例来设置缓存。在这个示例中,我们将缓存
- ThinkPHP5小于5.0.24 远程代码执行高危漏洞 修复方案 bug修复
abiao1981
PHPTHINKPHP
漏洞描述由于ThinkPHP5.0框架对Request类的method处理存在缺陷,导致黑客构造特定的请求,可直接GetWebShell。漏洞评级严重影响版本ThinkPHP5.0系列server('REQUEST_METHOD')?:'GET';}elseif(!$this->method){if(isset($_POST[Config::get('var_method')])){$this->
- ThinkPHP5.0 实现 app微信支付功能
铁匠简记
第一步:建立一个支付控制器pay.php,是由上个页面选择好支付方式之后确认支付后需要经过的控制器(这里选择的是微信支付),代码如下:where($where)->find();//获取支付方式$pay_type=input('post.pay_type');//微信支付或者支付宝支付//获取支付金额$money=input('post.totle_sum');//判断支付方式switch($pa
- thinkphp5.0 auth验证(里面我已经自己修改好了,可以用了)
两个人的幸福online
thinkphp
首先要创立数据表,和导入auth类,放那里都行,记得用命名空间引入就行我这里做一个解释,和用法说明,他是有三个表,一个是,规则表,一个是,用户组表,一个是,用户组和用户的关联表。还有一个是,用户表,不过这个不属于auth,属于自己登陆的。里面表结构我不写了,下面已经很详细了,不懂的在沟通。里面的关键是我添加了,多条规则验证。在下面(//这里是自己判断的,可以添加多条规则用英文逗号,分隔开。)里面,
- ThinkPHP5.0.0~5.0.23RCE 漏洞分析及挖掘思路
昵称还在想呢
PHP代码审计安全web安全php
前言本节我将分析thinkphp5.0.x版本的RCE漏洞,根据漏洞的研究模拟挖掘此漏洞的思路本次分析框架下载,由于官方已经下架了相关的下载接口,这里我们用三方下载一份v5.0.22版本的升级中...https://www.codejie.net/5828.html附赠thinkphp5.0官方开发手册架构总览·ThinkPHP5.0完全开发手册·看云ThinkPHPV5.0是一个为API开发而设
- thinkphp mysql limit_ThinkPHP5.0框架开发--第7章 TP5.0数据库操作
米国脱口秀
thinkphpmysqllimit
ThinkPHP5.0框架开发--第7章TP5.0数据库操作第7章TP5.0数据库操作=========================================================今日学习1、TP5.0支持数据库类型Mysql、SqlServer、PgSQL、Sqlite等数据库的支持。2、如何连接数据库1、配置文件定义a、配置文件目录C:\AppServ\www\tp5\ap
- 【PHP】TP5.0及Fastadmin中将查询数据返回对象转为数组
zzoood
phpTP5php开发语言
目录方法一:使用collection助手函数方法二:设置返回数据集的对象名在ThinkPHP5.0中,对模型查询返回的对象进行了优化,默认情况下,使用all或select方法查询数据库将返回一个对象数组集合。这个集合是模型的实例数组,不是传统意义上的数组。因此,直接调用toArray方法并不能将其转换为真正的多维数组。为了帮助开发者更好地理解和使用对象集合,以下是一些指导建议:理解对象数组:首先,
- 【PHP】TP5验证规则自定义
zzoood
php前端javascriptphp
目录概述独立验证静态调用内置规则参考文档概述ThinkPHP5.0验证使用独立的\think\Validate类或者验证器进行验证。独立验证$rule=['name'=>'require|max:25','age'=>'number|between:1,120','email'=>'email',];$msg=['name.require'=>'名称必须','name.max'=>'名称最多不能超
- thinkphp php区别,Thinkphp是什么意思?thinkphp5.0与thinkphp3.2之间的区别
致力于
thinkphpphp区别
提起php很多人都会想到thinkphp,那么hinkphp是什么?thinkphp是不是php?thinkphp和php的区别是什么?下面php中文网就为大家讲解一下Thinkphp。一:Thinkphp是什么Thinkphp是一种免费的开发框架,最早Thinkphp是为了简化开发而产生的,Thinkphp同时也是遵循循Apache2协议,最初是从Struts演变过来,也把国外一些好的框架模式进
- thinkphp8.0是否兼容thinkphp5.0?
AlphaFinance
PHPphp
ThinkPHP8.0是ThinkPHP框架的一个较新版本,而ThinkPHP5.0是其前一个主要版本。每当框架进行主要版本升级时,都会有许多变化,可能包括对现有功能的改进、新功能的添加以及不再支持旧功能。这些变化可能会导致与以前版本的不兼容。ThinkPHP8.0相对于5.0版本来说,在很多方面都进行了改进和更新,包括:核心架构的重构对PHP新版本的特性支持安全性的增强性能的提升代码的现代化,例
- ThinkPHP5.0之extend标签模板继承
扫地鼠Gordon
ThinkPHP
extend继承当前所在模块的模板{extendname="common/base"/}extend继承非当前所在模块的模板(格式:模块名@view下面的文件夹/模板文件){extendname="common@common/base"/}
- thinkphp5.0使用RabbitMq
Miss 古月先生
rabbitmqdocker分布式
本次操作是以docker为基础进行操作1.在docker上pullrabbitmqdockerpullrabbitmq:managementdockerrun-d--hostnamerabbit-host--restartalways--namerabbitmq-eRABBITMQ_DEFAULT_USER=admin-eRABBITMQ_DEFAULT_PASS=123456-p15672:15
- Cenos7系统通过链接一键安装LAMP项目环境(linux,apache,mysql,php)
阿里嘎多f
Linuxphplinuxmysqlapache
前言:嫌装环境麻烦,以下介绍自动安装环境的方法一.环境配置根据自己需要选择操作系统:CenOS7.x以上Web服务器:Apache2.4数据库:MySQL5.7开发框架:ThinkPHP5.0(PHP5.0以上)部署位置:本地VMware15.5以上二.一键生成指令,安装LAMP环境如下链接可以设置一键安装LAMP环境LNMP一键安装包无人值守命令生成器执行前的先查看是否安装wgetrpm-qa|
- ThinkPHP5.0(TP5)+Layui实现接口调用动态表格
爱❤放
TP5学习TP5layui动态表格分页接口
最近在学习layui框架,后端用的是TP5,在使用动态表格的时候走了不少弯路,先将主要存在的问题列举如下:使用layui动态表格的前端代码为:查看编辑删除//前提你要引入layui的js才能使用以下代码layui.use(['table'],function(){vartable=layui.table;//动态创建表格table.render({//选择表格的idelem:'#zclb',//选
- thinkPHP5的应用运行流程与生命周期
garvin
对ThinkPHP5.0的应用请求的生命周期做大致的介绍1、入口文件一般入口文件以定义一些常量为主,比如项目目录和框架目录2、加载框架引导文件接下来就是执行框架的引导文件,start.php文件就是系统默认的一个引导文件。在引导文件中,会依次执行下面操作:加载系统常量定义;加载环境变量定义文件;注册自动加载机制;注册错误和异常处理机制;加载惯例配置文件;执行应用;start.php引导文件首先会调
- php框架进入命令行,ThinkPHP5.0自定义命令行的使用
weixin_39699670
php框架进入命令行
应用场景:在工作中,我们通常需要定时的执行一些脚本,例如某个商城固定每月1号结算上个月会员的佣金。这时候就可以用到自定义命令行了,写好我们的结算脚本,服务器定时执行这个脚本就可以做到了。注:我使用的是thinkphp5.0.9版本,不同的版本可能目录结构有差.第一步:配置command.php文件,目录在网站根目录的application/command.php下第二步:建立命令类文件,新建app
- ThinkPHP5.0框架自定义命令行
weixin_34277853
php数据库网络
2019独角兽企业重金招聘Python工程师标准>>>Swoole是PHP的异步、并行、高性能网络通信引擎,使用纯C语言编写,提供了PHP语言的异步多线程服务器,异步TCP/UDP网络客户端,异步MySQL,异步Redis,数据库连接池,AsyncTask,消息队列,毫秒定时器,异步文件读写,异步DNS查询。Swoole内置了Http/WebSocket服务器端/客户端、Http2.0服务器端/客
- thinkphp5.0 创建自定义命令行
雨夜的博客
技术分享php运维服务器
thinkphp5.0创建自定义命令行在模块目录下面创建一个command目录文件夹,在此文件夹下创建一个php文件,这里我创建的是Crond.php在Crond.php中编写代码namespaceapp\index\command;useapp\index\model\Robot;usethink\console\Command;usethink\console\Input;usethink\c
- ThinkPHP5.0使用命令行执行代码逻辑
小白白友
PHP学习笔记ThinkPHP5php
创建一个自定义命令类文件,新建application/common/command/Hello.phpsetName('hello')//添加参数->addArgument('name',Argument::OPTIONAL,"yourname")//添加选项->addOption('city',null,Option::VALUE_REQUIRED,'cityname')//设置描述->setD
- ThinkPHP5.0集成支付宝扫码支付(PC端)
李维山
PHPThinkPHP支付宝支付支付宝
相关文章:ThinkPHP5.0集成微信扫码支付(PC端)搞完了微信搞支付宝~~~还是先下载支付宝电脑网站支付demo,目录结构如下:把demo文件夹放到tp5的vendor文件夹下面,重命名为alipay:配置config.php的支付参数,去蚂蚁金服商家中心找,或者使用沙箱测试环境。注意签名方式要和私钥、公钥的签名方式相同。"xxx",//商户私钥'merchant_private_key'=
- tp5 导出execl 并且解决乱码问题
yhanson
title:Excel导出功能--结合ThinkPHP5.0框架(超详细)tags:[Excel导出,TP5,导出,表格]目前,很多场景下都在使用Excel导出,现在结合ThinkPHP5.0框架详细说明下excel导出功能的实现步骤。原文博客:煜儿博客一.准备工作Excel的导出功能,在很多框架中都有配置,其中最广泛的就是使用composer来下载excel的扩展包,但是本人在使用的过程中,却发
- ThinkPHP5框架下载安装
陈永佳
为霞而作PHP开发微信小程序ThinkPHP5框架下载安装
摘要今天分享下——ThinkPHP5框架下载安装的一些基本知识,欢迎关注!一、源码包安装第一种方式就是使用源代码包安装(这个安装方式在thinkPHP5.0之后可能不会再支持,所以不对这个方式进行主要讲解)主要就是到[官网下载](http://www.thinkphp.cn/)相应的源代码包解压至相应的WWW目录下即可(强烈不推荐使用该方式)✈二、使用Composer方式进行安装Composer安
- ThinkPHP 5.0 + Workerman 保姆教程 以及常见问题
weixin_44448214
php
我服务器linux系统所以本片文章以Linux系统为主,windows系统可以到workeman官方论坛寻找问题。ThinkPHP5.0的官方手册写的workeman模糊不清,导致人会遇到各式各样的问题。WorkermanWorkerman是一款纯PHP开发的开源高性能的PHPsocket服务器框架。被广泛的用于手机app、手游服务端、网络游戏服务器、聊天室服务器、硬件通讯服务器、智能家居、车联网
- tp框架验证器实现
进击的PHPer
验证器概述ThinkPHP5.0验证使用独立的\think\Validate类或者验证器进行验证。独立验证任何时候,都可以使用Validate类进行独立的验证操作,例如:$validate=newValidate(['name'=>'require|max:25','email'=>'email']);$data=['name'=>'thinkphp','email'=>'thinkphp@qq.
- thinkphp5.0 使用GatewayWorker实现一对一聊天详解
Shuainan_0619
tp5php
1.GatewayWorker下载地址:https://www.workerman.net/download2.将下载的文件放置vendor目录(原理上服务器任何位置都可以)3.将GatewayWorker/Applications/YourApp/start_gateway.php第24行$gateway=newGateway("tcp://0.0.0.0:8282");修改为$gateway=
- php之微信公众号发送模板消息
owenzhang24
java小程序androidpythonvue
讲一下开发项目中微信公众号发送模板消息的实现过程(我用的还是Thinkphp5.0)。先看一下效果,如图:就是类似于这样的,下面讲一下实现过程:第一步:微信公众号申请模板消息权限:立即申请:申请过程就不说了,提交并且申请通过后,可以在模板库中看到模板消息列表:想用哪个模板点击进去添加就行了:添加模板后就存放到“我的模板库”中了,这是我添加的需要用到的一些:点击查看模板的详情,可以看到模板的id及各
- thinkphp5.0消息队列topthink/think-queue详解
Leader_pioneer
php开发语言
第一、安装topthink/think-queuecomposerrequiretopthink/think-queue=1.1.6第二、配置queue.php信息找到应用目录下面的extra/queue.php进行配置,队列驱动有三种,包括sync/redis/database,下面以redis为例如果选择database驱动,则需要创建数据表,数据表如下第三、创建任务类推荐使用app\job作
- PHP,安卓,UI,java,linux视频教程合集
cocos2d-x小菜
javaUIPHPandroidlinux
╔-----------------------------------╗┆
- 各表中的列名必须唯一。在表 'dbo.XXX' 中多次指定了列名 'XXX'。
bozch
.net.net mvc
在.net mvc5中,在执行某一操作的时候,出现了如下错误:
各表中的列名必须唯一。在表 'dbo.XXX' 中多次指定了列名 'XXX'。
经查询当前的操作与错误内容无关,经过对错误信息的排查发现,事故出现在数据库迁移上。
回想过去: 在迁移之前已经对数据库进行了添加字段操作,再次进行迁移插入XXX字段的时候,就会提示如上错误。
&
- Java 对象大小的计算
e200702084
java
Java对象的大小
如何计算一个对象的大小呢?
 
- Mybatis Spring
171815164
mybatis
ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
CustomerService userService = (CustomerService) ac.getBean("customerService");
Customer cust
- JVM 不稳定参数
g21121
jvm
-XX 参数被称为不稳定参数,之所以这么叫是因为此类参数的设置很容易引起JVM 性能上的差异,使JVM 存在极大的不稳定性。当然这是在非合理设置的前提下,如果此类参数设置合理讲大大提高JVM 的性能及稳定性。 可以说“不稳定参数”
- 用户自动登录网站
永夜-极光
用户
1.目标:实现用户登录后,再次登录就自动登录,无需用户名和密码
2.思路:将用户的信息保存为cookie
每次用户访问网站,通过filter拦截所有请求,在filter中读取所有的cookie,如果找到了保存登录信息的cookie,那么在cookie中读取登录信息,然后直接
- centos7 安装后失去win7的引导记录
程序员是怎么炼成的
操作系统
1.使用root身份(必须)打开 /boot/grub2/grub.cfg 2.找到 ### BEGIN /etc/grub.d/30_os-prober ### 在后面添加 menuentry "Windows 7 (loader) (on /dev/sda1)" { 
- Oracle 10g 官方中文安装帮助文档以及Oracle官方中文教程文档下载
aijuans
oracle
Oracle 10g 官方中文安装帮助文档下载:http://download.csdn.net/tag/Oracle%E4%B8%AD%E6%96%87API%EF%BC%8COracle%E4%B8%AD%E6%96%87%E6%96%87%E6%A1%A3%EF%BC%8Coracle%E5%AD%A6%E4%B9%A0%E6%96%87%E6%A1%A3 Oracle 10g 官方中文教程
- JavaEE开源快速开发平台G4Studio_V3.2发布了
無為子
AOPoraclemysqljavaeeG4Studio
我非常高兴地宣布,今天我们最新的JavaEE开源快速开发平台G4Studio_V3.2版本已经正式发布。大家可以通过如下地址下载。
访问G4Studio网站
http://www.g4it.org
G4Studio_V3.2版本变更日志
功能新增
(1).新增了系统右下角滑出提示窗口功能。
(2).新增了文件资源的Zip压缩和解压缩
- Oracle常用的单行函数应用技巧总结
百合不是茶
日期函数转换函数(核心)数字函数通用函数(核心)字符函数
单行函数; 字符函数,数字函数,日期函数,转换函数(核心),通用函数(核心)
一:字符函数:
.UPPER(字符串) 将字符串转为大写
.LOWER (字符串) 将字符串转为小写
.INITCAP(字符串) 将首字母大写
.LENGTH (字符串) 字符串的长度
.REPLACE(字符串,'A','_') 将字符串字符A转换成_
- Mockito异常测试实例
bijian1013
java单元测试mockito
Mockito异常测试实例:
package com.bijian.study;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import org.junit.Assert;
import org.junit.Test;
import org.mockito.
- GA与量子恒道统计
Bill_chen
JavaScript浏览器百度Google防火墙
前一阵子,统计**网址时,Google Analytics(GA) 和量子恒道统计(也称量子统计),数据有较大的偏差,仔细找相关资料研究了下,总结如下:
为何GA和量子网站统计(量子统计前身为雅虎统计)结果不同?
首先:没有一种网站统计工具能保证百分之百的准确出现该问题可能有以下几个原因:(1)不同的统计分析系统的算法机制不同;(2)统计代码放置的位置和前后
- 【Linux命令三】Top命令
bit1129
linux命令
Linux的Top命令类似于Windows的任务管理器,可以查看当前系统的运行情况,包括CPU、内存的使用情况等。如下是一个Top命令的执行结果:
top - 21:22:04 up 1 day, 23:49, 1 user, load average: 1.10, 1.66, 1.99
Tasks: 202 total, 4 running, 198 sl
- spring四种依赖注入方式
白糖_
spring
平常的java开发中,程序员在某个类中需要依赖其它类的方法,则通常是new一个依赖类再调用类实例的方法,这种开发存在的问题是new的类实例不好统一管理,spring提出了依赖注入的思想,即依赖类不由程序员实例化,而是通过spring容器帮我们new指定实例并且将实例注入到需要该对象的类中。依赖注入的另一种说法是“控制反转”,通俗的理解是:平常我们new一个实例,这个实例的控制权是我
- angular.injector
boyitech
AngularJSAngularJS API
angular.injector
描述: 创建一个injector对象, 调用injector对象的方法可以获得angular的service, 或者用来做依赖注入. 使用方法: angular.injector(modules, [strictDi]) 参数详解: Param Type Details mod
- java-同步访问一个数组Integer[10],生产者不断地往数组放入整数1000,数组满时等待;消费者不断地将数组里面的数置零,数组空时等待
bylijinnan
Integer
public class PC {
/**
* 题目:生产者-消费者。
* 同步访问一个数组Integer[10],生产者不断地往数组放入整数1000,数组满时等待;消费者不断地将数组里面的数置零,数组空时等待。
*/
private static final Integer[] val=new Integer[10];
private static
- 使用Struts2.2.1配置
Chen.H
apachespringWebxmlstruts
Struts2.2.1 需要如下 jar包: commons-fileupload-1.2.1.jar commons-io-1.3.2.jar commons-logging-1.0.4.jar freemarker-2.3.16.jar javassist-3.7.ga.jar ognl-3.0.jar spring.jar
struts2-core-2.2.1.jar struts2-sp
- [职业与教育]青春之歌
comsci
教育
每个人都有自己的青春之歌............但是我要说的却不是青春...
大家如果在自己的职业生涯没有给自己以后创业留一点点机会,仅仅凭学历和人脉关系,是难以在竞争激烈的市场中生存下去的....
&nbs
- oracle连接(join)中使用using关键字
daizj
JOINoraclesqlusing
在oracle连接(join)中使用using关键字
34. View the Exhibit and examine the structure of the ORDERS and ORDER_ITEMS tables.
Evaluate the following SQL statement:
SELECT oi.order_id, product_id, order_date
FRO
- NIO示例
daysinsun
nio
NIO服务端代码:
public class NIOServer {
private Selector selector;
public void startServer(int port) throws IOException {
ServerSocketChannel serverChannel = ServerSocketChannel.open(
- C语言学习homework1
dcj3sjt126com
chomework
0、 课堂练习做完
1、使用sizeof计算出你所知道的所有的类型占用的空间。
int x;
sizeof(x);
sizeof(int);
# include <stdio.h>
int main(void)
{
int x1;
char x2;
double x3;
float x4;
printf(&quo
- select in order by , mysql排序
dcj3sjt126com
mysql
If i select like this:
SELECT id FROM users WHERE id IN(3,4,8,1);
This by default will select users in this order
1,3,4,8,
I would like to select them in the same order that i put IN() values so:
- 页面校验-新建项目
fanxiaolong
页面校验
$(document).ready(
function() {
var flag = true;
$('#changeform').submit(function() {
var projectScValNull = true;
var s ="";
var parent_id = $("#parent_id").v
- Ehcache(02)——ehcache.xml简介
234390216
ehcacheehcache.xml简介
ehcache.xml简介
ehcache.xml文件是用来定义Ehcache的配置信息的,更准确的来说它是定义CacheManager的配置信息的。根据之前我们在《Ehcache简介》一文中对CacheManager的介绍我们知道一切Ehcache的应用都是从CacheManager开始的。在不指定配置信
- junit 4.11中三个新功能
jackyrong
java
junit 4.11中两个新增的功能,首先是注解中可以参数化,比如
import static org.junit.Assert.assertEquals;
import java.util.Arrays;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runn
- 国外程序员爱用苹果Mac电脑的10大理由
php教程分享
windowsPHPunixMicrosoftperl
Mac 在国外很受欢迎,尤其是在 设计/web开发/IT 人员圈子里。普通用户喜欢 Mac 可以理解,毕竟 Mac 设计美观,简单好用,没有病毒。那么为什么专业人士也对 Mac 情有独钟呢?从个人使用经验来看我想有下面几个原因:
1、Mac OS X 是基于 Unix 的
这一点太重要了,尤其是对开发人员,至少对于我来说很重要,这意味着Unix 下一堆好用的工具都可以随手捡到。如果你是个 wi
- 位运算、异或的实际应用
wenjinglian
位运算
一. 位操作基础,用一张表描述位操作符的应用规则并详细解释。
二. 常用位操作小技巧,有判断奇偶、交换两数、变换符号、求绝对值。
三. 位操作与空间压缩,针对筛素数进行空间压缩。
&n
- weblogic部署项目出现的一些问题(持续补充中……)
Everyday都不同
weblogic部署失败
好吧,weblogic的问题确实……
问题一:
org.springframework.beans.factory.BeanDefinitionStoreException: Failed to read candidate component class: URL [zip:E:/weblogic/user_projects/domains/base_domain/serve
- tomcat7性能调优(01)
toknowme
tomcat7
Tomcat优化: 1、最大连接数最大线程等设置
<Connector port="8082" protocol="HTTP/1.1"
useBodyEncodingForURI="t
- PO VO DAO DTO BO TO概念与区别
xp9802
javaDAO设计模式bean领域模型
O/R Mapping 是 Object Relational Mapping(对象关系映射)的缩写。通俗点讲,就是将对象与关系数据库绑定,用对象来表示关系数据。在O/R Mapping的世界里,有两个基本的也是重要的东东需要了解,即VO,PO。
它们的关系应该是相互独立的,一个VO可以只是PO的部分,也可以是多个PO构成,同样也可以等同于一个PO(指的是他们的属性)。这样,PO独立出来,数据持