当前位置: 首页 > news >正文

二级目录怎么做网站小吃培训

二级目录怎么做网站,小吃培训,做网站需要什么资金,是阿里巴巴好还是自己做网站好?在使用框架的时候我们经常会看到如下代码 类的方法不会显示地声明在代码里面,而是通过扩展的形式后续加进去,这么做的好处是可以降低代码的耦合度、保证源码的完整性、团队开发的时候可以分别写自己的服务去扩展类,减少代码冲突等等。我自己…

在使用框架的时候我们经常会看到如下代码
在这里插入图片描述
类的方法不会显示地声明在代码里面,而是通过扩展的形式后续加进去,这么做的好处是可以降低代码的耦合度、保证源码的完整性、团队开发的时候可以分别写自己的服务去扩展类,减少代码冲突等等。我自己看着框架源码实现了这个功能。
以下是结果:
在这里插入图片描述
base代码
在这里插入图片描述
index.php

<?php
require_once "macroable.php";
require_once "base.php";
$a = new phpmacro\Base();
$a::macro("first",function (){$this->query .="I had be macro";return $this->query;
});
$a->first();
var_dump($a->query);

base.php

<?php
namespace phpmacro;/*** @method first()*/
class Base 
{use Macroable;public $query = "init-query";function __construct(){// code...echo "base-contruct";}
}

Macroable.php

<?phpnamespace phpmacro;use BadMethodCallException;
use Closure;
use ReflectionClass;
use ReflectionMethod;trait Macroable
{/*** The registered string macros.** @var array*/protected static $macros = [];/*** Register a custom macro.** @param  string  $name* @param  object|callable  $macro* @return void*/public static function macro($name, $macro){static::$macros[$name] = $macro;}/*** Mix another object into the class.** @param  object  $mixin* @param  bool  $replace* @return void** @throws \ReflectionException*/public static function mixin($mixin, $replace = true){$methods = (new ReflectionClass($mixin))->getMethods(ReflectionMethod::IS_PUBLIC | ReflectionMethod::IS_PROTECTED);foreach ($methods as $method) {if ($replace || ! static::hasMacro($method->name)) {static::macro($method->name, $method->invoke($mixin));}}}/*** Checks if macro is registered.** @param  string  $name* @return bool*/public static function hasMacro($name){return isset(static::$macros[$name]);}/*** Flush the existing macros.** @return void*/public static function flushMacros(){static::$macros = [];}/*** Dynamically handle calls to the class.** @param  string  $method* @param  array  $parameters* @return mixed** @throws \BadMethodCallException*/public static function __callStatic($method, $parameters){if (! static::hasMacro($method)) {throw new BadMethodCallException(sprintf('Method %s::%s does not exist.', static::class, $method));}$macro = static::$macros[$method];if ($macro instanceof Closure) {$macro = $macro->bindTo(null, static::class);}return $macro(...$parameters);}/*** Dynamically handle calls to the class.** @param  string  $method* @param  array  $parameters* @return mixed** @throws \BadMethodCallException*/public function __call($method, $parameters){if (! static::hasMacro($method)) {throw new BadMethodCallException(sprintf('Method %s::%s does not exist.', static::class, $method));}$macro = static::$macros[$method];if ($macro instanceof Closure) {$macro = $macro->bindTo($this, static::class);}return $macro(...$parameters);}
}

其实原理就是利用了静态调用的魔术方法与匿名函数的bindTo方法实现了类与方法解藕的效果
以下是test.php,可以清晰的看明白匿名函数bindTo跟bind是怎么用的

<?php
/** * 复制一个闭包,绑定指定的$this对象和类作用域。 * * @author 疯狂老司机 */
class Animal {private static $cat = "cat";private $dog = "dog";public $pig = "pig";
}/* * 获取Animal类静态私有成员属性*/
$cat = static function() {return Animal::$cat;
};/* * 获取Animal实例私有成员属性*/
$dog = function() {return $this->dog;
};/* * 获取Animal实例公有成员属性*/
$pig = function() {return $this->pig;
};$bindCat = Closure::bind($cat, null, new Animal());// 给闭包绑定了Animal实例的作用域,但未给闭包绑定$this对象
$bindDog = Closure::bind($dog, new Animal(), 'Animal');// 给闭包绑定了Animal类的作用域,同时将Animal实例对象作为$this对象绑定给闭包
$bindPig = Closure::bind($pig, new Animal());// 将Animal实例对象作为$this对象绑定给闭包,保留闭包原有作用域
$animal = new Animal();
$pigBindto = $pig->bindTo($animal);
echo $pigBindto()."\r\n";
echo $bindCat()."\r\n";// 根据绑定规则,允许闭包通过作用域限定操作符获取Animal类静态私有成员属性
echo $bindDog()."\r\n";// 根据绑定规则,允许闭包通过绑定的$this对象(Animal实例对象)获取Animal实例私有成员属性
echo $bindPig()."\r\n";// 根据绑定规则,允许闭包通过绑定的$this对象获取Animal实例公有成员属性

输出结果
在这里插入图片描述

http://www.ds6.com.cn/news/120847.html

相关文章:

  • 呼和浩特市网站建设公司制作网站要找什么公司
  • 婚恋网站怎么做seo软件排行榜前十名
  • 李沧做网站照片查询百度图片搜索
  • 郑州做网站公司 汉狮网络专业查询网站收录
  • 信息化管理软件网络seo
  • 货到付款网站制作如何提升网站搜索排名
  • 北京公司的网站建设湖北荆门今日头条
  • 福州做网站价格百度网游排行榜
  • github主页做网站百度指数人群画像怎么看
  • 山东省无障碍网站建设标准辽宁好的百度seo公司
  • 广州网站建设快速的网站设计制作
  • 北京b2c网站制作环球贸易网
  • 天津圣辉友联做网站东莞网络营销推广公司
  • 南宁有本地租房做网站吗google年度关键词
  • 做网站开发赚钱吗seo内链优化
  • 网站内容建设包括什么指数平台
  • 做网站有er图鞍山seo优化
  • 网站首页如何设计网站关键词查询
  • 用div和css做网站的步骤网络推广公司网站
  • phpcms移动端网站怎么做黑帽seo培训网
  • 购物网站常用的多组图左右轮播的js图片特效代码windows7系统优化工具
  • 关于幼儿园的网站模板兰州网站优化
  • flash网站轮播广告怎么做alexa
  • 甜蜜高端定制网站定制网站
  • 自做网站图片版权今日舆情热点
  • 新手建站教程报价单五年级上册优化设计答案
  • 海东市网站建设西安seo代理计费
  • 京伦科技网站做的怎么样业务推广公司
  • 做网站公司汉狮团队搜索引擎优化排名品牌
  • asp 网站开发ip反查域名网站