php手机号中间四位用星号*代替显示
通过php用三种简单的方法实现手机号中间四位(n位)用星号显示:
$mobile = '13912345678';
//1.字符串截取法
$newMobile1 = substr($mobile, 0, 5).'****'.substr($mobile, 9);
echo $newMobile1.'<br/>';
//2.替换字符串的子串
$newMobile2 = substr_replace($mobile, '****', 5, 4);
echo $newMobile2.'<br/>';
//3.用正则
$newMobile3 = preg_replace('/(\d{5})\d{4}(\d{2})/', '$1****$2', $mobile);
echo $newMobile3;
//方法 四正则
function hidtel($phone){
$IsWhat = preg_match('/(0[0-9]{2,3}[-]?[2-9][0-9]{6,7}[-]?[0-9]?)/i',$phone); //固定电话
if($IsWhat == 1){
return preg_replace('/(0[0-9]{2,3}[-]?[2-9])[0-9]{3,4}([0-9]{3}[-]?[0-9]?)/i','$1****$2',$phone);
}else{
return preg_replace('/(1[358]{1}[0-9])[0-9]{4}([0-9]{4})/i','$1****$2',$phone);
}
}
Method 2:
$num = "13966778888"
$str = substr_replace($num,'****',3,4);
示例:
代码如下:
$phonenum = "13966778888";
echo hidtel($phonenum);
最后输出:139****8888
数组去重的方法有很多种有数组有遍历了,我们文章下面会给各位推荐各种关于数组去重的方法 ,希望文章能够帮助到各位朋友。利用php中的array_flip()函数将一组字符串去重,再用sort()函数进行排序,来实现一些实际的应用效果。
源码如下:
<?php $strArr = array( 'www.111cn.net', 'xiao', 'rui', 'xiao', 'dai', 'www.111cn.net', 'hello,friend' ); $strArr = array_flip(array_flip($strArr)); // 反转(array_flip()函数:将数组中的键值和值进行反转,如果出现同一值,则最后一个键名将作为它的值,如果原数组中的值的数据类型不是整数或者字符串,函数将会报错。) sort($strArr); //排序 print_r($strArr); ?>
这个例子其实很简单就是数组去重了,在网上有很多的方法 这里只整理了一个希望对各位有用。
链式操作对于各位朋友来说很多不了解了,下面一聚教程小编来为各位介绍一篇关于PHP实现的链式操作代码。这篇文章主要介绍了PHP实现的链式操作实例。写程序的人都喜欢偷懒,希望少打几行代码,并且让代码看起来很酷。
就好比很多小伙伴在写if…else…的时候会直接使用三元运算符一样。
而用过JS的人应该都见识过js中的链式方法。如 somevars.func().func2()…funcN();这样的写法使得代码更简练,并且作用关系一目了然。
那么在php中可以这么做么,显然也是可以的,但是php与js的差别是,在js中变量本身具有对象的性质,但是php的变量却不是。
现在在很多的PHP的WEB框架中经常会看见链式操作,相信很多同学也使用过,本文将继续以ThinkPHP中的核心类作为实例,给大家讲解一下,需要的朋友可以参考下。
在ThinkPHP核心文件Model.class.php中可以看到这么几段代码(忽略逻辑部分):
class Model { /** * 查询SQL组装 join */ public function join($join) { /* * code */ return $this; } /** * 指定查询条件 支持安全过滤 */ public function where($where){ /* * code */ return $this; } /** * 指定结果顺序 */ public function order($order){ /* * code */ return $this; } /** * 指定查询数量 */ public function limit($limit){ /* * code */ return $this; } /** * 查询数据集 */ public function select() { /* * code */ return $resultSet; } }
<?php require ('Model.class.php'); $model = new Model(); /* * 链式操作写法 */ $model->join('left join user on oo=xx')->where('id=1')->order('id asc')->limit(10)->select(); /* * 传统写法 */ $model->join('left join user on oo=xx'); $model->where('id=1'); $model->order('id asc'); $model->limit(10); $model->select(); ?>
在使用了链式写法后,代码会更简洁,更酷,也希望小伙伴能更好的去运用它。
单例模式小编讲过非常的多了,今天小编看到一个朋友分享的一篇单例模式了,下面我们一起来看看,希望文章能够对各位带来帮助。
博主最近开始真正的潜心学习PHP的各种设计模式。刚开始当然从一些简单的设计模式开始学起,比如之前发表的工厂模式,今天的单利模式,还有之后要看的注册模式。其实这些都是比较基础的设计模式,一些简单的示例一看就能明白,对于稍加复杂些的示例,花点心思进去也能够理解。可重点是,光是知道了解这么个东西是不够的,而是如何能够把他更好的运用的项目中去,在实践中增加熟练度。好吧,还是说说今天要看的单例模式吧。
一、什么是单例模式?
1、含义:
作为对象的创建模式,单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统全局地提供这个实例。它不会创建实例副本,而是会向单例类内部存储的实例返回一个引用。
2、单例模式的三个要点:
(1)需要一个保存类的唯一实例的静态成员变量。
(2)构造函数和克隆函数必须声明为私有的,防止外部程序new类从而失去单例模式的意义。
(3)必须提供一个访问这个实例的公共的静态方法(通常为getInstance方法),从而返回唯一实例的一个引用。
假设我们目前需要设计一个数据库访问类,需要用到单例模式,看如下示例:
<?php class DB { private $_db; private static $_instance; private function __construct(...) { $this->_db = pg_connect(...);//postgrsql } private function __clone() {}; //覆盖__clone()方法,禁止克隆 public static function getInstance() { if(!(self::$_instance instanceof self) ) { self::$_instance = new self(); } return self::$_instance; } public function sql(...) { /* * code */ } } $db = DB::getInstance(); $db->sql(); ?>
<111?111php111
/1**
* 设计模式之单例模式
* $_instance必须声明为静态的私有变量
* 构造函数和析构函数必须声明为私有,防止外部程序new
* 类从而失去单例模式的意义
* getInstance()方法必须设置为公有的,必须调用此方法
* 以返回实例的一个引用
* ::操作符只能访问静态变量和静态函数
* new对象都会消耗内存
* 使用场景:最常用的地方是数据库连接。
* 使用单例模式生成一个对象后,
* 该对象可以被其它众多对象所使用。
*/
class Danli {
//保存类实例的静态成员变量
private static $_instance;
//private标记的构造方法
private function __construct(){
echo 'This is a Constructed method;';
}
//创建__clone方法防止对象被复制克隆
public function __clone(){
trigger_error('Clone is not allow!',E_USER_ERROR);
}
//单例方法,用于访问实例的公共的静态方法
public static function getInstance(){
if(!(self::$_instance instanceof self)){
self::$_instance = new self;
}
return self::$_instance;
}
public function test(){
echo '调用方法成功';
}
}
//用new实例化private标记构造函数的类会报错
//$danli = new Danli();
//正确方法,用双冒号::操作符访问静态方法获取实例
$danli = Danli::getInstance();
$danli->test();
//复制(克隆)对象将导致一个E_USER_ERROR
$danli_clone = clone $danli;
例子3
1、普通的数据库访问例子:
<?php ...... //初始化一个数据库句柄 $db = new DB(...); //添加用户信息 $db->addUserInfo(...); ...... //在函数中访问数据库,查找用户信息 function getUserInfo() { $db = new DB(...);//再次new 数据库类,和数据库建立连接 $db = query(....);//根据查询语句访问数据库 } ?>
例子4、应用单例模式对数据库进行操作:
<?php class DB { private $_db; private static $_instance; private function __construct(...) { $this->_db = pg_connect(...);//postgrsql } private function __clone() {}; //覆盖__clone()方法,禁止克隆 public static function getInstance() { if(! (self::$_instance instanceof self) ) { self::$_instance = new self(); } return self::$_instance; } public function addUserInfo(...) { } public function getUserInfo(...) { } } //test $db = DB::getInstance(); $db->addUserInfo(...); $db->getUserInfo(...); ?>
二、为什么要使用单例模式?
1、PHP缺点:
PHP语言是一种解释型的脚本语言,这种运行机制使得每个PHP页面被解释执行后,所有的相关资源都会被回收。也就是说,PHP在语言级别上没有办法让某个对象常驻内存,这和asp.net、Java等编译型是不同的,比如在Java中单例会一直存在于整个应用程序的生命周期里,变量是跨页面级的,真正可以做到这个实例在应用程序生命周期中的唯一性。然而在PHP中,所有的变量无论是全局变量还是类的静态成员,都是页面级的,每次页面被执行时,都会重新建立新的对象,都会在页面执行完毕后被清空,这样似乎PHP单例模式就没有什么意义了,所以PHP单例模式我觉得只是针对单次页面级请求时出现多个应用场景并需要共享同一对象资源时是非常有意义的。
2、单例模式在PHP中的应用场合:
(1)应用程序与数据库交互
一个应用中会存在大量的数据库操作,比如过数据库句柄来连接数据库这一行为,使用单例模式可以避免大量的new操作,因为每一次new操作都会消耗内存资源和系统资源。
(2)控制配置信息
如果系统中需要有一个类来全局控制某些配置信息, 那么使用单例模式可以很方便的实现.
下面小编来为各位介绍一篇关于PHP设计模式之:注册模式入门教程,希望本文章能够帮助到各位朋友。
当你有一组全局对象被全局访问时可能就需要用到注册模式 (registry),它提供了在程序中有条理的存放并管理对象 (object)一种解决方案。一个“注册模式”应该提供get() 和 set()方法来存储和取得对象。
注册模式通过单一的全局的对象来获取对其它对象的引用 实例:
<?php /** * PHP设计模式之注册模式实例 * */ class Registry { protected static $objects; //用于存放对象的数组 /** * 将对象放到对象数组上 * @param string $alias 别名 * @param object $object 对象 */ static function set($alias, $object) { self::$objects[$alias] = $object; } /** * 将对象从数组上删除 * @param string $alias 别名 */ static function _unset($alias) { unset(self::$objects[$alias]); } /** * 通过别名获取对象 * @param string $alias 别名 */ static function get($alias) { if (array_key_exists($alias, self::$objects)) { return self::$objects[$alias]; } } } class MyObject { public function test(){ return 'ok'; } } //结合工厂模式 class MyFactory { public static function factory(){ //返回对象的实例 $myObject = new MyObject(); Registry::set("myObject", $myObject); } } //调用工厂 MyFactory::factory(); //使用 echo Registry::get("myObject")->test(); Registry::_unset("myObject"); ?>
好了,PHP的三种基础模式已经介绍完了,随后博主会继续学习分享PHP的其他设计模式,谢谢!
相关文章
- 支付宝支付在国内算是大家了,我们到处都可以使用支付宝了,下文整理介绍的是在安卓app应用中使用支付宝进行支付的开发例子。 之前讲了一篇博客关与支付宝集成获取...2016-09-20
- PHP+Ajax有许多的功能都会用到它小编今天就有使用PHP+Ajax实现的一个微信登录功能了,下面我们来看一个PHP+Ajax手机发红包的程序例子,具体如下所示。 PHP发红包基本...2016-11-25
- 华为手机怎么恢复已卸载的应用?有时候我们在使用华为手机的时候,想知道卸载的应用怎么恢复,这篇文章主要介绍了华为手机恢复应用教程,需要的朋友可以参考下...2020-06-29
- 很多用安卓智能手机的朋友是用九宫格锁屏,网上也有暴力删除手机图形锁的方法,不过我们可以用程序来破解。本文只提供技术学习,不能干坏事 安卓手机的图形锁(九宫格)...2016-09-20
- 华为手机怎么开启双时钟?华为手机是可以设置双时钟的,如果来回在两个有时差的地方工作,是可以设置双时钟显示,下面我们就来看看华为添加双时钟的技巧,需要的朋友可以参考下...2020-12-08
安卓手机wifi打不开修复教程,安卓手机wifi打不开解决方法
手机wifi打不开?让小编来告诉你如何解决。还不知道的朋友快来看看。 手机wifi是现在生活中最常用的手机功能,但是遇到手机wifi打不开的情况该怎么办呢?如果手机wifi...2016-12-21- 这篇文章主要为大家详细介绍了jQuery实现广告显示和隐藏动画,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-07-05
- 怎么查询自己的联通手机号码是否已经实名认证?现在手机一批一批的开始实名制了,自己的手机号买的时候没有实名认证,怎么才能知道自己的手机是否被知名认证了呢?认证以后就不能充话费打电话了,下面我们们一起来看看两种查看方法...2016-07-04
- 为了网站的安全性,很多朋友都把密码设的比较复杂,但是如何密码不能明显示,不知道输的是对是错,为了安全起见可以把密码显示的,那么基于js代码如何实现的呢?下面通过本文给大家介绍JavaScript实现表单密码的隐藏和显示,需要的朋友参考下...2016-03-03
- 想在网页中动态地显示当前系统的时间,找了好多,不过都是一些停在那里不动的。。。不过皇天不负有心人,终于让我找到了...2020-06-25
oppo手机怎么设置充电提示音 oppo手机充电提示音设置方法
oppo手机充电提示音怎么关闭?用户要学会充电提示音的设置方法,这样才能熟练的操作更换提示音或者是关掉提示音,关于OPPO手机充电提示音的设置下面会有具体的介绍,各位用户一起来看看详细的操作方法吧...2020-12-08华为手机蓝牙可以连接几个设备?华为设置蓝牙音频连接个数的技巧
华为手机蓝牙可以连接几个设备? 华为手机使用蓝牙的时候,想要知道能连接几个设备,这都是可以设置呢?下面我们就来看看华为设置蓝牙音频连接个数的技巧,需要的朋友可以参考下...2020-12-08- 小米手机负一屏该怎么设置?小米手机最近推出了负一屏的功能,集成了很多信息,可以放一些需要知道的信息,下面我们就来看看详细的教程,需要的朋友可以参考下。 最新的开...2016-12-15
- 这篇文章主要介绍了C#实现动态显示及动态移除图片方法,对于C#的初学者了解图像操作有一定的帮助,需要的朋友可以参考下...2020-06-25
- 钉钉怎么双开登录两个账号?钉钉中想要双开登录两个账号,该怎么登录呢?下面我们就来看看小米手机双开钉钉的技巧,需要的朋友可以参考下...2020-06-29
- 保千里打令VR手机怎么样?什么时候发布?全球首款VR手机保千里打令VR手机将于10月24日在深圳大梅沙国际水上运动中心隆重发布,对保千里打令VR手机不太了解朋友可以看看...2016-11-01
- 这篇文章主要介绍了解决druid监控页面SQL不显示的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-06-19
- 明明我的手机配置那么高(都八核了)为什么玩游戏还会卡?对安卓手机来说玩游戏卡顿的原因一般有两种;性能不足导致的卡顿以及CPU发热降频导致的卡顿,详情我们来看看吧...2017-07-06
- 这篇文章主要介绍了javascript点击按钮实现隐藏显示切换效果,以一个完整的实例为大家分析了js点击按钮实现隐藏显示切换的功能,感兴趣的小伙伴们可以参考一下...2016-02-05
- 您是否遇到过孩子想要玩手机又不好拒绝,或者是您想要给孩子配一个联系用的手机有担心孩子玩手机上瘾?如果您购买的是小米手机,那么MIUI的儿童模式就能很好地解决这个问题...2016-12-21