您的位置:

首页 >

网页技巧 >

php中注册器模式类用法实例分析 >

php中注册器模式类用法实例分析

2016-10-04 01:32:18

分类:网页技巧

本文实例讲述了php中注册器模式类用法。分享给大家供大家参考,具体如下:注册器读写类Registry.class.php<?php/** * 注册器读写类 */class Registry extends ArrayObject{ /** * Registry实例 * * @var object */ private static $_instance = null; /** * 取得Registry实例 * * @note 单件模式 * * @return object */ public static function getInstance() { if (self::$_instance === null) { self::$_instance = new self(); echo "new register object!"; } return self::$_instance; } /** * 保存一项内容到注册表中 * * @param string $name 索引 * @param mixed $value 数据 * * @return void */ public static function set($name, $value) { self::getInstance()->offsetSet($name, $value); } /** * 取得注册表中某项内容的值 * * @param string $name 索引 * * @return mixed */ public static function get($name) { $instance = self::getInstance(); if (!$instance->offsetExists($name)) { return null; } return $instance->offsetGet($name); } /** * 检查一个索引是否存在 * * @param string $name 索引 * * @return boolean */ public static function isRegistered($name) { return self::getInstance()->offsetExists($name); } /** * 删除注册表中的指定项 * * @param string $name 索引 * * @return void */ public static function remove($name) { self::getInstance()->offsetUnset($name); }}需要注册的类 test.class.php<?phpclass Test{ function hello() { echo "hello world"; return; }} ?>测试 test.php<?php//引入相关类require_once "Registry.class.php";require_once "test.class.php";//new a object$test=new Test();//$test->hello();//注册对象Registry::set('testclass',$test);//取出对象$t = Registry::get('testclass');//调用对象方法$t->hello();?>希望本文所述对大家php程序设计有所帮助。

概述PHP有着众多的内置函数,其中大多数函数都被开发者广发使用。但也有一些同样有用却被遗忘在角落,本文将介绍7个鲜为人知功能却非常酷的函数。highlight_string()当需要在网页中展示PHP代码时,highlight_string()函数就显得非常有用。该函数通过PHP内置定义的颜色,返回函数中代码的高亮显示版本。复制代码 代码如下:<?php    highlight_string('<?php echo "hello world" ; ?>');    echo highlight_string('<?php echo "hello world" ; ?>',true);?>str_word_count()这个函数可以方便的将输入的字符串参数中的单词个数返回。复制代码 代码如下:<?php    $str = "hello world";    echo str_word_count($str);  //输出 2?>levenshtein()该函数可以方便的返回两个参数之间的levenshtein(编辑距离)。曾经遇到过一个需求,用户在编辑身份证的时候,限制用户只能修改4位数字,使用的就是这个函数。复制代码 代码如下:<?php    $idcard='230406198506206797';    $newIdcard='230406198506207798';    echo levenshtein($idcard,$newIdcard);  //输出 2?>get_defined_vars()这个函数在调试程序的时候非常有用,它会返回包含所有已定义变量的数组,其中包含环境、系统以及用户自定义变量。复制代码 代码如下:<?php    var_dump(get_defined_vars());?>escapeshellcmd()该函数用来跳过字符串中的特殊符号,防止恶意用户耍花招破解服务器系统。可以搭配exec()与system()函数使用。复制代码 代码如下:<?php$command = './configure '.$_POST['configure_options'];$escaped_command = escapeshellcmd($command);system($escaped_command);?>checkdate()该函数可以用来检测日期参数的有效性。它可以验证输入的每一个参数的合法性。复制代码 代码如下:<?phpvar_dump(checkdate(12, 31, 2000));var_dump(checkdate(2, 29, 2001));//输出//bool(true)//bool(false)?>php_strip_whitespace()该函数会返回删除了注释与空格后的PHP源码。这对实际代码数量和注释数量的对比很有用。复制代码 代码如下:<?php// 注释1/* * 注释2 */echo php_strip_whitespace(__FILE__);do_nothing();?

最近一直出现这样的错误,一直在查找原因,偶然看到一篇解决的文章,分享给大家看看。第一种解决办法是关闭Csrfpublic function init(){ $this->enableCsrfValidation = false;}第二种解决办法是在form表单中加入隐藏域<input name="_csrf" type="hidden" id="_csrf" value="<?= Yii::$app->request->csrfToken ?>">第三种解决办法是在AJAX中加入_csrf字段var csrfToken = $('meta[name="csrf-token"]').attr("content");$.ajax({ type: 'POST', url: url, data: {_csrf:csrfToken}, success: success, dataType: dataType});Yii这个匹配的过程和Yii::$app->request->csrfToken 这个值存储位置说明:存储位置 protected function createCsrfCookie($token) { $options = $this->csrfCookie; $options['name'] = $this->csrfParam; $options['value'] = $token; return new Cookie($options); }校验方法 public function validateCsrfToken($token = null) { $method = $this->getMethod(); // only validate CSRF token on non-"safe" methods http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9.1.1 if (!$this->enableCsrfValidation || in_array($method, ['GET', 'HEAD', 'OPTIONS'], true)) { return true; } $trueToken = $this->loadCsrfToken(); if ($token !== null) { return $this->validateCsrfTokenInternal($token, $trueToken); } else { return $this->validateCsrfTokenInternal($this->getBodyParam($this->csrfParam), $trueToken) || $this->validateCsrfTokenInternal($this->getCsrfTokenFromHeader(), $trueToken); } }以上所述就是本文的全部内容了,希望大家能够喜欢。

1. 需要在php数组中用中文排序,但是一般使用utf8格式的文件,直接用asort排序不行。用gbk和gb2312可以。这跟几种格式的编码有关系。gbk和gb2312本身的编码就是用拼音排序的。代码如下function utf8_array_asort(&$array){if(!isset($array) || !is_array($array)){return false;}foreach($array as $k=>$v){$array[$k] = iconv('UTF-8', 'GBK//IGNORE',$v);}asort($array);foreach($array as $k=>$v){$array[$k] = iconv('GBK', 'UTF-8//IGNORE', $v);}return true;}2. 在MySQL中,我们经常会对一个字段进行排序查询,但进行中文排序和查找的时候,对汉字的排序和查找结果往往都是错误的。 这种情况在MySQL的(www.jb51.net)很多版本中都存在。如果这个问题不解决,那么MySQL将无法实际处理中文。 出现这个问题的原因是因为MySQL在查询字符串时是大小写不敏感的,在编绎MySQL时一般以ISO-8859字符集作为默认的字符集,因此在比较过程中中文编码字符大小写转换造成了这种现象。解决方法:对于包含中文的字段加上"binary"属性,使之作为二进制比较,例如将"name char(10)"改成"name char(10)binary"。如果你使用源码编译MySQL,可以编译MySQL时使用 --with--charset=gbk 参数,这样MySQL就会直接支持中文查找和排序了(默认的是latin1)。也可以用 extra-charsets=gb2312,gbk 来加入多个字符集。如果不想对表结构进行修改或者重新编译MySQL,也可以在查询语句的 order by 部分使用 CONVERT 函数。比如代码如下复制代码 代码如下:

本文实例讲述了基于ajax实现无刷新分页的方法。分享给大家供大家参考。具体如下:在普通的分页中,一旦页码改变,则url改变,整个页面都会刷新,如果我们希望页码的改变不影响整个网页的变动,可以使用ajax技术。AJAX 是一种用于创建快速动态网页的技术。通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。通过客户端html代码,用ajax把服务器中的数据通过get方式传递过来,显示在html中。<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="Generator" content="EditPlus®"> <meta name="Author" content=""> <meta name="Keywords" content=""> <meta name="Description" content=""> <title>ajax实现无刷新分页</title> <script type="text/javascript"> function f1(url){ var xhr = new XMLHttpRequest; xhr.onreadystatechange = function() { if(xhr.readyState==4){ document.getElementById('d').innerHTML = xhr.responseText; } } xhr.open("get",url); xhr.send(null); } //页面加载完成后,就调用该函数 window.onload = function(){ f1("fenye-data.php"); } </script> </head> <body> <h2 align='center'>ajax实现无刷新分页</h2> <div id='d'></div> </body> </html> 在分页类中,我们只需更改超链接的地址,将原来的地址更改为通过js调用f1()方法,将链接传递给js中的f1()方法。<a href='javascript:f1(\"{$this->uri}&page=".($this->page+1)."\")'>进一步的,可以使用json实现无刷新效果的分页,与ajax相比,json将html和css都写在客户端,从而节省了服务器带宽,也使用户的请求速度加快,具体方法不再赘述。希望本文所述对大家的Ajax程序设计有所帮助。

焦点访谈

最新最热的文章

更多 >

COPYRIGHT (©) 2017 Copyright ©2017 5060网址大全 网站地图

联系我们

827570882

扫描二维码分享到微信