首页
关于
Search
1
给你10个市场数据调研报告的免费下载网站!以后竞品数据就从这里找!
185 阅读
2
php接口优化 使用curl_multi_init批量请求
144 阅读
3
《从菜鸟到大师之路 ElasticSearch 篇》
107 阅读
4
2024年备考系统架构设计师
104 阅读
5
PHP 文件I/O
92 阅读
php
thinkphp
laravel
工具
开源
mysql
数据结构
总结
思维逻辑
令人感动的创富故事
读书笔记
前端
vue
js
css
书籍
开源之旅
架构
消息队列
docker
教程
代码片段
redis
服务器
nginx
linux
科普
java
c
ElasticSearch
测试
php进阶
php基础
登录
Search
标签搜索
php函数
php语法
性能优化
安全
错误和异常处理
问题
vue
Composer
Session
缓存
框架
Swoole
api
并发
异步
正则表达式
php-fpm
mysql 索引
开发规范
协程
dafenqi
累计撰写
786
篇文章
累计收到
33
条评论
首页
栏目
php
thinkphp
laravel
工具
开源
mysql
数据结构
总结
思维逻辑
令人感动的创富故事
读书笔记
前端
vue
js
css
书籍
开源之旅
架构
消息队列
docker
教程
代码片段
副业
redis
服务器
nginx
linux
科普
java
c
ElasticSearch
测试
php进阶
php基础
页面
关于
搜索到
560
篇与
的结果
2023-08-09
主要开源PHP CMS 列表
主要开源PHP CMS 列表主要开源PHP CMS 列表一、PHPCMS通用型模块化网站内容管理系统,内建模型管理,可建任何类型的网站。采用PHP MVC框架开发。稳定负载能力强。支持建站群. 基本不用二次开发.http://www.phpcms.cn二、帝国CMS通用型模块化网站内容管理系统,内建模型管理,可建任何类型的网站。安全性最好,功能最强大的CMS系统。 缺点:后台样式比较老,后台操作浏览器兼容性差。基本不用二次开发.http://www.phome.net/三、五指CMS通用型模块化网站内容管理系统,内建模型管理,可建任何类型的网站.原PHPCMS作者最新力作。响应式布局,一个网站兼容多个终端 × 微信接口全支持,快速构建微营销平台 × 开放接口,支持第三方APP无缝接入。自带众多主流建站模块,支持建站群. 基本不用二次开发(推荐)http://www.wuzhicms.com/四、MetInfo 企业建站系统企业网站建站系统,适合建企业官网.响应式网站设计,智能适应用户设备的屏幕尺寸。http://www.metinfo.cn/五、OpenCenter 开源用户及后台管理系统采用ThinkPHP框架开发的用户及后台管理系统,需要自己二次开发CMS功能。http://www.ocenter.cn/六、 October CMS采用世界上最流行的php框架 laravel 开发的内容管理系统,采用了许多最新的PHP编程思想。 需要二次开发。http://octobercms.com/七、findcms,poscms,php7cms支持站群的CMS,支持手机,微信,app.不错。
2023年08月09日
16 阅读
0 评论
0 点赞
2023-08-09
PHP 闭包详解及实例代码
PHP 闭包详解及实例代码这篇文章主要介绍了PHP 闭包详解及实例代码的相关资料,需要的朋友可以参考下闭包和匿名函数在PHP5.3.0中引入的。闭包是指:创建时封装周围状态的函数。即使闭包所处的环境不存在了,闭包中封装的状态依然存在。理论上,闭包和匿名函数是不同的概念。但是PHP将其视作相同概念。实际上,闭包和匿名函数是伪装成函数的对象。他们是Closure类的实例。闭包和字符串、整数一样,是一等值类型。创建闭包<?php$clousre = function ($name) {return 'Hello ' . $name;};echo $closure('nesfo');我们之所以能调用$closure变量,是因为这个变量的值是一个闭包,而且闭包对象实现了__invoke()魔术方法。只要变量名后有(),PHP就会查找并调用__invoke()方法。通常会把PHP闭包当作函数的回调使用。array_map(), preg_replace_callback()方法都会用到回调函数,这是使用闭包的最佳时机!举个例子:<?php$numbersPlusOne = array_map(function ($number) {return $number + 1;}, [1, 2, 3]);print_r($numbersPlusOne);得到结果:[2, 3, 4]在闭包出现之前,只能单独创建具名函数,然后使用名称引用那个函数。这么做,代码执行会稍微慢点,而且把回调的实现和使用场景隔离了。<?phpfunction incrementNum ($number) {return $number + 1;}$numbersPlusOne = array_map('incrementNum', [1, 2, 3]);print_r($numbersPlusOne);附加状态匿名函数不止可以当回调使用,还可以为PHP附加并封装状态。PHP中,必须手动调用闭包对象的bindTo()方法或者使用use关键字,才能把状态附加到PHP闭包上。<?phpfunction enclosePerson ($name) {return function ($doCommand) use ($name) {return $name . ', ' . $doCommand;}}$clay = enclosePerson('Clay');echo $clay('get me sweet tea!');得到结果:"Clay, get me sweet tea!"PHP闭包是对象,每个闭包实例都可以使用$this关键字获取闭包的内部状态。闭包对象的默认状态没什么用,只有__invoke()方法和bindTo方法而已。我们可以使用bindTo()这个方法,将Closure对象的内部状态绑定到其它对象上。bindTo()方法的第二个参数:其作用是指定绑定闭包的那个对象所属的PHP类。因此,闭包可以访问绑定闭包的对象中受保护和私有的成员。PHP框架经常使用bindTo()方法把路由URL映射到匿名回调函数上。这么做可以在这个匿名函数中使用$this关键字引用重要的应用对象。使用bindTo()方法附加闭包状态<?phpclass App{protected $routes = [];protected $responseStatus = '200 OK';protected $responseContentType = 'text/html';protected $responseBody = 'Hello world';public function addRoute($routePath, $routeCallback){$this->routes[$routePath] = $routeCallback->bindTo($this, __CLASS__);}public function dispatch($currentPath){foreach($this->routes as $routePath => $callback){if ($routePath === $currentPath) {$callback();}}header('HTTP/1.1' . $this->responseStatus);header('Content-type: ' . $this->responseContentType);header('Content-length' . mb_strlen($this->responseBody));echo $this->responseBody;}}<?php$app = new App();$app->addRoute('/user/nesfo', function () {$this->responseContentType = 'application/json; charset=utf8';$this->responseBody = '{"name": "nesfo"}';});$app->dispatch('/user/nesfo');
2023年08月09日
13 阅读
0 评论
0 点赞
2023-08-09
php基于闭包实现函数的自调用(递归)实例分析
php基于闭包实现函数的自调用(递归)实例分析这篇文章主要介绍了php基于闭包实现函数的自调用,结合实例形式分析了php闭包实现递归的操作方法,需要的朋友可以参考下本文实例讲述了php基于闭包实现函数的自调用(递归)的方法。分享给大家供大家参考,具体如下:php的闭包可能不常用,但是在某些场合之下还是可以考虑用php的闭包来实现某些功能的,比如递归,这里讲一下用php的闭包实现递归//php闭包实现函数的自调用,也就是实现递归function closure($n,$counter,$max){ //匿名函数,这里函数的参数加&符号是,引址调用参数自己 $fn = function (&$n,&$counter,&$max=1) use(&$fn){//use参数传递的是函数闭包函数自身$n++; if($n < $max){//递归点,也就是递归的条件 $counter .=$n.'<br />'; //递归调用自己 $fn($n,$counter,$max); } return $counter;};//记得这里必须加;分号,不加分号php会报错,闭包函数 /* *这里函数closure的返回值就是调用闭包的匿名函数 *而闭包函数,引用closure函数传进来的参数 */ return $fn($n,$counter,$max);}echo (closure(0,'',10));这是一个简单的使用php闭包实现递归的函数,其实,假如我们对这个函数稍微修改一下,是可以实现很多功能的,比如说,无限极分类。关于里面的闭包函数,其实,我们也可以不用引用外面的closure参数,里面的闭包函数的参数,我们可以在closure的内部设置。我们也可以不用返回闭包函数的值,因为闭包函数是在closure函数里面,我们可以在closure里面设置一下变量传递给闭包函数,然后,用闭包递归获取我们想要的东西存储在数组中,再利用closure函数返回闭包函数获取的东西,所以,闭包函数也可以没有返回值的,关键是你要获取什么东西。总之,你只要利用这个闭包函数实现你要的东西,然后返回你需要的东西即可,不一定非要从闭包函数的返回值中获取。
2023年08月09日
13 阅读
0 评论
0 点赞
2023-08-09
php实现递归的三种基本方式
php实现递归的三种基本方式这篇文章主要介绍了php实现递归的三种基本方法,包括利用引用做参数,利用全局变量,利用静态变量来实现递归,并附上了相关示例,最后给大家一个演示,涉及php的递归操作技巧,需要的朋友可以参考下递归函数是我们常用到的一类函数,最基本的特点是函数自身调用自身,但必须在调用自身前有条件判断,否则无限无限调用下去。实现递归函数可以采取什么方式呢?本文列出了三种基本方式。理解其原来需要一定的基础知识水品,包括对全局变量,引用,静态变量的理解,也需对他们的作用范围有所理解。递归函数也是解决无限级分类的一个很好地技巧。如果对无限级分类感兴趣,请参照php利用递归函数实现无限级分类。我习惯套用通俗的话解释复杂的道理,您确实不明白请参见手册。 利用引用做参数先不管引用做不做参数,必须先明白引用到底是什么?引用不过是指两个不同名的变量指向同一块存储地址。本来每个变量有各自的存储地址,赋值删除各行其道。现在可好,两个变量共享一块存储地址。 $a=&$b; 。实际上指的是 $a 不管不顾自己原来的存储地址,非要和 $b 共享一室了。因而任何对存储地址数值的改变都会影响两个值。函数之间本来也是各行其是,即便是同名函数。递归函数是考虑将引用作为参数,成为一个桥梁,形成两个函数间的数据共享。虽然两个函数见貌似操作的是不同地址,但是实际上操作的是一块儿内存地址。function test($a=0,&$result=array()){$a++;if ($a<10) { $result[]=$a; test($a,$result);}echo $a;return $result;}上面的例子非常简答,以a<10作为判断条件,条件成立,则把a赋给result[];将result的引用传入函数,会将每一次递归产生的a添加到结果数组result。因而本例生成的$result数组是 Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 [5] => 6 [6] => 7 [7] => 8 [8] => 9 ) 。本例比较有意思的是echo a的值。相信很多人认为是12345678910吧,其实不然,是1098765432。为什么呢?因为函数还没执行echoa前就进行了下一次的函数递归。真正执行echo a是当a<10条件不满足的时候,echo a,返回result,对于上一层而言,执行完递归函数,开始执行本层的echo $a,依次类推。 利用全局变量利用全局变量完成递归函数,请确保你确实理解什么是全局变量。global在函数内申明变量不过是外部变量的同名引用。变量的作用范围仍然在本函数范围内。改变这些变量的值,外部同名变量的值自然也改变了。但一旦用了&,同名变量不再是同名引用。利用全局变量实现递归函数没必要理解到这么深的一层,还保持原有对全局变量的看法就可以顺理成章理解递归函数。function test($a=0,$result=array()){ global $result; $a++; if ($a<10) {$result[]=$a; test($a,$result);} return $result;} 利用静态变量我们常常在类中见到static,今天我们把它利用到递归函数中。请记住static的作用:仅在第一次调用函数的时候对变量进行初始化,并且保留变量值。举个栗子:function test(){static $count=0;echo $count;$count++;}test();test();test();test();test();请问这一段代码的执行结果是多少?是00000么?必然不是。是01234。首先第一次调用test(),static对 $count 进行初始化,其后每一次执行完都会保留 $count 的值,不再进行初始化,相当于直接忽略了 static $count=0; 这一句。因而将static应用到递归函数作用可想而知。在将需要作为递归函数间作为“桥梁"的变量利用static进行初始化,每一次递归都会保留"桥梁变量"的值。function test($a=0){ static $result=array(); $a++; if ($a<10) {$result[]=$a; test($a);} return $result;} 总结所谓递归函数,重点是如何处理函数调用自身是如何保证所需要的结果得以在函数间合理"传递",当然也有不需要函数之间传值得递归函数,例如:function test($a=0){ $a++; if ($a<10) {echo $a; test($a);}}面对这样的函数,我们就不必大伤脑筋了。顺便说一句,深入理解变量引用相关知识对解决这类问题大有裨益。最后给大家分享一个php实现递归与无限分类的方法,具体实现方法如下:<?phpecho "";$area = array(array('id'=>1,'area'=>'北京','pid'=>0),array('id'=>2,'area'=>'广西','pid'=>0),array('id'=>3,'area'=>'广东','pid'=>0),array('id'=>4,'area'=>'福建','pid'=>0),array('id'=>11,'area'=>'朝阳区','pid'=>1),array('id'=>12,'area'=>'海淀区','pid'=>1),array('id'=>21,'area'=>'南宁市','pid'=>2),array('id'=>45,'area'=>'福州市','pid'=>4),array('id'=>113,'area'=>'亚运村','pid'=>11),array('id'=>115,'area'=>'奥运村','pid'=>11),array('id'=>234,'area'=>'武鸣县','pid'=>21));function t($arr,$pid=0,$lev=0){static $list = array();foreach($arr as $v){if($v['pid']==$pid){echo str_repeat(" ",$lev).$v['area']."";//这里输出,是为了看效果$list[] = $v;t($arr,$v['id'],$lev+1);}}return $list;}$list = t($area);echo "";print_r($list);?>
2023年08月09日
6 阅读
0 评论
0 点赞
2023-08-09
php 生成器 yield 实现的递归
php 生成器 yield 实现的递归原始递归方法:<?php echo "<pre>"; $area = array( array('id'=>1,'area'=>'北京','pid'=>0), array('id'=>2,'area'=>'广西','pid'=>0), array('id'=>3,'area'=>'广东','pid'=>0), array('id'=>4,'area'=>'福建','pid'=>0), array('id'=>11,'area'=>'朝阳区','pid'=>1), array('id'=>12,'area'=>'海淀区','pid'=>1), array('id'=>21,'area'=>'南宁市','pid'=>2), array('id'=>45,'area'=>'福州市','pid'=>4), array('id'=>113,'area'=>'亚运村','pid'=>11), array('id'=>115,'area'=>'奥运村','pid'=>11), array('id'=>234,'area'=>'武鸣县','pid'=>21) ); function t($arr,$pid=0,$lev=0){ static $list = array(); foreach($arr as $v){ if($v['pid']==$pid){ echo str_repeat(" ",$lev).$v['area']."<br />"; //这里输出,是为了看效果 $list[] = $v; t($arr,$v['id'],$lev+1); } } return $list; } $list = t($area); echo "<hr >"; print_r($list); ?>用 yield 实现<?php echo "<pre>"; $area = array( array('id'=>1,'area'=>'北京','pid'=>0), array('id'=>2,'area'=>'广西','pid'=>0), array('id'=>3,'area'=>'广东','pid'=>0), array('id'=>4,'area'=>'福建','pid'=>0), array('id'=>11,'area'=>'朝阳区','pid'=>1), array('id'=>12,'area'=>'海淀区','pid'=>1), array('id'=>21,'area'=>'南宁市','pid'=>2), array('id'=>45,'area'=>'福州市','pid'=>4), array('id'=>113,'area'=>'亚运村','pid'=>11), array('id'=>115,'area'=>'奥运村','pid'=>11), array('id'=>234,'area'=>'武鸣县','pid'=>21) ); function t($arr,$pid=0,$lev=0){ static $list = array(); foreach($arr as $v){ if($v['pid']==$pid){ echo str_repeat(" ",$lev).$v['area']."<br />"; //这里输出,是为了看效果 $list[] = $v; foreach(t($arr,$v['id'],$lev+1) as $value){ yield $value; } } } yield $list; } foreach (t($area) as $key => $value) { $list=$value; } echo "<hr >"; print_r($list); ?>
2023年08月09日
59 阅读
0 评论
0 点赞
1
...
62
63
64
...
112