ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
1.类中如何定义常量、如何类中调用常量、如何在类外调用常量。 ~~~ 类中的常量也就是成员常量,常量就是不会改变的量,是一个恒值。 定义常量使用关键字const. 例如:const PI = 3.1415326; 无论是类内还是类外,常量的访问和变量是不一样的,常量不需要实例化对象, 访问常量的格式都是类名加作用域操作符号(双冒号)来调用。 即:类名 :: 类常量名; ~~~ 2.接口和抽象类的区别是什么? ~~~ 抽象类是一种不能被实例化的类,只能作为其他类的父类来使用。 抽象类是通过关键字 abstract 来声明的。 抽象类与普通类相似,都包含成员变量和成员方法,两者的区别在于,抽象类中至少要包含一个抽象方法, 抽象方法没有方法体,该方法天生就是要被子类重写的。 抽象方法的格式为:abstract function abstractMethod(); 因为php中只支持单继承,如果想实现多重继承,就要使用接口。也就是说子类可以实现多个接口。 接口是通过interface关键字来声明的,接口中的成员常量和方法都是public的,方法可以不写关键字public, 接口中的方法也是没有方法体。接口中的方法也天生就是要被子类实现的。 抽象类和接口实现的功能十分相似,最大的不同是接口能实现多继承。在应用中选择抽象类还是接口要看具体实现。 子类继承抽象类使用extends,子类实现接口使用implements。 ~~~ 3.__call的参数有几个,类型是什么,意义是什么? ~~~ 魔术方法__call()的作用是当程序调用一个不存在或不可见的成员方法时,php会先调用__call()方法, 将那个不存在的方法的方法名和参数都存储下来。 __call()包含两个参数,第一个参数是那个不存在的方法的方法名,是个字符串类型; 第二个参数是那个不存在的方法的所有参数,是个数组类型。 本人认为__call()方法的意义更多在于调试,可以定位到错误。同时可以捕捉异常,如果某个方法不存在, 则执行其它可替代方法。 ~~~ 4.构造方法、析构方法是如何定义的? ~~~ 构造方法就是在实例化一个对象的同时自动执行的成员方法,作用就是初始化对象。 php5之前,一个跟类名完全相同的方法是构造方法,php5之后魔术方法__construct()就是构造方法。 如果类中没有定义构造方法,那么php会自动生成一个,这个自动生成的构造方法没有任何参数, 没有任何操作。 构造方法的格式如下: function __construct(){} 或者:function 类名(){} 构造方法可以没有参数,也可以有多个参数。 析构方法的作用和构造方法正好相反,是对象被销毁时被自动调用的,作用是释放内存。 析构方法的定义方法为:__destruct(); 因为php具有垃圾回收机制,能自动清除不再使用的对象,释放内存,一般情况下可以不手动创建析构方法。 ~~~ 5.===是什么运算? ~~~ 是php比较运算符中的一种,表示恒等,说明两个变量不只是数值上相等,而且两者的数据类型也相等。 如果$a !== $b,那么说明两个变量要么数值不等,要么就是数据类型不相同。 ~~~ 6.__autoload()函数是如何运作的? ~~~ 使用这个魔术函数的基本条件是类文件的文件名要和类的名字保持一致。 当程序执行到实例化某个类的时候,如果在实例化前没有引入这个类文件,那么就自动执行__autoload()函数。 这个函数会根据实例化的类的名称来查找这个类文件的路径,当判断这个类文件路径下确实存在这个类文件后 就执行include或者require来载入该类,然后程序继续执行,如果这个路径下不存在该文件时就提示错误。 使用自动载入的魔术函数可以不必要写很多个include或者require函数。 ~~~ 7.网页静态化要用到哪类函数? `使用ob系列函数。这个问题需要到php高级才学。` 8.PHP有几组函数来处理正则表达式? ~~~ preg系列函数可以处理。具体有以下几个: string preg_quote ( string str [, string delimiter] ) 转义正则表达式字符 正则表达式的特殊字符包括:. \\ + * ? [ ^ ] $ ( ) { } = ! < > | :。 preg_replace -- 执行正则表达式的搜索和替换 mixed preg_replace ( mixed pattern, mixed replacement, mixed subject [, int limit] ) preg_replace_callback -- 用回调函数执行正则表达式的搜索和替换 mixed preg_replace_callback ( mixed pattern, callback callback, mixed subject [, int limit] ) preg_split -- 用正则表达式分割字符串 array preg_split ( string pattern, string subject [, int limit [, int flags]] ) ~~~ 9.试举正则表达式对字符串最常用的3种操作? ~~~ 1. 利用正则表达式,实现对一个字符串的切割,切割后返回一个数组。如split()。 2. 利用正则可以实现对一个字符串中符合的内容批量替换。如果替换为空则达到了过滤的作用。如preg_replace()。 3. 利用正则判断一个字符串中是否含有符合的子字符串。如preg_match()。 ~~~ 10.字符串怎么转成整数,有几种方法?怎么实现? ~~~ 强制类型转换: (整型)字符串变量名; 直接转换:settype(字符串变量,整型); intval(字符串变量); ~~~ 11.php怎么定义函数? ~~~ 使用关键字function加函数名,参数和函数体来定义函数。格式为: function 函数名(参数){函数体}; ~~~ 12.函数内怎么使用局部变量和全局变量? ~~~ 局部变量是函数内部定义的变量,其作用域是所在的函数。如果函数外还有一个跟局部变量名字一样的变量, 程序会认为它们两个是完全不同的两个变量。当退出函数的时候,其中的局部变量就同时被清除。 全局变量是定义在所有函数以外的变量,其作用域是整个php文件,但是在用户自定义的函数内部是无法使用的。 如果一定要在用户自定义的函数内部使用全局变量,那么就需要使用global关键字声明。 也就是说如果在函数内的变量前加上golbal来修饰,那么函数内部就可以访问到这个全局变量, 不仅可以利用这个全局变量进行运算而且可以对这个全局变量进行重新赋值。 ~~~ 13.字符串和数组怎么取长度? ~~~ 字符串:strlen(); count() -- 计算数组中的元素个数。 可以使用count(数组名)或者count(数组名,1),如果有第二个参数,并且是数字1,则表示递归统计数组元素的个数。 如果第二个参数是数字0,则等同于只有一个参数的count()函数。 sizeof() -- count() 的别名 ~~~ 14.页面字符出现乱码,怎么解决? ~~~ 1.首先考虑当前文件是不是设置了字符集。查看是不是meta标签中写了charset,如果是php页面还可以看看是不是 在header()函数中指定了charset; 2.如果设置了字符集(也就是charset),那么判断当前文件保存的编码格式是否跟页面设置的字符集保持一致, 两者必须保持统一; 3.如果涉及到从数据库提取数据,那么判断数据库查询时的字符集是否跟当前页面设置的字符集一致,两者必须统一。 ~~~ 15.php访问数据库有哪几步? ~~~ 1.连接数据库服务器: mysql_connect('数据库服务器的主机名或ip','数据库服务器的用户名','数据库服务器的密码'); 2.选择数据库: mysql_select_db(数据库名); 3.设置从数据库提取数据的字符集: mysql_query("set names utf8"); 4.执行sql语句: mysql_query(sql语句); 5.关闭结果集,释放资源: mysql_free_result($result); 6.关闭与数据库服务器的连接: mysql_close($link); ~~~ 16.文件上传应该注意哪些细节? ~~~ 1.首现要在php.ini中开启文件上传; 2.在php.ini中有一个允许上传的最大值,默认是2MB。必要的时候可以更改; 3.上传表单一定要记住在form标签中写上enctype="multipart/form-data"; 4.要注意上传文件的大小、文件类型是否符合要求,上传后存放的路径是否存在。 ~~~ 17.怎么把文件保存到指定目录?怎么避免上传文件重名问题? ~~~ 可以通过上传的文件名获取到文件后缀,然后使用时间戳+文件后缀的方式为文件重新命名,这样就避免了重名。 可以自己设置上传文件的保存目录,与文件名拼凑形成一个文件路径,使用move_uploaded_file(),就可以完成 将文件保存到指定目录。 ~~~ 18.session和cookie有什么区别? ~~~ cookie是保存在客户端机器的,对于未设置过期时间的cookie,cookie值会保存在机器的内存中,只要关闭浏览器则 cookie自动消失。如果设置了cookie的过期时间,那么浏览器会把cookie以文本文件的形式保存到硬盘中, 当再次打开浏览器时cookie值依然有效。 session是把用户需要存储的信息保存在服务器端。每个用户的session信息就像是键值对一样存储在服务器端, 其中的键就是sessionid,而值就是用户需要存储信息。服务器就是通过sessionid来区分存储的session信息是 哪个用户的。 两者最大的区别就是session存储在服务器端,而cookie是在客户端。session安全性更高,而cookie安全性弱。 ~~~ 19.session有什么用?怎么使用? ~~~ session在web开发中具有非常重要的份量。它可以将用户正确登录后的信息记录到服务器的内存中,当用户以此身份 访问网站的管理后台时,无需再次登录即可得到身份确认。而没有正确登录的用户则不分配session空间,即便输入了 管理后台的访问地址也不能看到页面内容。通过session确定了用户对页面的操作权限。 使用session的步骤: 1. 启动session: 使用session_start()函数来启动。 2. 注册会话: 直接给$_SESSION数组添加元素即可。 3. 使用会话: 判断session是否为空或者是否已经注册,如果已经存在则像普通数组使用即可。 4. 删除会话: 1.可以使用unset删除单个session; 2.使用$_SESSION=array()的方式,一次注销所有的会话变量; 3.使用session_destroy()函数来彻底销毁session。 ~~~ 20.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或小于当前时间戳。 ~~~ 21.怎么定义常量? ~~~ define('变量名','值'); 还可以使用constant()函数来定义一个常量。例如constant(常量名). ~~~ 22.break和continue的区别? ~~~ break可以终止循环。 continue没有break强大,只能终止本次循环而进入到下一次循环中。 ~~~ 23.循环语句有哪几种? ~~~ while(){}; do{}whlie(); for(){}; foreach(){}; ~~~ 24.数组怎么声明?怎么赋值? ~~~ 数组的声明方式主要有两种。 1.通过array()函数声明数组; 可以通过key=>value的方式分别定义索引和值,也可以不定义数组的索引下标,只给出数组的元素值。 2.直接为数组元素赋值,不需要调用array()函数。例如: $arr[0] = 1; $arr[1] = 2; ~~~ 25.说出数组涉及到的常用函数。 ~~~ array -- 声明一个数组 count -- 计算数组中的单元数目或对象中的属性个数 foreach -- 遍历数组 list -- 遍历数组 explode -- 将字符串转成数组 implode -- 将数组转成一个新字符串 array_merge -- 合并一个或多个数组 is_array -- 检查是否是数组 print_r -- 输出数组 sort -- 数组排序 array_keys -- 返回数组中所有的键名 array_values -- 返回数组中所有的值 key -- 从关联数组中取得键名 ~~~ 26.数组有哪几种类型? ~~~ 数字索引数组 关联数组 根据数组构造还可以分一维数组、二维数组、多维数组。 ~~~ 27.foreach 用法。 ~~~ foreach($数组名 as $key=>$value){ 循环体 }; ~~~ 28.说出有哪几种分支语句。 ~~~ if(){}; if(){}else{}; if(){}elseif(){}else{}; swich(){case1 ,case2,……}; ~~~ 29.什么是全局变量,自定义函数中如何使用全局变量? ~~~ 全局变量是定义在所有函数以外的变量,其作用域是整个php文件,但是在用户自定义的函数内部是无法使用的。 如果一定要在用户自定义的函数内部使用全局变量,那么就需要使用global关键字声明。 也就是说如果在函数内的变量前加上golbal来修饰,那么函数内部就可以访问到这个全局变量, 不仅可以利用这个全局变量进行运算而且可以对这个全局变量进行重新赋值。 ~~~ 30.字符串的常用函数? ~~~ trim();--去除空格 strlen();--字符串长度 substr();--截取字符串 str_replace();--替换字符串函数 substr_replace() -- 对指定字符串中的部分字符串进行替换 strstr();--检索字符串函数 explode();--分割字符串函数 strcasecmp();--比较字符串函数 ~~~ 31.PHP数据类型有哪些? ~~~ php支持8种原始数据类型。 包括: 四种标量类型(布尔型boolean,整型interger,浮点型float/double , 字符串string) 两种复合类型(数组array , 对象object) 两种特殊类型(资源resource,NULL) ~~~ 32.如何定义一个变量? `使用$和变量名表示,变量名区分大小写。变量名不可以以数字或者@等特殊字符开头。` 33.怎么定义一个整数变量? ` $变量名=整数值;` 34.print与echo有什么区别? ` echo可以一次输出多个值,中间用逗号隔开。而print一次只能输出一个值。` 35.你是怎么理解正则表达式的? ~~~ 正则表达式是用于描述字符排列模式的一种语法规则。正则表达式也叫做模式表达式。 网站开发中正则表达式最常用于表单提交信息前的客户端验证。 比如验证用户名是否输入正确,密码输入是否符合要求,email、手机号码等信息的输入是否合法。 在php中正则表达式主要用于字符串的分割、匹配、查找和替换操作。 ~~~ 36.你是如何认识ajax的? ~~~ ajax是asynchronous javascript and xml的缩写,是javascript、xml、css、DOM等多个技术的组合。 Ajax的工作原理是一个页面的指定位置可以加载另一个页面所有的输出内容,这样就实现了一个静态页面也能获取到 数据库中的返回数据信息了。所以ajax技术实现了一个静态网页在不刷新整个页面的情况下与服务器通信, 减少了用户等待时间,同时也从而降低了网络流量,增强了客户体验的友好程度。 Ajax的优点是: 1. 减轻了服务器端负担,将一部分以前由服务器负担的工作转移到客户端执行,利用客户端闲置的资源进行处理; 2. 在只局部刷新的情况下更新页面,增加了页面反应速度,使用户体验更友好。 Ajax的缺点是不利于seo推广优化,因为搜索引擎无法直接访问到ajax请求的内容。 ajax的核心技术是XMLHttpRequest,它是javascript中的一个对象。 ~~~ 37. 你如何理解smarty,smarty的运用过程中注意哪些细节? ~~~ Smarty是基于MVC概念的一种模板引擎,它将一个页面程序分成了两部分来实现:即视图层和控制层, 也就是说smarty技术将用户UI与php代码分离开。 这样程序员和美工各司其职,互不干扰。 smarty运用过程中要注意以下几个问题: 1.正确配置smarty。主要要配置smarty模板文件的路径; 2.php页面中使用assign赋值 和 display显示页面; 3.smarty模板文件中不允许出现php代码段,所有的注释,变量,函数都要包含在定界符内。 ~~~ 38. 如果理解oop? ~~~ OOP(object oriented programming),即面向对象编程,其中两个最重要的概念就是类和对象。 世间万物都具有自身的属性和方法,通过这些属性和方法可以区分出不同的物质。 属性和方法的集合就形成了类,类是面向对象编程的核心和基础, 通过类就将零散的用于实现某个功能的代码有效地管理起来了。 类只是具备了某些功能和属性的抽象模型,而实际应用中需要一个一个实体,也就是需要对类进行实例化, 类在实例化之后就是对象。 OOP具有三大特点: 1. 封装性: 也称为信息隐藏,就是将一个类的使用和实现分开,只保留部分接口和方法与外部联系,或者说只公开了一些供开发人员使用的方法。 于是开发人员只需要关注这个类如何使用,而不用去关心其具体的实现过程,这样就能实现MVC分工合作,也能有效避免程序间相互依赖, 实现代码模块间松藕合。 2. 继承性: 就是子类自动继承其父级类中的属性和方法,并可以添加新的属性和方法或者对部分属性和方法进行重写。继承增加了代码的可重用性。 php只支持单继承,也就是说一个子类只能有一个父类。 3. 多态性: 子类继承了来自父级类中的属性和方法,并对其中部分方法进行重写。 于是多个子类中虽然都具有同一个方法,但是这些子类实例化的对象调用这些相同的方法后却可以获得完全不同的结果,这种技术就是多态性。 多态性增强了软件的灵活性。 ~~~