日期: 2022-09-20 15:51:14 浏览数:3

上往建站提供服务器空间服务商,百度快照排名,网站托管,百度推广运营,致力于设计外包服务与源代码定制开发,360推广,搜狗推广,增加网站的能见度及访问量提升网络营销的效果,主营:网站公司,百度推广公司电话,官网搭建服务,网站服务企业排名,服务器空间,英文域名等业务,专业团队服务,效果好。
酒泉网站制作【酒泉网站优化】酒泉建网站、酒泉微信公众号运营、酒泉网页设计、酒泉微信小程序商城

酒泉,古称肃州,是甘肃省辖地级市,甘肃省人民政府批复确定的丝绸之路经济带甘肃段重要节点城市、省域副中心城市。截至2020年11月,辖1个区、2个县级市、4个县,总面积19.2万平方千米,2019年常住人口113.22万,城镇常住人口70.69万,有汉、蒙、哈萨克、回等40多个民族。 [1-3]
酒泉地处中国西北地区、甘肃省西北部、河西走廊西端, 东接张掖市和内蒙古自治区,南接青海省,西接新疆维吾尔自治区,北接蒙古国,自古就是通往新疆和西域的交通要塞,是现代航天的摇篮,新中国石油工业和核工业的发祥地,全国重要的新能源基地。
酒泉为汉代河西四郡之一,丝绸之路的重镇,因“城下有泉”、“其水若酒”而得名。酒泉是敦煌艺术的故乡,创造了辉煌的历史文化。同时,由于大自然的运动和人类的活动,创造了奇异瑰丽的自然美景和雄伟壮丽的人文景观。先后荣获影响世界的中国文化旅游名城、中国最具国际影响力旅游目的地等荣誉称号。酒泉市境内有敦煌莫高窟、安西锁阳城、酒泉公园、敦煌雅丹国家地质公园等旅游景点。
设计软件有两种方法:一种是简单到明显没有缺陷,另外一种复杂到缺陷不那么明显。——托尼.霍尔
在学习了前面第2章的基础入门后,已经可以能够胜任一般性的接口服务功能开发,和应付根据项目具体情况而定制扩展的业务场景。但实际上项目的开发要更为复杂,相应地,我们需要学习更为强大的工具。例如对各种后端资源服务的管理,类文件的命名规范和自动加载,以及架构明显的编程风格。除此之外,本章还会包含更高层面、更广范畴上对PhalApi的使用讲解,例如脚本命令的使用、扩展类库的介绍和接口查询语言及SDK包等。
如果说基础学习是点的学习,那么高级主题则是线的学习。因为前者是针对PhalApi中某个类的使用的扩展,而后者是某领域、某个功能模块的使用和扩展。学习完本章后,我们应该能具备接口服务开发的高级技能、技巧和技艺。事不宜迟,让我们继续前进探索吧!
伟大的毛主席曾言,“不到长城非好汉,屈指行程二万。”而对于使用和学习PhalApi的时,如果不了解或掌握其中的依赖注入,就不能称得上是优秀的PhalApi开发人员。因为依赖注入在PhalApi中扮演着重要、不可或缺的角色,可以说依赖注入是PhalApi中的“一等公民”。
依赖注入,即Dependency Injection,简称DI,属于控制反转的一种类型,目的是了减少耦合性,简单来说就是使用开放式来初始化、管理和维护资源。这里说的资源主要是在后端所使用到的资源或组件,包括但不限于配置、数据库、高效缓存、接口请求与响应以及项目级的实例。而这些资源通常会存在依赖关系,如果处理不当,则会引发混乱,甚至循环依赖。
让我们来看一些简单例子,感受下使用依赖注入降低软件开发复杂性的快感。假设A类依赖于B类,则可以这样实现:
<?phpclass A { protected $b; public function __construct() { $this->b = new B();
}
}这种方式在A内限制约束了B的实例对象,当改用B的子类或者改变B的构建方式时,A需要作出调整。这时可以通过依赖来改善这种关系。
<?phpclass A { protected $b; public function __construct($b) { $this->b = $b;
}
}再进一步,可以使用依赖注入对B对象乃至全部的资源进行统一管理。
<?phpclass A { public function __construct() {
} public function doSth() { // 在需要使用B的地方
$b = DI()->get('B');
}
}其中,DI()快速函数将会返回一个依赖注入式的管理容器实例,下面会详细讲到。
这样的好处是什么呢?一方面,对于使用A的客户(这里指的是开发人员),不需要再添加一个B的成员变量,特别不是全部类的成员函数都需要使用B类服务时;另一方面在外部多次初始化A实例时,可以统一对B的实例进行构建。
依赖注入在PhalApi中扮演着重要、不可或缺的角色,可以说依赖注入是PhalApi中的“一等公民”。在过去的框架中,可能会使用无处不在的全局变量维护、管理各种资源,而在PhalApi中,则是使用定义良好、规范的容器统一管理。在下面PhalApi框架UML静态类结构中,也可以明显看出DI所处于的重要的位置和扮演的角色。

图3-1 DI在PhalApi静态类结构中的位置
如前面所言,使用DI()快速函数可以获取一个依赖注入式的管理容器实例,其用法等效于获取PhalApi_DI单例的PhalApi_DI::one()静态方法。后文中,我们将统一称此容器实例简称为DI。DI的使用主要是对资源服务进行注册与获取,调用的方式有:set/get方法、setter/getter访问器、类成员属性、数组形式,初始化的途径有:直接赋值、类名延迟加载、匿名函数延迟加载。
假设已有如下演示类。
<?phpclass Simple { public function __construct() {
}
}set/get方法
在对DI进行设置和获取资源时,可以使用set/get方法,即:PhalApi_DI::set($key, $value)和PhalApi_DI::get($key, $default = NULL)方法。下面是使用示例:
// 直接赋值DI()->set('aString', 'Hello Dependency Injection!');// 使用类名延迟加载DI()->set('aObject', 'Simple');// 使用匿名函数延迟加载DI()->set('aClosure', function(){ return new Simple();
});// 获取var_dump(DI()->get('aString'));
var_dump(DI()->get('aObject'));
var_dump(DI()->get('aClosure'));PhalApi_DI::get($key, $default = NULL)方法的第二个参数为默认值,当资源未注册时将返回此默认值。例如:
// 输出默认值 2017echo DI()->get('aInt', 2017);setter/getter访问器
也可以使用setter/getter访问器对资源进行设置与获取,这时资源名称的首写字母需要大写。上面示例,改用访问器,等效实现如下。
// 直接赋值DI()->setAString('Hello Dependency Injection!');// 使用类名延迟加载DI()->setAObject('Simple');// 使用匿名函数延迟加载DI()->setAClosure(function(){ return new Simple();
});// 获取var_dump(DI()->getAString());
var_dump(DI()->getAObject());
var_dump(DI()->getAClosure());在使用getter时,第一个参数为默认值,即当资源未注册时将返回此默认值。例如:
// 输出默认值 2017echo DI()->getAInt(2017);
类成员属性
我们还可以通过类成员属性的方式对资源进行设置与获取,这时资源名称需要符合PHP的变量命名要求,即应该以下划线或字母开头,由数字、字母、下划线组成。上面示例,改用类成员属性方式,等效实现如下:
// 直接赋值DI()->aString = 'Hello Dependency Injection!';// 使用类名延迟加载DI()->aObject = 'Simple';// 使用匿名函数延迟加载DI()->aClosure = function(){ return new Simple();
};// 获取var_dump(DI()->aString);
var_dump(DI()->aObject);
var_dump(DI()->aClosure);使用这种类成员属性的方式获取资源时,不能指定默认值。并且可以看到PhalApi大部分情况下也是使用了这种方式,例如在初始化文件./Public/init.php对各种资源的初始和注册。但当需要指定默认值时,则需要使用前面set/get方法,或setter/getter访问器。
数组形式
对DI设置和获取资源,还有一种方式就是使用数组形式。这时,为了更好地演示,需要使用一个临时变量$di来存放DI实例。前面示例的等效实现如下:
$di = DI();// 直接赋值$di['aString'] = 'Hello Dependency Injection!';// 使用类名延迟加载$di['aObject'] = 'Simple';// 使用匿名函数延迟加载$di['aClosure'] = function(){ return new Simple();
};// 获取var_dump($di['aString']);
var_dump($di['aObject']);
var_dump($di['aClosure']);如同类成员属性的方式一样,此数组形式也不能指定默认值。
酒泉网站制作【酒泉网站优化】酒泉建网站、酒泉微信公众号运营、酒泉网页设计、酒泉微信小程序商城
上往建站提供搭建网站,域名注册,官网备案服务,网店详情页设计,企业网店,专业网络店铺管理运营全托管公司咨询电话,服务器空间,微信公众号托管,网页美工排版,致力于域名申请,竞价托管,软文推广,全网营销,提供标准级专业技术保障,了却后顾之忧,主营:虚拟主机,网站推广,百度竞价托管,网站建设,上网建站推广服务,网络公司有哪些等业务,专业团队服务,效果好。
服务热线:400-111-6878 手机微信同号:18118153152(各城市商务人员可上门服务)