好得很程序员自学网
  • 首页
  • 后端语言
    • C#
    • PHP
    • Python
    • java
    • Golang
    • ASP.NET
  • 前端开发
    • Angular
    • react框架
    • LayUi开发
    • javascript
    • HTML与HTML5
    • CSS与CSS3
    • jQuery
    • Bootstrap
    • NodeJS
    • Vue与小程序技术
    • Photoshop
  • 数据库技术
    • MSSQL
    • MYSQL
    • Redis
    • MongoDB
    • Oracle
    • PostgreSQL
    • Sqlite
    • 数据库基础
    • 数据库排错
  • CMS系统
    • HDHCMS
    • WordPress
    • Dedecms
    • PhpCms
    • 帝国CMS
    • ThinkPHP
    • Discuz
    • ZBlog
    • ECSHOP
  • 高手进阶
    • Android技术
    • 正则表达式
    • 数据结构与算法
  • 系统运维
    • Windows
    • apache
    • 服务器排错
    • 网站安全
    • nginx
    • linux系统
    • MacOS
  • 学习教程
    • 前端脚本教程
    • HTML与CSS 教程
    • 脚本语言教程
    • 数据库教程
    • 应用系统教程
  • 新技术
  • 编程导航
    • 区块链
    • IT资讯
    • 设计灵感
    • 建站资源
    • 开发团队
    • 程序社区
    • 图标图库
    • 图形动效
    • IDE环境
    • 在线工具
    • 调试测试
    • Node开发
    • 游戏框架
    • CSS库
    • Jquery插件
    • Js插件
    • Web框架
    • 移动端框架
    • 模块管理
    • 开发社区
    • 在线课堂
    • 框架类库
    • 项目托管
    • 云服务

当前位置:首页>后端语言>PHP
<tfoot draggable='sEl'></tfoot>

Php依赖反转 php反转字符串方法

很多站长朋友们都不太清楚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反转字符串方法的详细内容...

声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://haodehen.cn/did196097
更新时间:2023-04-26   阅读:24次

上一篇: php框架能干什么 php框架有什么用

下一篇:php加go需要 go写php扩展

相关资讯

最新资料更新

  • 1.无法下载file.php 无法下载filedownload
  • 2.phph5开发 php开发程序
  • 3.php赋值后改变 php变量赋值
  • 4.php客户信息管理 php用户管理
  • 5.phphint插件下载 php 插件系统
  • 6.php类属性分类 php数据类型
  • 7.php判断是否为蜘蛛 php怎么判断是不是数字
  • 8.phpvc6vc9的简单介绍
  • 9.qbapi.php的简单介绍
  • 10.输出图片php 输出图片英文
  • 11.php和php-fpm的简单介绍
  • 12.php圆形头像代码 php生成圆形图
  • 13.php7.1des加密 php7 加密
  • 14.phptoast弹框 php 弹框
  • 15.php设备判断在线 php判断用户在线状态
  • 16.php翻译sdk php翻译成中文是什么意思
  • 17.php解压gz效率 rarphp文件怎么解压
  • 18.php7性能tu Php性能
  • 19.phpapp页面 php app
  • 20.php文件工具类 php文件处理

CopyRight:2016-2025好得很程序员自学网 备案ICP:湘ICP备09009000号-16 http://haodehen.cn
本站资讯不构成任何建议,仅限于个人分享,参考须谨慎!
本网站对有关资料所引致的错误、不确或遗漏,概不负任何法律责任。
本网站刊载的所有内容(包括但不仅限文字、图片、LOGO、音频、视频、软件、程序等)版权归原作者所有。任何单位或个人认为本网站中的内容可能涉嫌侵犯其知识产权或存在不实内容时,请及时通知本站,予以删除。

网站内容来源于网络分享,如有侵权发邮箱到:kenbest@126.com,收到邮件我们会即时下线处理。
网站框架支持:HDHCMS   51LA统计 百度统计
Copyright © 2018-2025 「好得很程序员自学网」
[ SiteMap ]