PHP面试题

1. echo、print、print_r、var_dump

  • echo 可以输出一个或多个字符 无返回值 是语言结构
  • print 只能输出单个字符 有返回值1 是语言结构
  • print_r 打印关于变量的易于理解的信息 设置第二个参数true 则将输出值返回。
  • var_dump 打印关于变量的易于理解的信息 输出结果带类型 主要用于调试

2.单引号和双引号的区别

$a = 123;
echo '$a'."\n";  \\ "\n"是换行符
echo "$a";
输出结果:
$a
123
  • 双引号的内容是经过PHP的语法分析器解析过的,任何变量在双引号中都会转换为它的值进行输出显示。
  • 单引号的内容则是所见即所得,无论有无变量,都会当作普通字符串输出。

3.isset 和 empty的区别

  • isset函数是判断变量是否被定义且为非空 返回值为true
$a = null;
var_dump(isset($a));
var_dump(isset($b));
输出结果:
bool(false)
bool(false)

empty函数判断一个变量是否为空 为空则返回true;

  • "" (空字符串)
  • 0 (作为整数的0)
  • 0.0 (作为浮点数的0)
  • "0" (作为字符串的0)
  • NULL
  • FALSE
  • array() (一个空数组)
  • $var; (一个声明了,但是没有值的变量)

4.面向对象相关知识点

$this

指向的是实际调用时的对象。在定义类时,无法得知对象的名称叫什么,要想调用类中的方法,就要使用伪变量$this,只可以在类的内部使用。

构造函数和析构函数

具有构造函数的类会在每次创建新对象时先调用此方法,所以非常适合在使用对象之前做一些初始化工作

class SportObject{
    public $name;
    public $age;
    public $height;

    public function  __construct($name,$age,$height)
    {
        $this->name = $name;
        $this->age = $age;
        $this->height = $height;
    }

    public function PlayBasket(){
        if ($this->age<25 && $this->height<185){
            return $this->name."符合打篮球标准";
        }else{
            return $this->name."不符合打篮球标准";
        }
    }
}

$sport = new SportObject("jack",'22','184');
echo $sport->PlayBasket();

析构函数会在到某个对象的所有引用都被删除或者当对象被显式销毁时执行
PHP内置的垃圾回收机制,自动清除不再使用的对象,释放内存。
类似于unset();

类常量

class BookObject{
    const BOOK_TYPE = "PHP";
}
echo BookObject::BOOK_TYPE;

常量不需要实例化对象 直接通过类名::常量名调用即可;

parent 和self

parent:可以调用父类的方法,成员变量和常量。
self :用于访问类的静态属性,静态方法和常量;

class BookObject{
    const BOOK_TYPE = "PHP";
}

class book extends BookObject{
    const BOOK= "Laravel";
    function __construct()
    {
        echo parent::BOOK_TYPE."\n";
        echo self::BOOK;
    }
}
$obj = new book();

static

static 可以用于静态或非静态方法中,也可以访问类的静态属性、静态方法、常量和非静态方法,但不能访问非静态属性

public、private、protected、final的区别

public(公共成员)

可以在程序的任意位置被其他的类和对象调用,子类可以继承父类所有的公共成员。

private(私有成员)

只能在类的内部被调用和修改,不可以在子类被调用;

protected(保护成员)

可以在本类和子类中调用,其余地方不可以被调用;

final关键字

修饰类
表示该类不能被继承也不能;
修饰方法
表示该方法无法被被子类覆盖。

类的静态调用和实例化调用

1. 内存空间

静态方法在内存中只存在一份,直接调用静态方法速度要快一些。但静态方法申明的过多,反而会影响系统性能。

实例化不一样,每一个实例化是一个对象,在内存中是多个的

2.不同点

静态调用不需要实例化即可调用

静态方法不能调用非静态属性,因为非静态属性需要实例化后,存放在对象里

静态方法可以调用非静态方法,使用 self 关键字。php 里,一个方法被 self:: 后,自动转变为静态方法

调用类的静态函数时不会自动调用类的构造函数

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。