PHP常见知识点总结三

                               PHP常见知识点总结<三>

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

OOP(objectorientedprogramming),即面向对象编程,其中两个最重要的概念就是类和对象。
世间万物都具有自身的属性和方法,通过这些属性和方法可以区分出不同的物质。属性和方法的集合就形成了类,类是面向对象编程的核心和基础,通过类就将零散的用于实现某个功能的代码有效地管理起来了。
类只是具备了某些功能和属性的抽象模型,而实际应用中需要一个一个实体,也就是需要对类进行实例化,类在实例化之后就是对象。类是对象的抽象概念,对象是类的实例化。对象是一个高级的数组,数组是一个最原始的对象,同样的对象也可以遍历

OOP 具有三大特点:
1. 封装性:也称为信息隐藏,就是将一个类的使用和实现分开,只保留部分接口和方法与外部联系,或者说只公开了一些供开发人员使用的方法。于是开发人员只需要关
注这个类如何使用,而不用去关心其具体的实现过程,这样 就能实现 MVC 分工合作,也能有效避免程序间相互依赖,实现代码模块间松藕合。
2. 继承性:就是子类自动继承其父级类中的属性和方法,并可以可以添加新的属性和方法或者对部分属性和方法进行 重写。继承增加了代码的可重用性。 php 只支持单继承,也就是说一个子类只能有一个父类。
3. 多态性:子类继承了来自父级类中的属性和方法,并对中部分方法进行重写。于是多个子类中虽然都具有同一个方法,但是这些子类实例化的对象调用这些相同的方法后却可以获得完全不同的结果,这种技术就是多态性。多态性增强了软件的灵活性。
OOP 的优点:1、代码重用性高(省代码)2、使程序的可维 护性高(扩展性)3、灵活性

 

2. 常用的属性的访问修饰符有哪些?分别代表什么含义?

private,protected,public。
类外:public,var
子类中:public,protected ,var
本类中:private,protected,public ,var
如果不使用这三个关键词,也可以使用 var 关键字。但是 var 不可以跟权限修饰词一起使用。var 定义的变量,子类中可以 访问到,类外也可以访问到,相当于 public
类前面:只能加 final,abstract
属性前面:必须有访问修饰符(private,protected,public, var)
方法前面:static,final,private,protected,public ,abstract

 

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

$this 当前对象 self 当前类 parent 当前类的父类  ,  $this 在当前类中使用,使用->调用属性和方法。self 也在当前类中使用,不过需要使用::调用。 parent
在类中使用。

 

4.类中如何定义常量、如何类中调用常量、如何在类外调用常量 ?

类中的常量也就是成员常量,常量就是不会改变的量,是一个恒值。
定义常量使用关键字 const.
例如:constPI=3.1415326;
无论是类内还是类外,常量的访问和变量是不一样的,常量不需要实例化对象,访问常量的格式都是类名加作用域操作符号(双冒号)来调
用。
即:类名 :: 类常量名;

 

5. 作用域操作符::如何使用?都在哪些场合下使用?

调用类常量 调用静态方法

 

6. 什么是魔术方法?常用的魔术方法有哪几个?

以__开头的系统自定义的方法。
__construct() __destruct() __autoload() __call() __tostring()

 

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

构造方法就是在实例化一个对象的同时自动执行的成员方法,作用就是初始化对象。
php5之前,一个跟类名完全相同的方法是构造方法,php5之 后魔术方法__construct()就是构造方法。如果类中没有定义 构造方法,那么 php 会自动生成一个,这个自动生成的构造方法没有任何参数,没有任何操作。
构造方法的格式如下:
function__construct(){}
或者:function 类名(){}
构造方法可以没有参数,也可以有多个参数。
析构方法的作用和构造方法正好相反,是对象被销毁时被自动调用的,作用是释放内存。
析构方法的定义方法为:__destruct();
因为 php 具有垃圾回收机制,能自动清除不再使用的对象,
释放内存,一般情况下可以不手动创建析构方法。

 

8.__autoload()方法的工作原理是什么?

使用这个魔术函数的基本条件是类文件的文件名要和类的
名字保持一致。
当程序执行到实例化某个类的时候,如果在实例化前没有引 入这个类文件,那么就自动执行__autoload()函数。这个函数会根据实例化的类的名称来查找这个类文件的路径,当判断 这个类文件路径下确实存在这个类文件后就执行 include 或 者 require 来载入该类,然后程序继续执行,如果这个路径 下不存在该文件时.
就提示错误。使用自动载入的魔术函数可以不必要写很多个 include 或者 require 函数。

 

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

抽象类是一种不能被实例化的类,只能作为其他类的父类来
使用。
抽象类是通过关键字 abstract 来声明的。
抽象类与普通类相似,都包含成员变量和成员方法,两者的
区别在于,抽象类中至少要包含一个抽象方法,抽象方法没有方法体,该方法天生就是要被子类重写的。
抽象方法的格式为:abstractfunctionabstractMethod();
因为 php 中只支持单继承,如果想实现多重继承,就要使用
接口。也就是说子类可以实现多个接口。接口类是通过 interface 关键字来声明的,接口类中的成员变量和方法都是 public 的,方法可以不写关键字 public,接口中的方法也是没有方法体。接口中的方法也天生就是要被子类实现的。抽
象类和接口实现的功能十分相似,最大的不同是接口能实现
多继承。在应用中选择抽象类还是接口要看具体实现。子类 继承抽象类使用 extends,子类实现接口使用 implements。

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

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

 

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

魔术方法__call()的作用是当程序调用一个不存在或不可见 的成员方法时,php 会先调用__call()方法,将那个不存在的方法的方法名和参数都存储下来。
__call()包含两个参数, 第一个参数是那个不存在的方法的方法名,是个字符串类型;第二个参数是那个不存在的方法的所有参数,是个数组类
型。
本人认为__call()方法的意义更多在于调试,可以定位到错
误。同时可以捕捉异常,如果某个方法不存在,则执行其它
可替代方法。

 

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

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

 

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

1. 引入 smarty.class.php;

2. 实例化 smarty 对象;

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

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

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

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

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

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

 

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

Smarty 是基于 MVC 概念的一种模板引擎,它将一个页面程序分成了两部分来实现:即视图层和控制层,也就是说smarty 技术将用户 UI 与 php 代码分离开。这样程序员和美工各司其职,互不干扰。

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

1.正确配置 smarty。主要要实例化 smarty 对象,配置 smarty
模板文件的路径;
2.php 页面中使用 assign 赋值 和 display 显示页面;
3.smarty 模板文件中不允许出现 php 代码段,所有的注释,
变量,函数都要包含在定界符内。
A.{}
B.foreach
C.ifelse
D.include
E.literal

 

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

MVC(即模型-视图-控制器)是一种软件设计模式或者说编程思想。
M 指 Model 模型层,V 是 View 视图层(显示层或者用户界 面),C 是 Controller 控制器层。使用 mvc 的目的是实现 M 和 V 分离,从而使得一个程序可
以轻松使用不同的用户界面。在网站开发中,模型层一般负责对数据库表信息进行增删改查,视图层负责显示页面内容 ,控制器层在 M 和 V 之间起到调节作用,控制器层决定调用 哪个 model 类的哪个方法,执行完毕后由控制器层决定将结果 assign 到哪个 view 层。

 

15.Java Java Java Java语言中方法重写和重载分别代表什么意思?准确说 php支持方法的重载吗?很多参考书中提到的php重载实际上该如何正确理解?

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

 

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

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

 

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

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

 

18. 说说 static 关键字的使用场合?static 能用在 class 前吗?static 可以跟 public,protected,private 一起使用吗? 构造方法可以是 static 的吗?

答:static 可以在属性和方法前面使用,调用 static 属性或者方法时,只要将类载入就可用,不用实例化 static 不能用在 class 的前面  static 可以跟 public,protected,private 一起使用,在方法的前面;
▲构造方法不能是 static

 

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

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

 

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

答:class 前面可以加 final,static;
★class 前面不能加 public,protected,private

 

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

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

 

22. 如果 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 是一样的

 

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

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

 

24. 什么是抽象方法?

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

 

25. 如果一个类中有一个方法是抽象方法,而这个类没有定义成抽象类,会报错吗?

答:会,"Fatalerror:Classt2contains1abstractmethodandmust therefore be declared abstract or implement the remaining methods(t2::ee)in"

 

26. 如果一个类是抽象类,而类中的方法都是非抽象的方法 ,会报错吗?

答:不会报错,如果一个类是抽象类,其中可以没有抽象方法,但是一个类中有个方法是抽象方法,那么这个类一定是一个抽象类

 

27.final 关键字的应用应注意的问题?

使用 final 关键字定义的类,禁止继承。
使用 final 关键字定义的方法,禁止重写。

 

28. 如果一个类既要继承一个父类,又要实现多个接口,该如何写?

书写格式例如: classMaleHumanextendsHumanimplements Animal,Life{...}

 

29. 什么是单点入口呢?

所谓单点入口就是整个应用程序只有一个入口,所
有的实现都通过这个入口来转发,
比如说在上面我们就使用 index.php 作为程序的单
点入口,当然这个是可以由你自己任意控制的。
单点入口有几大好处:
第一、一些系统全局处理的变量,类,方法都可以在这
里进行处理。比如说你要对数据进行初步的过滤,你要模拟 session 处理,你要定义一些全局变量,甚至你要注册一些对
象或者变量到注册器里面
第二、程序的架构更加清晰明了。

 

30.PHP 提供了2套正则表达式函数库,分别是哪两套?

(1)PCRE Perl 兼容正则表达式 preg_ 为前缀
(2)POSIX 便携式的操作系统接口 ereg_ 为前缀

 

31. 正则表达式的组成?

由原子(普通字符,如英文字符)、
元字符(有特殊功用的字符)
模式修正字符
一个正则表达式中,至少包含一个原子

 

32. 不常用魔术方法的触发时机?

__isset() __unset()的触发时机
__sleep()、 __wakeup() 在对对象进行串行化的时候调用
如果序列化对象的时候,不写__sleep()方法,则所有的成员 属性都会被序列化,而定义了__sleep()方法,则只序列化指定数组中的变量。因此,如果有非常大的对象而并不需要完全储存下来时此函数也很有用。使用 __sleep 的目的是关闭对象可能具有的任何数据库连接,提交等待中的数据或进行类似的清除任务。此外,如果有非常大的对象而并不需要完全储存下来时此函数也很有用。
使用 __wakeup 的目的是重建在序列化中可能丢失的任何数据库连接以及处理其它重新初始化的任务。

 

33. 常用魔术方法的触发时机?

1)__autoload() :当程序实例化某个类,而该类没有在当 前文件中被引入。此时会触发执行__autoload()。程序希望
通过该方法,自动引入这个类文件。该方法有一个参数,即 就是那个忘记引入的类的名称。__autoload()方法的工作原
理是什么?当程序执行到实例化某个类的时候,如果在实例 化前没有引入这个类文件,那么就自动执行__autoload()函
数。这个函数会根据实例化的类的名称来查找这个类文件的
路径,当判断这个类文件路径下确实存在这个类文件后,就 执行 include 或者 require 来载入该类,然后程序继续执行,
如果这个路径下不存在该文件时就提示错误。使用自动载入 的魔术函数可以不必要写很多个 include 或者 require 函数。
2)__construct() :这个是魔术构造方法。构造方法是实例
化对象的时候自动执行的方法,作用就是初始化对象。该方 法可以没有参数,也可以有多个参数。如果有参数,那么 new 这个对象的时候要记得写上相应的参数。在 php5以前,没有魔术构造方法,普通构造方法是一个跟类名同名的方法来
实现构造的。如果一个类中既写了魔术构造方法,又定义了 普通构造方法。那么 php5以上版本中,魔术方法起作用, 普通构造方法不起作用。反之,在 php5以前版本中,不认识魔术构造方法,只是把该方法当做普通的方法。
3)__destruct() :这个是魔术析构方法。析构方法的作用和构造方法正好相反,是对象被销毁时被自动调用的,作用是释放内存。析构方法没有参数。
4)__call() :当程序调用一个不存在或不可见的成员方法时, 自动触发执行__call()。它有两个参数,分别是未访问到的方法名称和方法的参数。而第二个参数是数组类型。
5)__get() :当程序调用一个未定义或不可见的成员属性时, 自动触发执行__get()。它有一个参数,表示要调用的属性的名称。
6)__set():当程序试图写入一个不存在或不可见的成员属 性时,PHP 就会自动执行__set()。它包含两个参数,分别表示属性名称和属性值。
7)__tostring() :当程序使用 echo 或 print 输出对象时,
会自动调用该方法。目的是希望通过该方法将对象转化为字 符串,再输出。__tostring() 无参数,但是该方法必须有返回值。
8)__clone() :当程序 clone 一个对象的时候,能触发 __clone()方法,程序希望通过这个魔术方法实现:不仅仅单纯地克隆对象,还需要克隆出来的对象拥有原来对象的所有属性和方法。

 

34.MVC 的概念是什么?

MVC(即模型-视图-控制器)是80年代发明的一种软件设计
模式或者说编程思想。
M 指模型层,V 是指视图层(显示层或者用户界面),C 是
指控制层。
使用 mvc 的目的是实现 M 和 V 分离,从而使得一个程序可
以轻松使用不同的用户界面。
C 存在的目的则是在 M 和 V 之间起到调节作用,确保 M 和
V 的同步,一旦 M 改变,V 应该能同步更新。
将 M 和 V 分离,就可以做到同一个网页,在不同节日到来
的时候能显示不同的页面风格,这只需要提前制作多个视图
层模板页面,而无需更改 M 层程序。
MVC 做到了编程中的分工合作,代码的可重用性得到最大
化体现,程序逻辑更加清晰而富有条理,便于后期维护管理。

 

35. $_REQUEST、$_GET、$_POST、$_COOKIE 的关系和区别?

1.关系:$_REQUEST 包含了$_GET、$_POST、$_COOKIE
等的所有内容,是它们的集合体。
2.通过$_REQUEST 获取变量值,PHP 页面因为不确定它是
哪种传值方式,
因此会根据 php.ini 中的配置来接收值。
php.ini 里可以设置,variables_order= “GPC”。其含义是 GET,POST,COOKIE.
所以 PHP 页面会先从$_GET 中获取,再从$_POST 中获取, 然后从$_COOKIE 中获取。
新获得的值会覆盖之前获取到的值。
因此从表现形式上看,$_REQUEST 最后是获取$_COOKIE 中的值,如果$_COOKIE 中没有值,
会获取$_POST 中的值,如果$_POST 没有获取到 ,就去 $_GET 中获取。
如果$_GET 中也没有该值,那么$_REQUEST 就返回 null。

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值