PHP复习总结

变量定义:

isset()如何检查变量是否定义删除一个变量:unset()。判断一个变量是否为空的函数:empty()

可变变量:

一个变量的变量名可以动态的设置和使用。
$a = ‘hello’ , $$a = ‘world’, KaTeX parse error: Expected '}', got 'EOF' at end of input: {a}=hello world

变量赋值方式:

直接赋值、变量间赋值、引用赋值

检测变量类型:

s_int()是否为整形、is_float()是否为浮点型、is_string()是否为字符串
is_arr()是否为数组、is_object()是否为对象、is_null();是否为空

变量的类型:

布尔类型 整形 浮点型 字符串
两种复合类型:数组 对象
两种特殊类型:资源 NULL
伪类型:mixed number callback

常量和变量的区别:

1)常量前没有$符号;
2)常量只能通过define()定义,而不能通过赋值语句定义;
3)常量可以在任何地方定义和访问,而变量有全局和局部之分;
4)常量一旦定义就不能被重新定义或者取消定义,而变量而通过赋值方式重新定义;
5)常量的值只能是标量数据,而变量的数据库类型有8种原始数据类型。

字符串转整数:

强制类型转换: (整型)字符串变量名;
直接转换:settype(字符串变量,整型);
intval(字符串变量);

标量和数组的区别:

一个标量只能存放一个数据,而数组可以存放多个数据。

定义常量:

define();常量是否被定义:defined();常量的值只能是标量的数据。
两个相同的常量前者起作用,因为常量一旦被定义就不能重新被定义或取消定义。

echo(),print(),print_r(),var_dump()区别:

echo 和 print 的区别

共同点:首先echo 和 print 都不是严格意义上的函数,他们都是语言结构;他们都只能输出 字符串,整型跟int型浮点型数据。不能打印复合型和资源型数据;

而区别是:echo 可以连续输出多个变量,而print只能一次输出一个变量。print打印的值能直接复制给一个变量,如 $a = print “abc123”;

而echo 不可以,它没有像函数的行为,所以不能用于函数的上下文。在使用时,echo() 函数比 print()速度稍快。

var_dump()和print_r()的区别

共同点:两者都可以打印数组,对象之类的复合型变量。

区别:print_r() 只能打印一些易于理解的信息,且print_r()在打印数组时,会将把数组的指针移到最后边,使用 reset() 可让指针回到开始处。 而var_dump()不但能打印复合类型的数据,还能打印资源类型的变量。且var_dump()输出的信息则比较详细,一般调试时用得多。

平时用var_dump()较多,因为能输出任何类型的数据,不会报错

echo可以一次性输出多个值,多个值之间用逗号隔开,不能作为表达式的一部分使用,无返回值;
print打印一个值,如果字符串成功则返回true,否则返回false,只能打印出简单的变量的值,有返回值。
print_r可以把字符串和数字简单的打印出来,而数组则以括起来的键和值得到列表显示,并以Array开头但print_r()输出布尔值和NULL的结果, 没有意义,因为都是打印"\n"。因此用var_dump()函数更适合调试。print_r是函数,可以打印出比较复杂的变量(如数组,对象),有返回值;
Var_dump判断一个变量的类型与长度,并输出变量的数值,如果变量有值输的是变量的值并回返数据类型,此函数显示关于一个或多个变大时结构的信息,包括表达式的类型与值,数组将递归展开值,通过缩进显示其结构

PHP修饰符

public(公共的、默认)在PHP5中如果类没有指定成员的访问修饰符,默认就是public的访问权限。
protected(受保护的)被声明为protected的成员,只允许该类的子类进行访问。
private(私有的 ) 被定义为private的成员,对于类内部所有成员都可见,没有访问限制。对类外部不允许访问。

数组:

定义:$数组名=array(元素值);
数组遍历(for、foreach);
数组的排序(冒泡排序)(外层控制这排序的伦次,内层控制着每轮交换数据的次数);
数组元素的添加、修改、删除:array_push()…最后添加;array_unshift()开始添加
array_pop() 删除最后一位;array_shift() 删除第一位。

二维数组(多维数组)

   定义:$多维数组名=array(array(),array()...);

数组的遍历(for、foreach)

日期

date(时间格式,|时间戳); time():获取时间戳

$_POST和 $_GET

具体使用哪个由form(ajax.open)表单里面的method的值(post,get)决定

get和post的区别:

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好

Session和cookie区别:

Cookie数据存在客户的浏览器上,session放在服务器上
Cookie不是很安全,别人可以分析放在本地的cookie并进行cookie欺骗,考虑到安全应用session
Session会在一定时间内放在服务器上,随着访问的增多会比较占用服务器的性能,考虑到性能方面应用cookie。
单个cookie保存的数据不能超过4kb,很多浏览器限制一个站点保存20个cookie。
建议:将登录信息等重要信息存放为session;其他信息需要保留放在cookie

数据库事务:

事务作为一个逻辑单元执行的一系列操作,一个逻辑工作必须有四个属性,称为ACID(原子性、一致性、隔离性和持久性):
原子性:事务必须是原子工作单元;对于其数据修改,要么全都执行,要么全都不执行。
一致性:事务在完成时,必须使所有数据保持一致的状态,在相关数据库中,所有规则必须应用事务的修改,保持所有数据的完整性;结束时所有内部数据结构都必须正确。
隔离性:并发事务必须与其他并发事务所作的修改隔离,事务查看数据时数据所处的状态,要么是并发事务修改之前的状态,要么是另一事务修改之后的状态,事务不会查看中间状态的数据,称为可串行性,因为它能够重新装载起始数据,并且重播一系列事务,以使数据结束时的状态与原始事务执行的状态不同。
持久性:事务完成后,对于系统的响应时永久性的,该修改即使出现系统故障也将一直保持。
Begin 开始一个事务、rollback 事务回滚、commit 事务确认。Rollback和commit不能同时出现,否则只有前者一个生效。
MySQL默认自动提交,可通过set autocommit=0、1取消和开启

HTTP状态码

(一)、1字开头:这一类型 的状态码,代表请求已被接受,需要继续处理。这类响应是临时响应,史包含状态行和某些可选 的响应头信息,并以空行结束。-
100 发出请求
101 切换协议
(二)、2字开头的状态码,请求已 成功被 器 接收、理解
200 交易成功
201 已 创建
202 已 接受
203 非权威性信息
204 无内存
205 重置内容
206 部分内容
207 多状态
(三)、3字开头:需要客户端采取进一步的操作才能完成请求。通常,这些状态码用来重定向,后续的请求地址在本次响应的location域中指明
301 永久移除
302 临时移除
(四)、4字开头:
1、语义有误,当前请求无法被服务器理解。除非进行修改,否则客户端不应该重复提交这个请求
2、请求参数有误

400 错误请求
401访问被拒绝
402 【为将来可能的需求而预留的】
403禁止访问
404 没有发现文件
(五)、代表了服务器在处理请求的过程中有错误或者异常状态发生,也有可能是服务器意识到以的软硬件资源无法完成对请求的处理,除非这是一个HEAD请求,澡是服务器应当包含一个解释当前错误状态以及这个善是临时的还是永久的解释 信息实体。浏览器应当向用户展示任何在当前响应中被 包含的实体
500 内部服务器错误
501 页眉值指定了未实现的配置
502 无效响应
503 服务器不可用
504 网关超时
505 服务器不支持

什么是面向对象?

面向对象的方法主要是把事物给对象化,包括其属性和行为。面向对象编程更贴近实际生活的思想。总体来说面向对象的底层还是面向过程,面向过程抽象成类,然后封装,方便使用就是面向对象(万物皆对象)。
通过类的封装(encapsulation)隐藏内部细节。通过继承(inheritance)实现类的特化。通过多态(polymorphism)实现基于对象类型的动态分派。三大特征:封装、继承、多态

构造函数和析构函数

构造函数(方法)是对象创建完成后第一个被对象自动调用的方法。它存在于每个声明的类中,是一个特殊的成员方法。作用是执行一些初始化的任务。Php中使用__construct()声明构造方法,并且只能声明一个。
析构函数(方法)作用和构造方法正好相反,是对象被销毁之前最后一个被对象自动调用的方法。是PHP5中新添加的内容作用是用于实现在销毁一个对象之前执行一些特定的操作,诸如关闭文件和释放内存等。

索引的作用和用法

作用:通过创建唯一索引可以确保数据表每一行的唯一性
可以大大加快检索的速度
可以加速表和表之间的连接速度,特别是在实现数据的参考完整性方面有特别意义
可以减少查询中分组和排序的时间
可以在查询过程中,使用优化隐藏器,提高系统性能
方法:直接创建索引:例如使用CREATE INDEX语句或者使用创建索引向导,间接创建索引,例如在表中定义主键约束或者唯一性键约束时,同时也创建了索引。
缺点:创建索引和维护索引都需要耗费时间,这种时间随着数据量的增大而增大
索引需要占用物理空间,除了数据表占用空间外每一个索引都要占用一定的物理空间,如果创建聚簇索引,那么所需的空间就越大。
党对表中的数据就行增加、删除和修改时索引也要动态维护,这样就降低了数据的维护速度

值传递和引用传递

值传递:会创建副本,函数中无法改变原始对象;
引用传递:不创建副本,函数中可以改变原始对象;

PHP如何获取客户端的IP(要求取得一个int)和服务器端的IP的代码

$ip = $_SERVER["REMOTE_ADDR"];  或者:getenv('REMOTE_ADDR'); 

 转化为int  $intIP =  ip2long($ip);

 $_SERVER["SERVER_ADDR"];

 gethostbyname('www.baidu.com');

简单谈谈sql优化

合理的使用缓存来减少对数据库的查询。如利用mybatis的一级缓存,来减少相同sql的查询。
不使用select * from 得查询,加大数据库的压力,使用什么字段,返回什么字段。
避免使用not in 或 <> 不等于的查询,因为会查询全表。
我们自己写的sql很清楚知道,返回的数据有多少。当我们只需要有一个结果返回时,利用limit 1.查出1条后面的就不在查了。减少与数据库的交互。
对于我们经常能够查询的字段(列)或经常与其他表做条件的列,添加索引。(组合索引和单列索引)。
避免使用模糊查询like,‘%数据%’的查询,就算改查询列有索引,索引会失效,而‘数据%’不会使索引失效。
将查询条件更加精确化,提高了查询的速率。
in操作的原理是先进性子查询操作,再进行主查询操作(适合主查询是大表,子查询是小表)。
exists操作的原理是先进行主查询操作,再到子查询中进行过滤(适合主查询是小表,子查询是大表)。

Linux怎样查找以.txt结尾的文件

find . -name "*.txt"

Linux如何查找文件名包含abc关键字的文件

find /etc -name "*abc*"

知识导图

在这里插入图片描述

实现图片上传

 public function add(){
        if($this->request->isGet()){
            return $this->fetch();
        }else {
            $data=$this->request->post();
            $file = $this->request->file('img');
            if ($file) {
                $info = $file->move(ROOT_PATH . 'public' . DS . 'uploads');//存储目录
                if ($info) {
                    $path = $info->getSaveName();
                    $data['img'] = $path;
                    $image=Image::open($file);
                    $thumb_path=ROOT_PATH.'public'.DS.'uploads'.DS.'thumb'.DS.'thumb_'.$info->getFilename();
                    $image->thumb(100,100)->save($thumb_path);
                    $data['img']='thumb'.DS.'thumb_'.$info->getFilename();//导出到数据库
                } else {
                    echo $file->getError();
                }
            }
            $res=$this->Pro->save($data);
            if($res){
                $this->success('增加成功','index');
            }else{
                $this->error('增加失败','add');
            }
        }
    }

oop是什么?

oop是面向对象编程,面向对象编程是一种计算机编程架构,OOP 的一条基本原则是计算机程序是由单个能够起到子程序作用的单元或对象组合而成。

OOP具有三大特点

1、封装性:也称为信息隐藏,就是将一个类的使用和实现分开,只保留部分接口和方法与外部联系,或者说只公开了一些供开发人员使用的方法。于是开发人员只 需要关注这个类如何使用,而不用去关心其具体的实现过程,这样就能实现MVC分工合作,也能有效避免程序间相互依赖,实现代码模块间松藕合。

2、继承性:就是子类自动继承其父级类中的属性和方法,并可以添加新的属性和方法或者对部分属性和方法进行重写。继承增加了代码的可重用性。PHP只支持单继承,也就是说一个子类只能有一个父类。

3、多态性:子类继承了来自父级类中的属性和方法,并对其中部分方法进行重写。于是多个子类中虽然都具有同一个方法,但是这些子类实例化的对象调用这些相同的方法后却可以获得完全不同的结果,这种技术就是多态性。多态性增强了软件的灵活性。

1、易维护

采用面向对象思想设计的结构,可读性高,由于继承的存在,即使改变需求,那么维护也只是在局部模块,所以维护起来是非常方便和较低成本的。

2、质量高

在设计时,可重用现有的,在以前的项目的领域中已被测试过的类使系统满足业务需求并具有较高的质量。

3、效率高

在软件开发时,根据设计的需要对现实世界的事物进行抽象,产生类。使用这样的方法解决问题,接近于日常生活和自然的思考方式,势必提高软件开发的效率和质量。

4、易扩展

由于继承、封装、多态的特性,自然设计出高内聚、低耦合的系统结构,使得系统更灵活、更容易扩展,而且成本较低。

smarty是什么,有什么作用?

回答一:smarty是用php写出来的模板引擎,也是目前业界最著名的php模板引擎之一

它分离了逻辑代码和外在的显示,提供了一种易于管理和使用的方法,用来将混杂的php逻辑代码与html代码进行分离

回答二:smarty是php中最著名的引擎框架之一,我们公司使用的是TP框架,已经封装好了smarty模板,所以没有单独使用过

回答三: smarty是个模板引擎,最显著的地方就是有可以把模板缓存起来。一般模板来说,都是做一个静态页面,然后在里面把一些动态的部分用一切分隔符切开,然后在PHP里打开这个模板文件,把分隔符里面的值替换掉,然后输出来,你可以看下PHPLib里面的template部分。

而smarty设定了缓存参数以后,第一次运行时候会把模板打开,在php替换里面值的时候把读取的html和php部分重新生成一个临时的php文件,这样就省去了每次打开都重新读取html了。如果修改了模板,只要重新刷下就行了。

TP框架有哪些优点?

答:TP框架是我们中国人自己开发的框架,各种资料比较齐全,国内用的比较多,比较简单和方便,而且是免费开源的

TP的特性有哪些?

1.多表查询非常方便,在model中几句代码就可以完成对多表的关联操作

2.融合了smarty模板,使前后台分离

3.支持多种缓存技术,尤其对memcache技术支持非常好

4.命名规范,模型,视图,控制器严格遵循命名规则,通过命名一一对应

5.支持多种url模式

6.内置ajax返回方法,包括xml,json,html等

7.支持应用扩展,类库扩展,驱动扩展等

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xx080

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值