面向对象的方法主要是把事物给对象化,包括其属性和行为。面向对象编程更贴近实际生活的思想。总体来说面向对象的底层还是面向过程,面向过程抽象成类,然后封装,方便使用就是面向对象(万物皆对象)。
通过类的封装(encapsulation)隐藏内部细节。通过继承(inheritance)实现类的特化。通过多态(polymorphism)实现基于对象类型的动态分派。三大特征:封装、继承、多态
格式是 2020-5-10 22:21:21
echo date('Y-m-d H:i:s',time()-24*3600);
or
echo date('Y-m-d H:i:s',strtotime('-1 day'));
get是从服务器上获取数据,post是是向服务器传送信息;
Get通过把参数数据提交到表单action属性url中,值和字段一一对应,在url中可以看到,post通过HTTP post将表单各个字段放置在HTML header中,静态传送到action所指的url中;
Get通过request、query string获取变量的值。Post通过服务器端request form获取提交的数据
Get传送的数据量较小,不能大于2kb。Post传送两较大,默认为不受限制,iis480kb,IIS5100kb
Get安全性低,post安全性高,get执行效率比post好
客户端IP:
$SERVER[“REMOTE_ADDR”]
服务器IP:
$_SERVER[“SERVER_ADDR”]
双引号串中的内容可以被解释而且替换,
单引号串中的内容总被认为是普通字符。
例如:gdfgfdgd59gmkblg 中 g 的次数) $text = ‘gdfgfdgd59gmkblg’;
echo substr_count ( $text,'g');
//普通传值
$param1=1;
$param2=2;
$param2 = $param1;
$param1 = 5; //变量1和变量2是两块内存,互不影响;
echo $param2; //所以此处还是显示为1
//引用传值 ↓↓
$param1=1;
$param2=2;
$param2 = &$param1; //把变量1的内存地址赋给变量2;此时的变量2和变量1全等;
echo $param2;// 1
$param1 = 5; //变量1和变量2是一处内存,改变其中一个,另外一个也被改变;
echo $param2; //显示为5
?>
$a = 1;
$b = &$a;
unset($a);
echo $b; //1
trim()-- ---------------去除字符串首尾处的空白字符(或者其他字符)
strlen()-- -------------字符串长度
substr()---------- ----截取字符串
str_replace()------- 替换字符串函数
substr_replace()-- 对指定字符串中的部分字符串进行替换
strstr()-- -------------检索字符串函数
explode()-- ---------分割字符串函数
implode()----------- 将数组合并成字符串
str_repeat()-- ------重复一个字符串
addslashes()------- 转义字符串
htmlspecialchars()–THML 实体转义
session:储存用户访问的全局唯一变量,存储在服务器上的 php 指 定的目录中的(session_dir)的位置进行的存放
cookie:用来存储连续访问一个页面时所使用,是存储在客户端, 对于 Cookie 来说是存储在用户 WIN 的 Temp 目录中的。
require()语句的性能与include()相类似,都是包括并运行指定文件。不同之处在于:对include()语句来说,在执行文件时每次都要进行读取和评估;而对于require()来说,文件只处理一次(实际上,文件内容替换require()语句)。这就意味着如果可能执行多次的代码,则使用require()效率比较高。另外一方面,如果每次执行代码时是读取不同的文件,或者有通过一组文件迭代的循环,就使用include()语句。
array_values() 返回数组的所有值,但不包括数组的键值。返回的是以数字为键值的数组,从0开始。
array_keys() 返回数组的键名,以数字为键值的数组形式,从0开始
array_flip() 将数组中的值和键进行互换,如果反转后的数组的值有相同的,那么只取最后一个值。
array_search(‘PHP’, a r r ) ; / / 检 索 给 定 的 值 , 加 t r u e 则 是 严 格 类 型 检 查 a r r a y r e v e r s e ( arr); //检索给定的值,加true则是严格类型检查 array_reverse( arr);//检索给定的值,加true则是严格类型检查arrayreverse(arr); //将数组中的元素翻转(前后顺序)
in_array(“apple”, $arr); //在数组中检索apple
array_key_exists(“apple”, a r r ) ; / / 检 索 给 定 的 键 名 是 否 存 在 数 组 中 a r r a y c o u n t v a l u e s ( arr); // 检索给定的键名是否存在数组中 array_count_values( arr);//检索给定的键名是否存在数组中arraycountvalues(arr); // 统计数组中所有值出现的次数
array_unique($arr); // 删除数组中重复的值
输出字符串长度
echo strlen("hello");
比较两个字符串
echo strcmp("ab","abc");
将字符串转小写
echo strtolower("ABCD");
将字符串转大写
echo strtoupper("abvcd");
查找替换字符串
echo str_replace("l","*","hellommworld");
拼接字符串
$arr = explode("|","a|vdf|dfs|sdf");
echo implode("*",$arr);
拆分字符串
$arr = explode("|","a|vdf|dfs|sdf");
var_dump($arr);
替换字符串
echo substr_replace("hellommworld","**",5,2); 替换从索引5开始的2个字符(替换指定位置)
截取字符串
echo substr("hello",0,2);
echo substr("张三",0,3);中文字符串,一个字符占三个索引
H5、CSS3、Js、jQuery
(1)使用验证码防止注册机灌水。
(2)使用预处理,绑定参数,参数过滤转义 防止sql注入
(3)使用token防止远程提交,使用token验证登录状态。
事务作为一个逻辑单元执行的一系列操作,一个逻辑工作必须有四个属性,称为ACID(原子性、一致性、隔离性和持久性):
原子性:事务必须是原子工作单元;对于其数据修改,要么全都执行,要么全都不执行。
一致性:事务在完成时,必须使所有数据保持一致的状态,在相关数据库中,所有规则必须应用事务的修改,保持所有数据的完整性;结束时所有内部数据结构都必须正确。
隔离性:并发事务必须与其他并发事务所作的修改隔离,事务查看数据时数据所处的状态,要么是并发事务修改之前的状态,要么是另一事务修改之后的状态,事务不会查看中间状态的数据,称为可串行性,因为它能够重新装载起始数据,并且重播一系列事务,以使数据结束时的状态与原始事务执行的状态不同。
持久性:事务完成后,对于系统的响应时永久性的,该修改即使出现系统故障也将一直保持。
Begin 开始一个事务、rollback 事务回滚、commit 事务确认。Rollback和commit不能同时出现,否则只有前者一个生效。
MySQL默认自动提交,可通过set autocommit=0、1取消和开启
1、Where 子句中:where 表之间的连接必须写在其他Where 条件之前,那些可以过滤掉最大数量记录的条件必须写在Where 子句的末尾.HAVING 最后。
2、用EXISTS 替代IN、用NOT EXISTS 替代NOT IN。
3、避免在索引列上使用计算
4、避免在索引列上使用IS NULL 和IS NOT NULL
5、对查询进行优化,应尽量避免全表扫描,首先应考虑在where 及order by 涉及的列上建立索引。
6、应尽量避免在where 子句中对字段进行null 值判断, 否则将导致引擎放弃使用索引而进行全表扫描
7、应尽量避免在where 子句中对字段进行表达式操作,这将导致引擎放弃使用索引而进行全表扫描
x 删除光标所在位置字符
dd 删除光标所在行
ndd 删除当前行及后行
dG 删除光标所在行及到末尾
:a1,a2d 函数从a1到a2的文本
p 将剪切板中的内容粘贴到光标后
P 将剪切板中的内容粘贴到光标前
y 赋值已选中的文本到剪切板
yy 将光标所在行复制到剪切板,此命令前可加数字 可复制多行
yw 将光标所在位置的单词复制到剪切板
yum install tar 安装yum
yum remove 文件(夹)名 卸载文件
yum -qa i grep yum 检查是否安装yum
tar -xvf 文件名 解压
useradd 用户名 添加新用户
passwd 用户名 新用户密码
sudo passwd root 修改密码
sudo vi/etc/hostname 修改用户名
su - 用户名 切换用户
thinkPHP
yii
ZendFramework
CakePhp
sy
ThinkPHP采用单一入口模式进行项目部署和访问,无论完成什么功能,一个项目都有一个统一(但不一定是唯一)的入口。应该说,所有项目都是从入口文件开始的,并且所有的项目的入口文件是类似的,入口文件中主要包括:
定义框架路径、项目路径和项目名称(可选)
定义调试模式和运行模式的相关常量(可选)
载入框架入口文件(必须)
MVC 是一种将应用程序的逻辑层和表现层进行分离的方法。ThinkPHP 也是基于MVC设计模式的。MVC只是一个抽象的概念,并没有特别明确的规定,ThinkPHP中的MVC分层大致体现在:
模型(M):模型的定义由Model类来完成。
控制器(C):应用控制器(核心控制器App类)和Action控制器都承担了控制器的角色,Action控制器完成业务过程控制,而应用控制器负责调度控制。
视图(V):由View类和模板文件组成,模板做到了100%分离,可以独立预览和制作。
但实际上,ThinkPHP并不依赖M或者V ,也就是说没有模型或者视图也一样可以工作。甚至也不依赖C,这是因为ThinkPHP在Action之上还有一个总控制器,即App控制器,负责应用的总调度。在没有C的情况下,必然存在视图V,否则就不再是一个完整的应用。
总而言之,ThinkPHP的MVC模式只是提供了一种敏捷开发的手段,而不是拘泥于MVC本身。
(1)查询条件尽量使用数组方式,这是更为安全的方式;
(2)如果不得已必须使用字符串查询条件,使用预处理机制;
(3)开启数据字段类型验证,可以对数值数据类型做强制转换;(3.1版本开始已经强制进行字段类型验证了)
(4)使用自动验证和自动完成机制进行针对应用的自定义过滤;
(5)使用字段类型检查、自动验证和自动完成机制等避免恶意数据的输入。
答:开启调试模式很简单,只需要在入口文件中增加一行常量定义代码:
,bv
//开启调试模式
define('APP_DEBUG', true);
//加载框架入口文件
require './ThinkPHP/ThinkPHP.php';
在完成开发阶段部署到生产环境后,只需要删除调试模式定义代码即可切换到部署模式。开启调试模式后,系统会首先加载系统默认的调试配置文件,然后加载项目的调试配置文件,调试模式的优势在于:
开启日志记录,任何错误信息和调试信息都会详细记录,便于调试;
关闭模板缓存,模板修改可以即时生效;
记录SQL日志,方便分析SQL;
关闭字段缓存,数据表字段修改不受缓存影响;
严格检查文件大小写(即使是Windows平台),帮助你提前发现Linux部署问题;
可以方便用于开发过程的不同阶段,包括开发、测试和演示等任何需要的情况,不同的应用模式可以配置独立的项目配置文件。