很多站长朋友们都不太清楚Php依赖反转,今天小编就来给大家整理Php依赖反转,希望对各位有所帮助,具体内容如下:
本文目录一览: 1、 php依赖倒置原则里面,什么叫高层模块和底层模块 2、 PHP中几种常见的开发模式 3、 PHP如何让数据倒序显示? 4、 PHP中如何实现字符串翻转? 5、 php用递归函数反转数组 6、 php中反转字符串方法? php依赖倒置原则里面,什么叫高层模块和底层模块1、可以简单的理解:调用者为高层,被调用者为低层。
2、
比如你有class A和class B
在class A中有对class B的引用,例如A中有某方法有这样一段代码 B b=new B();var data=b.GetData();
那么class A就是高层模块
被引用的class B就是低层模块
当然这个B可以是class 也可以是interface
PHP中几种常见的开发模式单例模式
$_instance必须声明为静态的私有变量
构造函数和析构函数必须声明为私有,防止外部程序new 类从而失去单例模式的意义
getInstance()方法必须设置为公有的,必须调用此方法 以返回实例的一个引用
::操作符只能访问静态变量和静态函数
new对象都会消耗内存
使用场景:最常用的地方是数据库连接。
使用单例模式生成一个对象后, 该对象可以被其它众多对象所使用。
私有的__clone()方法防止克隆对象
单例模式,使某个类的对象仅允许创建一个。构造函数private修饰,
申明一个static getInstance方法,在该方法里创建该对象的实例。如果该实例已经存在,则不创建。比如只需要创建一个数据库连接。
工厂模式
工厂模式,工厂方法或者类生成对象,而不是在代码中直接new。
使用工厂模式,可以避免当改变某个类的名字或者方法之后,在调用这个类的所有的代码中都修改它的名字或者参数。
* 如果某个类在很多的文件中都new ClassName(),那么万一这个类的名字
* 发生变更或者参数发生变化,如果不使用工厂模式,就需要修改每一个PHP
* 代码,使用了工厂模式之后,只需要修改工厂类或者方法就可以了。
注册模式
注册模式,解决全局共享和交换对象。已经创建好的对象,挂在到某个全局可以使用的数组上,在需要使用的时候,直接从该数组上获取即可。将对象注册到全局的树上。任何地方直接去访问。
策略模式
策略模式,将一组特定的行为和算法封装成类,以适应某些特定的上下文环境。
eg:假如有一个电商网站系统,针对男性女性用户要各自跳转到不同的商品类目,并且所有的广告位展示不同的广告。在传统的代码中,都是在系统中加入各种if else的判断,硬编码的方式。如果有一天增加了一种用户,就需要改写代码。使用策略模式,如果新增加一种用户类型,只需要增加一种策略就可以。其他所有的地方只需要使用不同的策略就可以。
首先声明策略的接口文件,约定了策略的包含的行为。然后,定义各个具体的策略实现类。
执行结果图:
总结:
通过以上方式,可以发现,在不同用户登录时显示不同的内容,但是解决了在显示时的硬编码的问题。如果要增加一种策略,只需要增加一种策略实现类,然后在入口文件中执行判断,传入这个类即可。实现了解耦。
实现依赖倒置和控制反转 (有待理解)
通过接口的方式,使得类和类之间不直接依赖。在使用该类的时候,才动态的传入该接口的一个实现类。如果要替换某个类,只需要提供一个实现了该接口的实现类,通过修改一行代码即可完成替换。
观察者模式
1:观察者模式(Observer),当一个对象状态发生变化时,依赖它的对象全部会收到通知,并自动更新。
2:场景:一个事件发生后,要执行一连串更新操作。传统的编程方式,就是在事件的代码之后直接加入处理的逻辑。当更新的逻辑增多之后,代码会变得难以维护。这种方式是耦合的,侵入式的,增加新的逻辑需要修改事件的主体代码。
3:观察者模式实现了低耦合,非侵入式的通知与更新机制。
定义一个事件触发抽象类。
当某个事件发生后,需要执行的逻辑增多时,可以以松耦合的方式去增删逻辑。也就是代码中的红色部分,只需要定义一个实现了观察者接口的类,实现复杂的逻辑,然后在红色的部分加上一行代码即可。这样实现了低耦合。
装饰器模式
1:装饰器模式,可以动态的添加修改类的功能
2:一个类提供了一项功能,如果要在修改并添加额外的功能,传统的编程模式,需要写一个子类继承它,并重写实现类的方法
3:使用装饰器模式,仅需要在运行时添加一个装饰器对象即可实现,可以实现最大额灵活性。
PHP如何让数据倒序显示?有两种方法:
1、如果直接是字符串或者是数组,分别用strrev 或者array_reverse反转可以
2、自己写一个算法,让字符串反转过来。$str = "abcdef";for ($i=1; $i<=strlen($str); $i++){
echo substr($str , -$i , 1)}。
php 正序输出示例代码
实现代码:
// 正序
foreach($files as $file_num => $file) {
if(is_file($directory.$file)){
//$file = iconv("gb2312","UTF-8",$file); //或者 iconv("gb2312","UTF-8",$value);
$date = substr($file,0,9);
echo '<li class="world-cup-'.$date.'">';
echo '<a href="'.$directory.$file.'" rel="worldcup" title="巴西世界杯赛事'.$date.'">';
echo '<img src="'.$directory.$file.'" alt="">';
echo '</a>';
echo '</li>';
}
}
PHP中如何实现字符串翻转?先说说一下吧:
strrev:这是php原生的翻转函数,但是只能针对于单字节字符组成的字符串进行翻转,比如:abc123,可以使用它翻转成123cba;
对于多字节反转:strrev是不支持的,很明显,我认为这是官方设计上的一种不合理,看官网也没有任何说明;那么我们怎么自己实现包含多字节的字符串翻转呢?我收集了两种办法:
一是使用正则//u这个正则匹配所有unicode字符串,二是使用mb_substr函数
方法一:
$str="学海无涯abc你好世界123";
print_r(join(
"",
array_reverse(preg_split("//u",$str))
));
方法二:
$str = "学海无涯abc你好世界123";
$len = mb_strlen($str,"utf8");
$restr = "";
for($i=$len-1;$i>=0;$i--){
$restr .=mb_substr($str,$i,1,"utf8");
}
echo $restr ;
附:如果以上程序不能允许,自己手敲一遍,这个编辑器会有些特殊字符导致程序没法允许。。
php用递归函数反转数组这个问题,简单,首先问楼主一个问题,如果说其中没有一个数组的话反转你应该会写对吧,其实这个里面有个数组就是再次调用一次本身函数就好,这就是所谓的递归,代码如下:
$arr=array("1","2","3","php",array("4","5","6"));
function array_rev($arr){
for($i=count($arr)-1;$i>=0;$i--){
if(is_array($arr[$i])){ //这里判断是否为数组
$temp1 = array_rev($arr[$i]); //若为数组则开始调用自身
$temp[] = $temp1;
continue;
}
$temp[] = $arr[$i];
}
return $temp;
}
var_dump(array_rev($arr));
php中反转字符串方法?strrev
(PHP 4, PHP 5, PHP 7)
strrev — 反转字符串
说明
strrev ( string $string ) : string
返回 string 反转后的字符串。
参数
string
待反转的原始字符串。
返回值
返回反转后的字符串。
范例
Example #1 使用 strrev() 反转字符串
add a note add a note
User Contributed Notes 4 notes
6 info at ensostudio dot ru ¶3 months ago
It's faster and flexible than tianyiw function (comment #122953)
关于Php依赖反转的介绍到此就结束了,不知道本篇文章是否对您有帮助呢?如果你还想了解更多此类信息,记得收藏关注本站,我们会不定期更新哦。
查看更多关于Php依赖反转 php反转字符串方法的详细内容...