PHP面试题精讲 — 面向对象、类

举报
小雨青年 发表于 2022/03/28 23:55:21 2022/03/28
【摘要】 日拱一卒无有尽,功不唐捐终入海 💋 目录 一、常见题型1. 面向对象的特点是什么?2. `private` `protected` `public` 的区别?3. 抽象类和接口的区...

日拱一卒无有尽,功不唐捐终入海 💋
在这里插入图片描述

一、常见题型

1. 面向对象的特点是什么?

  • 封装
  • 继承
  • 多态

2. private protected public 的区别?

  • private : 私有成员, 在类的内部访问。
  • protected : 保护成员,该类内部和继承类中访问。
  • public : 公共成员,没有访问限制。

3. 抽象类和接口的区别?

  • 抽象类(abstract)要继承(extends),只能继承一个
  • 接口(interface)要实现(implements),可以实现多个,必须实现全部方法

4. PHP如何实现多继承?

PHP原生支持多继承,但是可以通过trait实现。


trait traitXiaoyuOne{
    public function test(){
        echo "This is trait one <br/>";
    }
    public function testOne(){
        echo "one <br/>";
    }
}
 
trait traitXiaoyuTwo{
    public function testTwo(){
        echo "two <br/>";
    }
}
 
class basicTest{
    public function test(){
        echo "hello world\n";
    }
}
class myCodeextends basicTest{
    use traitXiaoyuOne,traitXiaoyuTwo;
}
 
$test =new mycode();
$test->test();
$test->testOne();
$test->testTwo();


  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

在这里插入图片描述

二、知识总结

下面是最常见面试中会遇到的知识点,问题频率很高,建议多看几遍加强记忆。

1. 访问控制protected private public


class MyClass
{
    public $public = 'Public';
    protected $protected = 'Protected';
    private $private = 'Private';

    function printHello()
    {
        echo $this->public;
        echo $this->protected;
        echo $this->private;
    }
}

$obj = new MyClass();
echo $obj->public; // 这行能被正常执行
echo $obj->protected; // 这行会产生一个致命错误
echo $obj->private; // 这行也会产生一个致命错误
$obj->printHello(); // 输出 Public、Protected 和 Private


  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

2. 对象继承extends

对象的继承在实际项目的框架中运用非常广泛,子类就会继承父类所有公有的和受保护的方法。除非子类覆盖了父类的方法,被继承的方法都会保留其原有功能。

比如数据操作的模型类、视图类、控制器类,这些一般都是会继承一个父类,再根据实际情况去自己实现父类的方法。


class foo
{
    public function printItem($string) 
    {
        echo 'Foo: ' . $string . PHP_EOL;
    }
    
    public function printPHP()
    {
        echo 'PHP is great.' . PHP_EOL;
    }
}

class bar extends foo
{
    public function printItem($string)
    {
        echo 'Bar: ' . $string . PHP_EOL;
    }
}

$foo = new foo();
$bar = new bar();
$foo->printItem('baz'); // Output: 'Foo: baz'
$foo->printPHP();       // Output: 'PHP is great' 
$bar->printItem('baz'); // Output: 'Bar: baz'
$bar->printPHP();       // Output: 'PHP is great'


  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29

3. 魔术方法__construct()

初级面试题对于魔术方法的提问频率很高,主要在乎你知不知道有魔术方法,只要能答上来几个就算是合格了。

常见的方法有

  • __construct() 具有构造函数的类会在每次创建新对象时先调用此方法
  • __destruct() 构函数会在到某个对象的所有引用都被删除或者当对象被显式销毁时执行
  • __call() 在对象中调用一个不可访问方法时调用
  • __callStatic() 在静态上下文中调用一个不可访问方法时调用
  • __get() 读取不可访问属性的值时调用
  • __set() 在给不可访问属性赋值时调用
  • __isset() 当对不可访问属性调用 isset() 或 empty() 时调用
  • __unset() 当对不可访问属性调用 unset() 时调用
  • __toString() 一个类被当成字符串时调用

对于一般的编码规范来说,由于魔术方法是两个下划线,所以规范为一个下划线,比如_getList()

4. 类常量const

类的常量指的是在实际业务中不变的值,这些一般都放在常量里,关键词是const

常量的值必须是一个定值,不能是变量,类属性,数学运算的结果或函数调用。


class MyClass
{
    const constant = 'constant value';

    function showConstant() {
        echo  self::constant . "\n";
    }
}

echo MyClass::constant . "\n";

$classname = "MyClass";
echo $classname::constant . "\n"; // 自 5.3.0 起

$class = new MyClass();
$class->showConstant();

echo $class::constant."\n"; // 自 PHP 5.3.0 起


  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

5. 静态方法 static

  • 声明类属性或方法为静态,就可以不实例化类而直接访问。
  • 静态属性不能通过一个类已实例化的对象来访问(但静态方法可以)。


class Foo {
    public static function aStaticMethod() {
        // ...
    }
}

Foo::aStaticMethod();
$classname = 'Foo';
$classname::aStaticMethod();


  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

三、总结

面向对象是初级面试中很重要的一点,对应的实际业务中应用也非常多。

建议全面熟悉相关问题,有疑问可以评论,大家一起解决问题。

在这里插入图片描述

文章来源: coderfix.blog.csdn.net,作者:小雨青年,版权归原作者所有,如需转载,请联系作者。

原文链接:coderfix.blog.csdn.net/article/details/119089883

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。