Maison > développement back-end > tutoriel php > Analyse des questions orientées objet dans les questions d'entretien PHP

Analyse des questions orientées objet dans les questions d'entretien PHP

黄舟
Libérer: 2023-03-17 09:36:01
original
4103 Les gens l'ont consulté

L'orientation objet est un élément indispensable de l'apprentissage du PHP. De nombreux amis ont peu de connaissances en matière d'orientation objet. Par conséquent, lorsque de nombreux amis se rendent dans l'entreprise pour des entretiens, ils ne connaissent pas les questions orientées objet dans les questions d'entretien PHP. .Que devons-nous faire ?Dans l'article précédent, nous avons également présenté les questions d'entretien PHP, les questions de test écrit et les questions sur la technologie de base PHP. Aujourd'hui, nous allons vous montrer quelles sont les questions orientées objet dans cette question d'entretien PHP ?

Questions orientées objet pour les questions d'entretien PHP

1. Notez les différences entre les trois modes de contrôle d'accès de PHP : public, protégé et privé (Département technologique de Sina)

public : Public, accessible n'importe où
protected : Hérité, accessible uniquement dans cette classe ou sous-classe, l'accès n'est pas autorisé ailleurs
private : Private, accessible uniquement dans cette classe, ailleurs Accès non autorisé

Questions connexes : veuillez écrire le modificateur de contrôle d'autorisation PHP5
privé protégé public
2. Inspection du modèle de conception : veuillez utiliser la méthode du modèle de conception monomorphe pour concevoir la classe Pour répondre aux exigences. exigences suivantes :
Veuillez utiliser du code PHP5 pour écrire des classes afin de garantir qu'une seule connexion à la base de données puisse être obtenue lors de chaque accès à la connexion à la base de données. Le code détaillé pour la connexion à la base de données est. ignoré. Veuillez écrire le code logique principal (Département de technologie de Sina)
<?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();
?>
Copier après la connexion
3 Écrivez les résultats de sortie des programmes suivants (Département de technologie de Sina)
<?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();
?>
Copier après la connexion

Résultat de sortie 10<. 🎜 >

[!]4. Quelles sont les fonctions
méthodes magiques dans PHP5 Veuillez donner des exemples de leur utilisation (questions de test écrites de l'ingénieur PHP Tencent)

la sérialisation était précédemment utilisé sleep
est appelé lorsque unserialize est appelé wakeup
est appelé lors de l'impression d'un objet toString
est appelé lorsque var_export est appelé, et la valeur de retour de set_state est utilisée comme la valeur de retour de var_export set_state
constructConstructeur , appelé lorsque l'objet est instancié
Destructeur, appelé lorsque l'objet est détruit destruct
L'objet appelle une méthode , si la méthode existe, appelez-la directement. Si elle n'existe pas, appelez la fonction call call
Lors de la lecture d'un attribut d'objet, si l'attribut existe, il reviendra directement. existe, appelez la fonction get get
Lors de la définition des attributs d'un objet, si l'attribut existe, la valeur est attribuée directement. S'il n'existe pas, la fonction set est appelée. set est appelé lors de la détection de l'existence de l'attribut d'un objet
isset unset Il est appelé lors de l'attribution des propriétés d'un objet
unset Il est appelé lors du clonage d'un objet
clone Lors de l'instanciation d'un objet, si la classe correspondante n'existe pas, cette méthode est appelée
autoload Sujets connexes : Veuillez noter le constructeur et le destructeur de php5

Constructeur :

Destructeur : construct
destruct5. Comment utiliser la classe suivante et expliquer Que signifie ce qui suit ?

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

    $testObject = new test();
    $encryption = $testObject->Get_test("itcast");
    echo $encryption;
?>
Copier après la connexion

6. déclarer une classe nommée « maclasse » sans méthodes ni propriétés ? (Yahoo)

Question connexe : Comment déclarer une classe nommée « maclasse » sans méthodes ni attributs ?
class myclass{};
Copier après la connexion
7. Comment créeriez-vous un objet, qui est une instance de « maclasse » ? (Yahoo)
Sujets connexes : Comment instancier un objet nommé « maclasse » ?
$obj= new myclass();
Copier après la connexion
8. Comment accéder et définir les propriétés d'une classe à partir de la classe ? (Yahoo)
Utiliser l'instruction : $this->propertyName, par exemple :

9. Le code ci-dessous _ Parce que.(Tencent)
<?php
    class mycalss{
        private $propertyName;
        public function construct()
        {
            $this->propertyName = "value";
        }
    }
?>
Copier après la connexion
A fonctionnera, les définitions de classe peuvent être divisées en plusieurs blocs PHP.
<?php
class Foo{
?>
<?php
    function bar(){
        print "bar";
    }
}
?>
Copier après la connexion
B. les définitions doivent être dans un seul bloc PHP.

C. ne fonctionnera pas, les définitions de classe doivent être dans un seul fichier mais peuvent être dans plusieurs blocs PHP.
D fonctionnera, les définitions de classe peuvent être divisées en plusieurs. fichiers et plusieurs blocs PHP.
Réponse : B

10. Les attributs d'une classe peuvent être sérialisés et enregistrés dans la session, afin que la classe entière puisse être restaurée ultérieurement. .

serialize() et unserialize()

11. En PHP, si la classe dérivée a une fonction du même nom que la classe parent, la fonction de la classe dérivée remplacera la fonction du parent. classe, et le résultat du programme est
A. tmp
<?php
class A{
    function disName(){
        echo "Picachu";
    }
}

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

$cartoon = New B;
$cartoon->disName();
?>
Copier après la connexion
B.Picachu

C disName
Doraemon
E.

12. Quelle est la différence entre une interface et une classe abstraite ?

La classe abstraite
est une classe qui ne peut pas être instanciée et ne peut être utilisée que comme classe parent d'autres classes. Les classes abstraites sont déclarées à l’aide du mot-clé abstract.

Les classes abstraites sont similaires aux classes ordinaires. Elles contiennent toutes deux des variables membres et des méthodes membres. La différence entre les deux est qu'une classe abstraite doit contenir au moins une méthode abstraite. être remplacé par des sous-classes. Le format de la méthode abstraite est : fonction abstraite 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();
?>
Copier après la connexion

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();
?>
Copier après la connexion

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(){

    }
}
?>
Copier après la connexion
20. 只有该类才能访问该类的私有变量吗?(卓望)

是的

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

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

总结:

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

相关推荐:

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


Partage des questions technologiques de base PHP dans les questions d'entretien PHP


Un résumé des questions de test écrites dans les questions d'entretien PHP


Le résumé le plus complet des questions et réponses des entretiens PHP en 2017


Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal