thinkphp에서 파사드를 구현하는 방법

풀어 주다: 2020-03-31 09:21:07
앞으로
2741명이 탐색했습니다.

thinkphp에서 파사드를 구현하는 방법

주요 아이디어는 컨테이너와 함께 call_user_func_array()를 사용하는 것입니다.

핵심 코드와 이해는 모두 댓글에 있습니다:

<?php
//reqeuestFacade.php
    namespace facade{
        class Request extends Facade{
            public function getFacadeName(){
                return &#39;request&#39;;
            }
        }
    }

?>

<?php
//facade.php
namespace facade{
    class Facade{

        public static function createFacade(){
            $class = static::class; //在这个获取的$class其实是facade\reqeust
            //在这里利用static::得到getFacadeName,返回真正的request的变量名
            $facadeClass = static::getFacadeName();

            if ($facadeClass) {
                $class = $facadeClass;
            } elseif (isset(self::$bind[$class])) {
                $class = self::$bind[$class];
            }
            //echo $class;
            利用容器去获取reqeust,而不是facade\reqeust
            return \Container::get($class);
        }
    
        public static function __callStatic($method, $params)
        {
            return call_user_func_array([static::createFacade(), $method], $params);
        }
    }
}


?>
로그인 후 복사

아래 테스트 코드

reqeust.php

<?php

class Request{
    public $name = &#39;Real Request&#39;;

    public  function sayName(){
        echo $this->name;
    }

}

?>
로그인 후 복사

test.php

<?php

    use facade\Request;

    include "Container.php";
    include "Facade.php";
    include "RequestFacade.php";
    include "Request.php";

    Request::sayName();

?>
로그인 후 복사

추천 튜토리얼: thinkphp 튜토리얼

위 내용은 thinkphp에서 파사드를 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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