PHP面试基础问题-1

1、PHP语言的一大优势是跨平台,什么是跨平台

        PHP的运行环境最优搭配为Apache + MYSQL +PHP,此运行环境可以在不同的操作系统(例如:windows、linux等)上配置,不受操作系统的限制,所以叫跨平台

2、Get和Post的区别

        Get方法的数据会显示在URL上,适用于检索和获取。对请求的资源不会做出改变,也就是传说的幂等。会根据浏览器的url长度有数据限制

        Post不会体现在url上,适用于创建和更新。提交的数据量没有限制,主要看服务器的资源,可提交的数据类型也比Get更加丰富

3、HTTP和HTTPS的区别

        HTTP是一种无状态传输协议,传输数据都是明文的,对隐私数据不够安全。HTTPS则是在HTTP的基础上进行加密,一般加密的方式有SSL和TLS两种。HTTP不需要证书,而HTTPS则是需要申请CA证书,HTTP使用的是80端口,HTTPS使用的是443端口

4、HTTP协议的请求状态码        
  • 1XX 服务器接收到客户端的请求,需要客户端继续发送请求完成整个过程
  • 2XX 成功队列,操作被成功接收并处理
  • 3XX重定向,需要进一步的操作以完成请求
  • 4XX客户端错误,请求包含语法错误或无法完成请求
  • 5XX服务端错误,服务器在处理请求的过程中发生了错误

        离职:200 OK 、301 永久性重定向、302临时性重定向、400 请求报文包含语法错误、403 请求资源被拒绝、404请求资源不存在、500服务器在执行请求出现错误(一般代码中有语法错误)、503服务器暂时处于超载或停机维护

5、单引号和双引号的区别

        PHP会解析双引号中的变量,而单引号不会

6、isset和empty的区别

        empty只有在变量存在值,且不为空才返回false,isset只要变量存在且不为null都返回true

        如果使用unset()释放一个变量后,再通过isset判断将返回false

        对于0,false,空字符串,空数组empty 都可以识别为空,isset不能

<?php
	$str = null;

	var_dump(empty($str)); // 返回false
	var_dump(isset($str)); // 返回false

	$str = '0';
	var_dump(empty($str)); // 返回 true
	var_dump(isset($str)); // 返回 true

	$str = '0.00';
	var_dump(empty($str)); // 返回false
	var_dump(isset($str)); // 返回true
7、session和cookie的区别

        存储的位置不同,cookie就是存储在客户端的数据而已,可以轻松查看,不够安全。session则是一个会话,保存的是一个对象,能设置过期时间和session id 保存在服务器中,session id 是以cookie的方式传递到客户端,也可以用别的,需要更改php.ini文件

        cookie存储的数据在浏览器有大小限制,session没有大小限制,主要看服务器资源

        session 不能区分路径,而cookie设置了路径参数,那么同一网站不同路径的cookie是访问不到的

8、如何修改session的生存时间
  • 直接修改php.ini配置文件,设置session.gc_maxlifetime()
  • 使用ini_set函数设置session的过期时间
9、php中的传值和传引用有什么区别?什么情况下传值什么时候传引用

        传值:直接拷贝结果,把实参的值赋值给行参,对行参的更改不会影响到实参

        传地址:是传值的一种特殊方式,只是它传递的地址,不是值,传地址后,实参和行参都指向同一个对象

        传引用:真正的以地址的方式传递参数,行参和实参都是同一个对象,对行参的修改将影响实参的值

        按值传递时,PHP必须复制值,而引用不需要,所以一般大字符串或对象一般用引用传递

10、echo、print()、print_r()、var_dump()有什么区别

        echo:输出一个和多个字符串,不是一个函数,所以使用不需要括号,没有返回值,比print()的速率更快

        print():输出一个和多个字符串,不是函数但是有返回值,执行失败返回false,速率较echo慢一点

        print_r():能打印复杂的变量类型,可以打印整个数组的内容和结构

        var_dump():判断一个变量的类型和长度,并输出变量的值和数据类型

11、$this、self、parent分别代表什么?分别在什么情况下使用

        $this:当前对象,在当前类中使用,使用 ->调用属性和方法

        self:当前类,当前使用,使用::调用

        parent:当前类的父类

        $this 不能引用静态成员和常量

12、PHP是否可以与mysql外的数据库使用

        php和mysql 是最优的搭配,当然php也可以与其它的数据搭配:如postgreSql/SqlServer/Order等

13、限制编程中经常采取MVC三层架构,请问是那三层,有什么优缺点

        MVC三层分别指:业务类型、视图、控制器,有控制器调用模型处理数据,然后将数据映射到视图层进行显示

        优点:

  •  可以实现代码的重用性,避免产生代码冗余
  • M和V实现代码分离,从而是同一个程序使用不同的表现形式         
14、什么是面向对象

        面向对象是一种编程思想,面向对象是将功能等通过对象来实现,将功能封装进对象中,让对象来实现具体细节。有三大特征:封装性、继承性、多态性

15、对JSON数据格式的理解

        JSON(JavaScipt Object Notation)是一种轻量级的数据交换格式,json的数据格式固定,可以被多语言用作数据的传递。

        PHP使用json_decode(string json [bool $assoc]),来实现将json格式的字符串转换成PHP变量

16、php面向对象访问权限有哪三种
    • public :公有类型
      • 特点:外部可以调用,内部可调用,子类可调用
      • 在子类中可以通过self::var调用public方法或属性,parent::method调用父类方法,在实例中可以通过$obj->var来调用public类型的方法或属性
    • protected:受保护类型
      • 特点:外部不可调用,内部可调用,子类可调用
      • 在子类中可以通过self::var调用protected方法和属性,parent::method调用父类方法,在实例中不能通过$obj->var调用protected类型的方法和属性
    • private:私有类型
      • 特点:仅在内部可以调用,外部和子类都不能调用
      • 该类型的属性和方法只能在该类中使用,在该类的实例、子类中、子类实现的实例都不能调用私有类型的的属性和方法
    • 补充:final类不能被继承和重写
17、oop的三个重要特性

                三大特性:封装、继承、多态

    • 封装:将一个类的使用和实现分开,尽可能的隐藏内部细节,只保留部分接口和方法与外部联系,使代码模块化。一个对象它所封装的是自己的属性和方法,所以它不需要依赖其它对象就可以完成自己的操作,好处
      • 良好的封装能够减少耦合
      • 类内部的结构可以自由修改
      • 可以对成员进行更精确的控制
      • 隐藏信息,实现细节
    • 继承:继承是使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加新的数据或者新的功能,也可以使用父类的功能,但不能选择性地继承父类,通过继承我们能够非常方便地复用以前的代码,能够大大的提高开发效率。
      • 被继承者称之为父类或超类,继承者称之为子类或派生类
      • 子类拥有父类非private的属性和方法
      • 子类可以有自己的属性和方法,即子类可以对父类进行扩展
      • 子类可以拥自己的方式实现父类的方法
      • 父类变,子类必须变
      • 继承破坏了封装,对于父类而已,它的实现细节对于子类来说是透明的
      • 继承是一种强耦合关系
    • 多态:不用修改源程序代码,就可以让引用变量绑定到各种不同的类实现上。从而导致该引用调用的具体方法随之改变,即不修改程序代码就可以改变程序运行是所绑定的具体代码,让程序可以选择多个运行状态,这就是多态。主要分为两种
      • 编译时多态:编译时多态是静态的,主要是指方法的重载。它是根据参数列表的不同来区分不同的函数。通过编辑之后会变成两个不同的函数在运行是算不上多态
      • 运行时多态:是动态的,它是通过动态绑定来实现的
        1. 基于继承实现多态:主要边上在父类和继承父类的一个或者多个对某些方法的重写,多个子类对同一方法的重写可以表现出不同的行为
        2. 基于接口实现多态:继承是通过重写父类的同一方法的几个不同子类来实现的,那么就可以通过实现接口并覆盖接口中的同一方法的几个不同的类体现。在接口的多态中,指向接口的引用必须是指导者实现了该接口的一个类的实例程序,在运行是,根据对象引用的实际类型来执行对应的方法。
        3. 继承都是单继承,只能为一组相关的类提供一致的服务接口。但是接口可以实现多继承多实现,它能够利用一组相关或者不相关的接口来进行组合与扩充,能够对我提供一致的服务接口,所以它相对于继承来说有更好的灵活性
18、封装性的定义,使用的好处是什么?

        定义:封装实现面向对象程序设计的第一步,封装就是将数据或者函数等集合在一个个单元中(称之为类)。被封装的对象通常被称为抽象数据类型

        好处:保护或放置代码(数据)被破坏、拒绝直接调用声明字段,保护内部数据,更安全、在编程中可以达到缓存的效果,执行效率高、重复调用,避免代码冗余,程序编写效率高

19、如何声明和使用静态方法

        使用static关键字来声明静态属性和静态方法,可以不实例化类而直接访问,由于静态方法不需要通过对象即可调用,所以伪变量$this在静态方法中不可用

        使用范围操作符 :: 来调用,静态属性不可以通过->来调用

20、继承的关键字是什么

        extends

<?php

    Class A{
        public $l = 1;
    }

    Class B extends A{
    
    }

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值