> 백엔드 개발 > PHP 튜토리얼 > 클래스 및 객체와 같은 PHP 변수 및 유형 확장

클래스 및 객체와 같은 PHP 변수 및 유형 확장

伊谢尔伦
풀어 주다: 2016-11-21 17:01:49
원래의
1114명이 탐색했습니다.

1. 개요 및 설치

이러한 기능을 사용하면 클래스 및 개체 인스턴스에 대한 정보를 얻을 수 있습니다. 객체가 속한 클래스 이름과 해당 멤버 속성 및 메서드를 얻을 수 있습니다. 이러한 함수를 사용하면 객체와 클래스 간의 관계뿐만 아니라 상속 관계(예: 객체 클래스가 상속받는 클래스)도 찾을 수 있습니다.

PHP에서 객체와 클래스가 어떻게 구현되고 사용되는지에 대한 자세한 설명을 보려면 객체 지향 장을 참조하세요.

이러한 기능은 PHP 코어의 일부이므로 설치가 필요하지 않습니다.

2. 클래스 및 객체 함수의 전체 목록

__autoload — 정의되지 않은 클래스 로드 시도

call_user_method_array — 매개변수 배열을 전달하는 동안 사용자 메서드 호출(구식)

call_user_method — 특정 객체에 대한 사용자 메서드 호출(사용되지 않음)

class_alias — 클래스에 대한 별칭 생성

class_exists — 클래스가 정의되었는지 확인

get_called_class — 후기 정적 바인딩("Late Static Binding") 클래스의 이름

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 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의 하위 클래스)의 인스턴스이고, the other script 마지막 부분은 다음 정보를 출력합니다:

[...]
Parentage:
Object leafy does not belong to a subclass of Spinach
Object leafy belongs to class spinach a subclass of Vegetable
로그인 후 복사


관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 이슈
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿