核心代码,理解都在注释中:
<?php//reqeuestfacade.php namespace facade{ class request extends facade{ public function getfacadename(){ return 'request'; } } }?><?php//facade.phpnamespace 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
<?phpclass request{ public $name = 'real request'; 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中实现facade的方法的详细内容。
