ホームページ  >  記事  >  バックエンド開発  >  PHP 面接の質問におけるオブジェクト指向の質問の分析

PHP 面接の質問におけるオブジェクト指向の質問の分析

黄舟
黄舟オリジナル
2017-11-10 10:38:394015ブラウズ

オブジェクト指向は PHP を学ぶ上で不可欠な部分です。そのため、多くの友人はオブジェクト指向の知識がほとんどなく、面接に行くと PHP でのオブジェクト指向の質問にどう答えればよいのかわかりません。面接の質問 前回の記事では、PHP の面接の質問、筆記試験の質問、および PHP のコア テクノロジの質問についても紹介しました。今日は、この PHP の面接の質問におけるオブジェクト指向の質問について説明します。

PHP 面接の質問 - オブジェクト指向の質問

1. PHP の 3 つのアクセス制御モードの違いを書き留めます: パブリック、プロテクト、プライベート (新浪技術部門)

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. 次のプログラムの出力結果を記述します(Sina) .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のマジックメソッド関数とは何ですか?その使用例を教えてください(Tencent PHPエンジニア筆記試験問題)

sleep シリアライズは前に呼び出されました<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 はアンシリアライズ時に呼び出されます

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)

ステートメントを使用します。例:

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

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

A. 機能します。クラス定義は複数の PHP ブロックに分割できます。
B. 機能しません。クラス定義は 1 つの PHP ブロック内に存在する必要があります。
C. 複数の 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.disName🎜E.出力なし🎜答え:D🎜🎜12. 🎜🎜🎜抽象クラス🎜はインスタンス化できず、他のクラスの親クラスとしてのみ使用できるクラスです。抽象クラスは、キーワード abstract を使用して宣言されます。 🎜抽象クラスは、メンバー変数とメンバー メソッドを含むという点で通常のクラスと似ています。この 2 つの違いは、抽象クラスにはメソッド本体が本質的に含まれないことです。サブクラスごとに。 🎜抽象メソッドの形式は次のとおりです: 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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。