php基础理论(3)

61. session和cookie的使用步骤分别是什么?什么是sesssion和cookie的生命周期?session和cookie的区别是什么?

 cookie是保存在客户端机器的,对于未设置过期时间的cookie,cookie值会保存在机器的内存中,只要关闭浏览器则cookie自动消失。如果设置了cookie的过期时间,那么浏览器会把cookie以文本文件的形式保存到硬盘中,当再次打开浏览器时cookie值依然有效。

 

 session是把用户需要存储的信息保存在服务器端。每个用户的session信息就像是键值对一样存储在服务器端,其中的键就是sessionid,而值就是用户需要存储信息。服务器就是通过sessionid来区分存储的session信息是哪个用户的。

 

 两者最大的区别就是session存储在服务器端,而cookie是在客户端。session安全性更高,而cookie安全性弱。

 session在web开发中具有非常重要的份量。它可以将用户正确登录后的信息记录到服务器的内存中,当用户以此身份

 访问网站的管理后台时,无需再次登录即可得到身份确认。而没有正确登录的用户则不分配session空间,即便输入了

 管理后台的访问地址也不能看到页面内容。通过session确定了用户对页面的操作权限。

  使用session的步骤:

 1. 启动session:

  使用session_start()函数来启动。

 2. 注册会话:

     直接给$_SESSION数组添加元素即可。

 3. 使用会话:

  判断session是否为空或者是否已经注册,如果已经存在则像普通数组使用即可。

 4. 删除会话:

  1.可以使用unset删除单个session;

  2.使用$_SESSION=array()的方式,一次注销所有的会话变量;

  3.使用session_destroy()函数来彻底销毁session。

 cookie怎么使用?

 1. 记录用户访问的部分信息

 2. 在页面间传递变量

 3. 将所查看的internet页存储在cookies临时文件夹中,可以提高以后的浏览速度。

 创建cookie:

  setcookie(string cookiename , string value , int expire);

 读取cookie:

  通过超级全局数组$_COOKIE来读取浏览器端的cookie的值。

 删除cookie:有两种方法

  1.手工删除方法:

   右击浏览器属性,可以看到删除cookies,执行操作即可将所有cookie文件删除。

  2.setcookie()方法:

   跟设置cookie的方法一样,不过此时将cookie的值设置为空,有效时间为0或小于当前时间戳。

62. 如何设置一个cookie的名字为username,值为jack,并且让此cookie一周后失效?

 一个浏览器最多可以产生多少个cookie,每个cookie文件最大不能超过多少?

 setcookie(‘username’,’jack’,time()+7*24*3600);

 最多可以产生20个cookie,每个最多不超过4K

 

63. 设置或读取session之前,需要做什么?

 可以直接在php.ini中开启session.auto_start = 1或者在页面头部用session_start();

 开启session,session_start()前面不能有任何输出,包括空行。

 

64. 在实际开发中,session在哪些场合使用?

 session用来存储用户登录信息和用在跨页面传值。

 1)常用在用户登录成功后,将用户登录信息赋值给session;

 2)用在验证码图片生成,当随机码生成后赋值给session。

 

65. 注销session会话的形式有几种?

 unset() 

 $_SESSION=array();

 session_destroy();

 

66. 什么是OOP?什么是类和对象?什么是类属性?

 OOP(object oriented programming),即面向对象编程,其中两个最重要的概念就是类和对象。

 世间万物都具有自身的属性和方法,通过这些属性和方法可以区分出不同的物质。

 属性和方法的集合就形成了类,类是面向对象编程的核心和基础,

 通过类就将零散的用于实现某个功能的代码有效地管理起来了。

 

 类只是具备了某些功能和属性的抽象模型,而实际应用中需要一个一个实体,也就是需要对类进行实例化,

 类在实例化之后就是对象。★类是对象的抽象概念,对象是类的实例化。

 OOP具有三大特点:1. 封装性(又叫做隐藏性);2. 继承性; 3. 多态性。

 OOP的优点:1、代码重用性高(省代码) 2、使程序的可维护性高(扩展性) 3、灵活性

 

67. 常用的属性的访问修饰符有哪些?分别代表什么含义?(重点)

 private,protected,public。

 

 类外:public 

 子类中:public,protected 

 本类中:private,protected,public 

 类前面:只能加final,abstract

 属性前面:必须有访问修饰符(private,protected,public)

 方法前面:static,final,private,protected,public ,abstract

 

68. $this和self、parent这三个关键词分别代表什么?在哪些场合下使用?

 $this 当前对象

 self  当前类

 parent  当前类的父类

 

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

 self也在当前类中使用,不过需要使用::调用。

 parent在类中使用。

 

69.类中如何定义常量、如何类中调用常量、如何在类外调用常量。(扩展)

 类中的常量也就是成员常量,常量就是不会改变的量,是一个恒值。

 定义常量使用关键字const.

 例如:const PI = 3.1415326;

 无论是类内还是类外,常量的访问和变量是不一样的,常量不需要实例化对象,

 访问常量的格式都是类名加作用域操作符号(双冒号)来调用。

 即:类名 :: 类常量名; 

 

70. 作用域操作符::如何使用?都在哪些场合下使用?(扩展)

 调用类常量

 调用静态方法

 

71. 什么是魔术方法?常用的魔术方法有哪几个?(重点)

 以__开头的系统自定义的方法。

 __construct()

 __destruct()

 __autoload()

 __call()

 __tostring()

 

72. 什么是构造方法和析构方法?

 构造方法就是在实例化一个对象的同时自动执行的成员方法,作用就是初始化对象。

 php5之前,一个跟类名完全相同的方法是构造方法,php5之后魔术方法__construct()就是构造方法。

 如果类中没有定义构造方法,那么php会自动生成一个,这个自动生成的构造方法没有任何参数,

 没有任何操作。

 构造方法的格式如下:

 function __construct(){}

 或者:function 类名(){}

 构造方法可以没有参数,也可以有多个参数。

 析构方法的作用和构造方法正好相反,是对象被销毁时被自动调用的,作用是释放内存。

 析构方法的定义方法为:__destruct();

 因为php具有垃圾回收机制,能自动清除不再使用的对象,释放内存,一般情况下可以不手动创建析构方法。

 

73. __autoload()方法的工作原理是什么?(重点)

 使用这个魔术函数的基本条件是类文件的文件名要和类的名字保持一致。

 当程序执行到实例化某个类的时候,如果在实例化前没有引入这个类文件,那么就自动执行__autoload()函数。

 这个函数会根据实例化的类的名称来查找这个类文件的路径,当判断这个类文件路径下确实存在这个类文件后

 就执行include或者require来载入该类,然后程序继续执行,如果这个路径下不存在该文件时就提示错误。

 使用自动载入的魔术函数可以不必要写很多个include或者require函数。

 

74. 什么是抽象类和接口?抽象类和接口有什么不同和相似的地方?

 抽象类是一种不能被实例化的类,只能作为其他类的父类来使用。

 抽象类是通过关键字 abstract 来声明的。

 抽象类与普通类相似,都包含成员变量和成员方法,两者的区别在于,抽象类中至少要包含一个抽象方法,

 抽象方法没有方法体,该方法天生就是要被子类重写的。

 抽象方法的格式为:abstract function abstractMethod();

  

 因为php中只支持单继承,如果想实现多重继承,就要使用接口。也就是说子类可以实现多个接口。

 接口类是通过interface关键字来声明的,接口类中的成员变量和方法都是public的,方法可以不写关键字public,

 接口中的方法也是没有方法体。接口中的方法也天生就是要被子类实现的。

 抽象类和接口实现的功能十分相似,最大的不同是接口能实现多继承。在应用中选择抽象类还是接口要看具体实现。

 子类继承抽象类使用extends,子类实现接口使用implements。

 

 抽象类至少有一个抽象方法吗?

 答:如果一个类声明成抽象类,里面可以没有抽象方法

     如果一个类中有抽象方法,这个类必须是抽象类

 

75. __call的参数有几个,类型是什么,意义是什么?

 魔术方法__call()的作用是当程序调用一个不存在或不可见的成员方法时,php会先调用__call()方法,

 将那个不存在的方法的方法名和参数都存储下来。

 __call()包含两个参数,  第一个参数是那个不存在的方法的方法名,是个字符串类型;

    第二个参数是那个不存在的方法的所有参数,是个数组类型。

 本人认为__call()方法的意义更多在于调试,可以定位到错误。同时可以捕捉异常,如果某个方法不存在,

 则执行其它可替代方法。

 

76. smarty模板技术的用途是什么?

 为了php与html分开,美工和程序员各司其职,互不干扰。

 

77. smarty配置主要有哪几项?

 1. 引入smarty.class.php;

 2. 实例化smarty对象;

 3. 重新修改默认的模板路径;

 4. 重新修改默认的编译后文件的路径;

 5. 重新修改默认的配置文件的路径;

 6. 重新修改默认的cache的路径。

 7. 可以设置是否开启cache。

 8. 可以设置左侧和右侧定界符。

78. smarty在使用过程中需要注意哪些细节?

 Smarty是基于MVC概念的一种模板引擎,它将一个页面程序分成了两部分来实现:即视图层和控制层,

 也就是说smarty技术将用户UI与php代码分离开。

 这样程序员和美工各司其职,互不干扰。

 

 smarty运用过程中要注意以下几个问题:

 1.正确配置smarty。主要要实例化smarty对象,配置smarty模板文件的路径;

 2.php页面中使用assign赋值 和 display显示页面;

 3.smarty模板文件中不允许出现php代码段,所有的注释,变量,函数都要包含在定界符内。

  A.{}

  B. foreach

  C. if else

  D. include

  E. literal

 

79. MVC的概念是什么?各层主要做什么工作?

 MVC(即模型-视图-控制器)是一种软件设计模式或者说编程思想。

 M指Model模型层,V是View视图层(显示层或者用户界面),C是Controller控制器层。

 使用mvc的目的是实现M和V分离,从而使得一个程序可以轻松使用不同的用户界面。

 在网站开发中,

 模型层一般负责对数据库表信息进行增删改查,

 视图层负责显示页面内容,

 控制器层在M和V之间起到调节作用,控制器层决定调用哪个model类的哪个方法,

 执行完毕后由控制器层决定将结果assign到哪个view层。

 

80. oop中的多态性跟方法重写有什么关系?

态性是面向对象编程的一种特性,和方法无关。

 

简单说,就是同样的一个方法能够根据输入数据的不同,做出不同的处理,即方法的重载——有不同的参数列表(静态多态性)

 

而当子类继承自父类的相同方法,输入数据一样,但要做出有别于父类的响应时,你就要覆盖父类的方法,即在子类中重写该方法——相同参数,不同实现(动态多态性)

 

81. php支持方法的重载吗?很多参考书中提到的php重载实际上该如何正确理解?

 答: php不支持方法的重载,很多书里提到的PHP‘重载’应该是‘重写’

 

82. final关键字能定义类中的成员属性吗?

 答:不能,类的成员属性只能有public ,private , protected  来定义

 

83. final关键字定义的类能够被继承吗?

 答:final定义的类不能被继承

84. 说说static关键字的使用场合?static能用在class前吗?

static可以跟public,protected,private一起使用吗?构造方法可以是static的吗?

答: static可以在属性和方法前面使用,调用static属性或者方法时,只要将类载入就可用,不用实例化

static不能用在class的前面

static可以跟public,protected,private一起使用,在方法的前面;

▲构造方法不能是static

 

85. 接口可以实例化吗?抽象类能实例化吗?

 答:接口和抽象类都不能被实例化

 

86. class前面能加访问修饰符吗?如果能加,只能是哪几个访问修饰符?可以是权限访问修饰符public,protected,private吗?

 答:class前面可以加final,static; 

 ★class前面不能加public,protected,private

 

87. 类中属性前可以不加访问修饰符吗?成员变量前的修饰符只能是public,protected,private吗?还可以是哪几个?

 答:类中的属性必须加修饰符,除了那3个以外,还可以加var

88. 如果echo一个数组,页面输出什么?echo一个对象呢?print一个数组或者对象呢?

 答:页面只能输出“Array”;echo一个对象会出现“Catchable fatal error: Object of class t2 could not be converted to string in G:\php2\t2.php on line 33”

     print一个数组时也只是输出“Array”,print一个对象出现“Catchable fatal error: Object of class t2 could not be converted to string in G:\php2\t2.php ”

     ▲print和echo是一样的  

 

89. __tostring()魔术方法在什么时候被自动执行? __tostring()魔术方法必须要return返回值吗?

 当echo或者print一个对象时,就是自动触发。而且__tostring()必须要返回一个值 

 

90. 什么是抽象方法?

 答:在方法前面有abstract,而且方法没有方法体,连“{ }”也不能有

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值