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来声明的。 抽象类与普通类相似,都包含成员变量和成员方法,两者的区别在于,抽象类中至少要包含一个抽象方法, 抽象方法没有方法体,该方法天生就是要被子类重写的。 抽象方法的格式为:abstractfunctionabstractMethod(); 因为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.ifelse D.include E.literal 79.MVC的概念是什么?各层主要做什么工作? MVC(即模型-视图-控制器)是一种软件设计模式或者说编程思想。 M指Model模型层,V是View视图层(显示层或者用户界面),C是Controller控制器层。 使用mvc的目的是实现M和V分离,从而使得一个程序可以轻松使用不同的用户界面。 在网站开发中, 模型层一般负责对数据库表信息进行增删改查, 视图层负责显示页面内容, 控制器层在M和V之间起到调节作用,控制器层决定调用哪个model类的哪个方法, 执行完毕后由控制器层决定将结果assign到哪个view层。 80.oop中的多态性跟方法重写有什么关系? 答: 81.java语言中方法重写和重载分别代表什么意思?准确说php支持方法的重载吗?很多参考书中提到的php重载实际上该如何正确理解? 答: php不支持方法的重载,很多书里提到的PHP‘重载’应该是‘重写’ 82.final关键字能定义类中的成员属性吗? 答:不能,类的成员属性只能有public,private,protected,var来定义 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一个对象会出现“Catchablefatalerror:Objectofclasst2couldnotbeconvertedtostringinG:\php2\t2.phponline33” print一个数组时也只是输出“Array”,print一个对象出现“Catchablefatalerror:Objectofclasst2couldnotbeconvertedtostringinG:\php2\t2.php” ▲print和echo是一样的 89.__tostring()魔术方法在什么时候被自动执行?__tostring()魔术方法必须要return返回值吗? 当echo或者print一个对象时,就是自动触发。而且__tostring()必须要返回一个值 90.什么是抽象方法? 答:在方法前面有abstract,而且方法没有方法体,连“{}”也不能有 91.如果一个类中有一个方法是抽象方法,而这个类没有定义成抽象类,会报错吗? 答:会,"Fatalerror:Classt2contains1abstractmethodandmustthereforebedeclaredabstractorimplementtheremainingmethods(t2::ee)in" 92.如果一个类是抽象类,而类中的方法都是非抽象的方法,会报错吗? 答:不会报错,如果一个类是抽象类,其中可以没有抽象方法,但是一个类中有个方法是抽象方法,那么这个类一定是一个抽象类 94.final关键字的应用应注意的问题? 使用final关键字定义的类,禁止继承。 使用final关键字定义的方法,禁止重写。 95.如果一个类既要继承一个父类,又要实现多个接口,该如何写? 书写格式例如:classMaleHumanextendsHumanimplementsAnimal,Life{...} 96.什么是单点入口呢? 所谓单点入口就是整个应用程序只有一个入口,所有的实现都通过这个入口来转发, 比如说在上面我们就使用index.php作为程序的单点入口,当然这个是可以由你自己任意控制的。 单点入口有几大好处: 第一、一些系统全局处理的变量,类,方法都可以在这里进行处理。比如说你要对数据进行初步的过滤,你要模拟session处理,你要定义一些全局变量,甚至你要注册一些对象或者变量到注册器里面 第二、程序的架构更加清晰明了。 97.PHP提供了2套正则表达式函数库,分别是哪两套? (1)PCREPerl兼容正则表达式preg_为前缀 (2)POSIX便携式的操作系统接口ereg_为前缀 98.正则表达式的组成? 由原子(普通字符,如英文字符)、 元字符(有特殊功用的字符) 模式修正字符 一个正则表达式中,至少包含一个原子 99.不常用魔术方法的触发时机? __isset()__unset()的触发时机 __sleep()、__wakeup()在对对象进行串行化的时候调用 如果序列化对象的时候,不写__sleep()方法,则所有的成员属性都会被序列化,而定义了__sleep()方法,则只序列化指定数组中的变量。 因此,如果有非常大的对象而并不需要完全储存下来时此函数也很有用。 使用__sleep的目的是关闭对象可能具有的任何数据库连接,提交等待中的数据或进行类似的清除任务。此外,如果有非常大的对象而并不需要完全储存下来时此函数也很有用。 使用__wakeup的目的是重建在序列化中可能丢失的任何数据库连接以及处理其它重新初始化的任务。 .OOP的三大特性是什么? 1.封装性: 也称为信息隐藏,就是将一个类的使用和实现分开,只保留部分接口和方法与外部联系,或者说只公开了一些供开发人员使用的方法。 于是开发人员只需要白癜风哪里治最好哪治白癜风最好
|