PHP基础面试题及答案
1.说说PHP中变量的作用域有哪几种?实际开发中怎么用?
答案:主要有4种作用域:
局部作用域:函数内部定义的变量,只能在函数里用,函数执行完就销毁。比如函数里定义的$name,外面调不到。
全局作用域:函数外部定义的变量,只能在全局用,函数里要访问得加global关键字,或者用超全局$GLOBALS数组。
示例:
$age=20;//全局变量
functiongetAge(){
global$age;//声明用全局变量
echo$age;//输出20
//也可以用$GLOBALS[age]
}
静态作用域:函数里用static定义的变量,函数执行完不销毁,下次调用还保留上次的值。比如统计函数调用次数:
functioncountCall(){
static$num=0;
$num++;
echo$num;
}
countCall();//1
countCall();//2
超全局作用域:PHP自带的超全局变量(如$_POST、$_GET、$_SESSION),在全局和函数里都能直接用,不用声明。
2.PHP数组分哪两类?实际开发中分别用在什么场景?
答案:主要分索引数组和关联数组,核心区别是键名的类型:
索引数组:键名是数字(默认从0开始),适合存“有序列表”类数据,比如商品列表、用户ID列表:
$goods=[手机,电脑,平板];//索引数组
echo$goods[1];//输出“电脑”
关联数组:键名是自定义字符串,适合存“键值对应”的结构化数据,比如单条用户信息、配置项:
$user=[
id=101,
name=张三,
phone=];//关联数组
echo$user[name];//输出“张三”
3.echo和print有什么区别?实际开发中更常用哪个?
答案:3个核心区别:
返回值:echo没有返回值,print返回1(整数);
输出数量:echo能同时输出多个值(用逗号分隔),print只能输出一个;
用法:echo是语言结构(不用括号也能写,如echoa),print也是语言结构,但习惯加括号(如print(a))。
实际开发中优先用echo,因为效率稍高,且支持多值输出,比如:
echo姓名:,$name,,年龄:,$age;//直接输出多个值
只有需要用返回值的场景才用print,比如:
if(print(数据已输出)){//利用print返回1的特性
echo-输出成功;
}
4.什么是PHP的“面向对象”?说一个你常用的基础特性(比如封装、继承)怎么用?
答案:面向对象(OOP)是把代码封装成“类”(模板)和“对象”(实例),方便复用和维护。以“封装”和“继承”为例:
封装:把类的属性设为私有(private),通过公开的get/set方法访问,避免属性被随意修改。比如用户类控制年龄只能是正数:
classUser{
private$age;//私有属性,外部不能直接改
//设值方法:加逻辑判断
publicfunctionsetAge($age){
if($age0$age150){
$this-age=$age;
}else{
echo年龄无效;
}
}
//取值方法
publicfunctiongetAge(){
return$this-age;
}
}
//使用
$user=newUser();
$user-setAge(25);//有效
echo$user-getAge();//25
$user-setAge(200);//输出“年龄无效”
继承:用extends关键字让子类继承父类的属性和方法,子类还能重写父类方法。比如父类Animal,子类Cat:
classAnimal{
publicfunctionsay(){
echo动物叫;
}
}
//子类继承父类
classCatextendsAnimal{
//重写父类的say方法
publicfunctionsay(){
echo喵喵叫;
}
}
$cat=