>백엔드 개발 >PHP 튜토리얼 >PHP 면접 질문의 객체지향 질문 분석

PHP 면접 질문의 객체지향 질문 분석

黄舟
黄舟원래의
2017-11-10 10:38:394071검색

객체 지향은 PHP 학습에 없어서는 안될 부분입니다. 많은 친구들이 객체 지향에 대한 지식이 거의 없습니다. 따라서 많은 친구들이 회사에 면접을 갈 때 객체 지향 질문에 어떻게 대답해야 할지 모릅니다. 좋습니다. 이전 기사에서는 PHP 인터뷰 질문, 필기 테스트 질문 및 PHP 핵심 기술 질문도 소개했습니다. 오늘은 이 PHP 인터뷰 질문에 나오는 객체 지향 질문이 무엇인지 살펴보겠습니다.

PHP 인터뷰 질문 - 객체 지향 질문

1. PHP의 세 가지 액세스 제어 모드인 공개, 보호, 비공개의 차이점을 적어보세요(시나 기술부)

public: 공개, 어디서나 액세스 가능
protected: 상속, 가능만 가능 이 클래스 또는 하위 클래스에서 액세스할 수 있으며 다른 곳에서는 액세스할 수 없습니다
private: private, 이 클래스에서만 액세스할 수 있으며 다른 곳에서는 액세스할 수 없습니다

관련 질문: PHP5 권한 제어 수정자를 작성하세요
private protected public
2. 디자인 패턴 검사: 다음 요구 사항을 충족하도록 클래스를 디자인하려면 단일형 디자인 패턴 방법을 사용하십시오.
PHP5 코드를 사용하여 클래스 구현 중에 고유한 값만 얻을 수 있도록 작성하십시오. 데이터베이스 연결에 대한 각 액세스. 특정 연결 데이터베이스코드는 무시됩니다. 기본 논리 코드를 작성하십시오(Sina.com 기술 부서)
<?php
    class Mysql
    {
        private static $instance = null;
        private $conn;

        // 构造方法,设置为private,不允许通过new获得对象实例
        private function construct(argument)
        {
            $conn = mysql_connect("localhost","root","root");
        }

        // 获取实例方法
        public function getInstance()
        {
            if (!self::$instance instanceof self) {
                self::$instance = new self;
            }
            return self::$instance;
        }

        // 禁止克隆
        private function clone(){}
    }

    // 获得对象
    $db = Mysql::getInstance();
?>
3. 다음 프로그램의 출력 결과를 작성하십시오. com 기술부)
<?php
    class a
    {
        protected $c;

        public function a()
        {
            $this->c = 10;
        }
    }

    class b extends a
    {
        public function print_data()
        {
            return $this->c;
        }
    }

    $b = new b();
    echo $b->print_data();
?>

출력 결과 10

[!]4. PHP5의 magicmethods함수는 무엇인가요? 사용법 예시를 알려주세요(Tencent PHP 엔지니어가 작성한 테스트 문제)

sleep code> serialize가 호출되기 전에 <code>sleep serialize 之前被调用
wakeup unserialize 时被调用
toString 打印一个对象时被调用
set_state 调用 var_export 时被调用,用set_state的返回值作为 var_export 的返回值
construct 构造函数,实例化对象时被调用
destruct 析构函数,当对象销毁时被调用
call 对象调用某个方法,若存在该方法,则直接调用,若不存在,则调用call 函数
get 读取一个对象属性时,若属性存在,则直接返回,若不存在,则调用get 函数
set 设置一个对象的属性时,若属性存在,则直接赋值,若不存在,则调用set 函数
isset 检测一个对象的属性是否存在时被调用
unset unset 一个对象的属性时被调用
clone 克隆对象时被调用
autoload 实例化一个对象时,如果对应的类不存在,则该方法被调用

相关题目:请写出 php5 的构造函数和析构函数

构造函数:construct
析构函数:destruct wakeup이 호출됩니다. unserialize가 호출될 때

toString이 호출됩니다. 객체를 인쇄할 때
set_state가 호출되고 var_export가 호출될 때, set_state의 반환값 사용 이 값은 var_export
construct 생성자

, 개체를 인스턴스화할 때 호출됨

destruct 소멸자, 개체가 파괴될 때 호출됨
call 개체가 메서드를 호출합니다. 메소드가 존재하면 직접 호출됩니다. 존재하지 않으면 객체 속성을 읽을 때 call 함수
get를 호출합니다. 존재하지 않으면 get 함수가 호출됩니다.
set 객체의 속성을 설정할 때 속성이 존재하면 값이 직접 할당됩니다. 존재하지 않으면 set 함수가 호출됩니다.
isset는 객체를 감지합니다. 객체의 속성이 존재할 때 호출됩니다.
unset Unset이 호출됩니다. 객체의 속성이 호출될 때
clone 객체가 복제될 때 호출됩니다
autoload 객체를 인스턴스화합니다 객체, 해당 클래스가 없으면 이 메서드가 호출됩니다
관련 질문: php5의 생성자와 소멸자를 작성해주세요

Constructor: construct

Destructor: destruct
5. 다음 클래스를 사용하는 방법과 다음 내용을 설명하세요.

<?php
    class test{
        function Get_test($num){
            $num = md5(md5($num)."En");
            return $num;
        }
    }

    $testObject = new test();
    $encryption = $testObject->Get_test("itcast");
    echo $encryption;
?>

이중 md5 암호화

6. 메서드나 속성 없이 "myclass"라는 클래스를 어떻게 선언하겠습니까?( Yahoo)
class myclass{};

관련 질문: 메서드와 속성 없이 "myclass"라는 클래스를 선언하는 방법 ?

7. "myclass"의 인스턴스인 개체는 어떻게 생성하나요? (Yahoo)
$obj= new myclass();
관련 질문: "myclass"의 인스턴스인 개체는 어떻게 생성되나요?

8. 클래스 내에서 클래스의 속성에 어떻게 액세스하고 설정하나요?(Yahoo)

사용 구문: $this->propertyName, 예:

<?php
    class mycalss{
        private $propertyName;
        public function construct()
        {
            $this->propertyName = "value";
        }
    }
?>

9. )
<?php
class Foo{
?>
<?php
    function bar(){
        print "bar";
    }
}
?>

A는 작동합니다. 클래스 정의는 여러 PHP 블록으로 분할될 수 있습니다.
B는 작동하지 않습니다. 클래스 정의는 단일 PHP 블록에 있어야 하지만 여러 PHP 블록에 있을 수 있습니다.
D.가 작동하며 클래스 정의는 여러 파일과 여러 PHP 블록으로 분할될 수 있습니다.

답변: B10. 클래스의 속성을 직렬화하여 세션에 저장할 수 있으므로 나중에 전체 클래스를 복원할 수 있습니다. 그리고 사용되는 기능은 다음과 같습니다.
serialize() 및 unserialize()

11. PHP에서 파생 클래스에 상위 클래스와 동일한 이름의 함수가 있는 경우 파생 클래스의 함수가 상위 클래스의 함수를 대체하며 프로그램 결과는 다음과 같습니다. 🎜
<?php
class A{
    function disName(){
        echo "Picachu";
    }
}

class B extends A{
    var $tmp;
    function disName(){
        echo "Doraemon";
    }
}

$cartoon = New B;
$cartoon->disName();
?>
🎜A.tmp🎜 B. Picachu🎜C.D.Doraemon🎜E. 출력 없음🎜답변: D🎜🎜12. 🎜🎜🎜추상 클래스🎜는 인스턴스화할 수 없고 다른 클래스의 상위 클래스로만 사용할 수 있는 클래스입니다. 추상 클래스는 abstract 키워드를 통해 선언됩니다. 🎜추상 클래스는 모두 멤버 변수와 멤버 메서드를 포함합니다. 둘의 차이점은 추상 클래스에는 메서드 본문이 하나 이상 있어야 한다는 것입니다. 서브클래스별. 🎜추상 메소드의 형식은 다음과 같습니다: abstract function abstractMethod();🎜

接口是通过 interface 关键字来声明的,接口中的成员常量和方法都是 public 的,方法可以不写关键字 public,接口中的方法也是没有方法体。接口中的方法也天生就是要被子类实现的。
抽象类和接口实现的功能十分相似,最大的不同是接口能实现多继承。在应用中选择抽象类还是接口要看具体实现。
子类继承抽象类使用 extends,子类实现接口使用 implements。

13. 类中如何定义常量、如何类中调用常量、如何在类外调用常量。

类中的常量也就是成员常量,常量就是不会改变的量,是一个恒值。定义常量使用关键字 const,例如:const PI = 3.1415326;
无论是类内还是类外,常量的访问和变量是不一样的,常量不需要实例化对象,访问常量的格式都是类名加作用域操作符号(双冒号)来调用,即:类名:: 类常量名

14. autoload()函数是如何运作的?

使用这个魔术函数的基本条件是类文件的文件名要和类的名字保持一致。
当程序执行到实例化某个类的时候,如果在实例化前没有引入这个类文件,那么就自动执行autoload()函数。

这个函数会根据实例化的类的名称来查找这个类文件的路径,当判断这个类文件路径下确实存在这个类文件后就执行 include 或者 require 来载入该类,然后程序继续执行,如果这个路径下不存在该文件时就提示错误。

15. 哪种OOP设置模式能让类在整个脚本里只实例化一次?(奇矩互动)

A. MVC
B. 代理模式
C.
状态模式
D. 抽象工厂模式
E. 单件模式
答案:E

16. 借助继承,我们可以创建其他类的派生类。在PHP中,子类最多可以继承几个父类?(奇矩互动)

A. 1个
B. 2个
C. 取决于系统资源
D. 3个
E. 想要几个有几个
答案:A

17. 执行以下代码,输出结果是(奇矩互动)
<?php
    abstract class a{
        function construct()
        {
            echo "a";
        }
    }

    $a = new a();
?>

A. a
B. 一个错误警告
C. 一个致命性的报错
答案:C 因为类a是抽象类,不能被实例化

18. 执行以下代码,输出结果是
<?php
class a{
    function construct(){
        echo "echo class a something";
    }
}

class b extends a{
    function construct(){
        echo "echo class b something";
    }
}

$a = new b();
?>

A. echo class a something echo class b something
B. echo class b something echo class a something
C. echo class a something
D. echo class b something
答案:D
类 b 继承自类 a,两个类都定义了构造函数,由于二者名字相同,所以子类中的构造函数覆盖了父类的构造函数,要想子类对象实例化时也执行父类的构造函数,需要在子类构造函数中使用 parent::construct()来显示调用父类构造函数。

19. 请定义一个名为MyClass的类,这个类只有一个静态方法justDoIt。(卓望)
<?php
class MyClass{
    public static function justDoIt(){

    }
}
?>
20. 只有该类才能访问该类的私有变量吗?(卓望)

是的

21. 写出你知道的几种设计模式,并用php代码实现其中一种。(卓望)

单例模式,工厂模式
单例模式 实现代码 见 第二题

总结:

我们在这个片文章中,我们主要给大家汇总了一下php面试题中关于面向对象中的一些常见面试问题,具体细节大家可以自己扩展,希望对你有所帮助!

相关推荐:

最让人容易出错的10道php面试题


PHP 면접 문제 속 PHP 핵심 기술 문제 공유


PHP 면접 문제 속 필기 시험 문제 요약


2017년 PHP 면접 문제와 답변의 가장 완벽한 요약


위 내용은 PHP 면접 질문의 객체지향 질문 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.