PHP 変数とクラスやオブジェクトなどの型拡張子

伊谢尔伦
リリース: 2016-11-21 17:01:49
オリジナル
1040 人が閲覧しました

1. 概要とインストール

これらの関数を使用すると、クラスとオブジェクトのインスタンスに関する情報を取得できます。 オブジェクトが属するクラス名と、そのメンバーのプロパティおよびメソッドを取得できます。 これらの関数を使用すると、オブジェクトとクラスの関係だけでなく、それらの継承関係 (オブジェクト クラスがどのクラスから継承しているかなど) も知ることができます。

PHP でのオブジェクトとクラスの実装方法と使用方法の詳細な説明については、オブジェクト指向の章を参照してください。

これらの関数を使用するためにインストールは必要ありません。これらは PHP コアの一部です。

2. クラス関数とオブジェクト関数の完全なコレクション

__autoload — 未定義のクラスのロードを試みます

call_user_method_array — パラメーター配列を渡しながらユーザー メソッドを呼び出します (非推奨)

call_user_method — 特定のオブジェクトのユーザー メソッドを呼び出します (非推奨) )

class_alias — クラスのエイリアスを作成します

class_exists — クラスが定義されているかどうかを確認します

get_called_class — 後期静的バインディング (「後期静的バインディング」) のクラスの名前

get_class_methods — 以下から構成される配列を返しますクラスのメソッド名

get_class_vars — クラスのデフォルト属性から構成される配列を返します

get_class — オブジェクトのクラス名を返します

get_declared_classes — 定義されたクラスの名前から構成される配列を返します

get_declared_interfaces — 宣言されたすべてのインターフェイスを含む配列を返します

get_declared_traits — 定義されているすべての特性の配列を返します

get_object_vars — オブジェクト属性で構成される連想配列を返します

get_parent_class — オブジェクトまたはクラスの親クラス名を返します

interface_exists — チェックインターフェイスが定義されているかどうか

is_a — オブジェクトがこのクラスに属しているか、クラスがこのオブジェクトの親クラスである場合に TRUE を返す

is_subclass_of — このオブジェクトがこのクラスのサブクラスである場合に TRUE を返す

method_exists —クラスのメソッドが存在するかどうかを確認します

property_exists — オブジェクトまたはクラスにこの属性があるかどうかを確認します

trait_exists - 指定された特性が存在するかどうかを確認します

3. 使用例

この例では、最初に基本クラスを定義しますそしてクラスの延長。 この基本クラスは、食用かどうかとその色に関して、一般的な野菜を記述します。 サブクラス Spinach は、調理するためのメソッドと、調理されたかどうかを確認するための別のメソッドを追加します。

例 #1classes.inc

<?php
    // base class with member properties and methods
    class Vegetable {
        var $edible;
        var $color;
        function Vegetable($edible, $color="green") 
        {
            $this->edible = $edible;
            $this->color = $color;
        }
        function is_edible() 
        {
            return $this->edible;
        }
        function what_color() 
        {
             return $this->color;
        }
   } // end of class Vegetable
   // extends the base class
   class Spinach extends Vegetable {
       var $cooked = false;
       function Spinach() 
       {
           $this->Vegetable(true, "green");
       }
       function cook_it() 
       {
           $this->cooked = true;
       }
       function is_cooked() 
       {
           return $this->cooked;
       }
   } // end of class Spinach
?>
ログイン後にコピー

次に、これらのクラスから 2 つのオブジェクトをインスタンス化し、それらのクラスの継承関係を含むそれらの情報を出力します。 同時に、主にこれらの変数を美しく出力するために、いくつかのユーティリティ関数も定義しました。

例 #2 test_script.php

<?php
    include "classes.inc";
    // 实用函数
    function print_vars($obj)
    {
        foreach (get_object_vars($obj) as $prop => $val) {
            echo "\t$prop = $val\n";
        }
    }
    function print_methods($obj)
    {
        $arr = get_class_methods(get_class($obj));
        foreach ($arr as $method) {
            echo "\tfunction $method()\n";
        }
    }
    function class_parentage($obj, $class)
    {
        if (is_subclass_of($GLOBALS[$obj], $class)) {
            echo "Object $obj belongs to class " . get_class($$obj);
            echo " a subclass of $class\n";
        } else {
            echo "Object $obj does not belong to a subclass of $class\n";
        }
    }
    // 实例化 2 对象
    $veggie = new Vegetable(true, "blue");
    $leafy = new Spinach();
    // 打印这些对象的信息
    echo "veggie: CLASS " . get_class($veggie) . "\n";
    echo "leafy: CLASS " . get_class($leafy);
    echo ", PARENT " . get_parent_class($leafy) . "\n";
    // 显示蔬菜的属性
    echo "\nveggie: Properties\n";
    print_vars($veggie);
    // and leafy methods
    echo "\nleafy: Methods\n";
    print_methods($leafy);
    echo "\nParentage:\n";
    class_parentage("leafy", "Spinach");
    class_parentage("leafy", "Vegetable");
?>
ログイン後にコピー

注意すべき重要な点は、上記の例では、オブジェクト $leafy が Spinach ( Vegetable のサブクラス) のインスタンスであり、スクリプトの最後の部分が次を出力することです。情報:

rreee


関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!