当前位置:  编程技术>php
本页文章导读:
    ▪PHP面向对象编程-静态变量(类变量)      题目:有一群朋友在玩捉迷藏游戏,不时有新的小朋友加入,请问如何知道现在共有多少人在玩?请使用面向对象的思想,编写程序解决。解决这个问题有2中方法:使用全局变量和静态变量<?php.........
    ▪curl数据采集系列之多页面并行采集函数get_htmls      用第一篇的get_html()实现简单的数据采集,由于是一个一个执行才采集数据的传输时间就会是所有页面下载的总时长,一个页面假设1秒,那么10个页面就是10秒了。所幸curl还提供了并行处理的.........
    ▪php更新mysql后获取改变的行数      从manual上知道了mysql_affected_rows函数当UPDATE前后的数据一样时会返回异常值,下面有个方便的解决办法,从官方munual上看到 bdobrica at gmail dot com  留言的:As a solution to the problem pointed in th.........

[1]PHP面向对象编程-静态变量(类变量)
    来源:    发布时间: 2013-11-07

题目:有一群朋友在玩捉迷藏游戏,不时有新的小朋友加入,请问如何知道现在共有多少人在玩?请使用面向对象的思想,编写程序解决。
解决这个问题有2中方法:使用全局变量和静态变量

<?php
//有一群朋友在玩捉迷藏游戏,不时有新的小朋友加入,
//请问如何知道现在共有多少人在玩?
//请使用面向对象的思想,编写程序解决。
/*
//1种方法使用全局变量

global $global_nums;
//先声明全局变量后再对它进行赋值
$global_nums=0;

class Child{

public $name;

//构造方法
public function __construct($name){

$this->name=$name;
}

//定义一个方法统计人数
public function allPlay(){
//先声明使用全局变量
global $global_nums;
$global_nums+=1;
echo $this->name."加入游戏.<br/>";
}
}

$p1=new Child("lily");
$p1->allPlay();
$p2=new Child("lucy");
$p2->allPlay();
$p3=new Child("kucy");
$p3->allPlay();
echo $global_nums;
*/
//第二在类中 使用静态变量

class Child{

public $name;
//在类中声明静态变量
public static $allPlay=0;

public function __construct($name){

$this->name=$name;
}

//统计人数
public function addPlay(){
//在类中使用静态变量。在类中有下面2中方式访问静态变量
//self::$静态变量名和类名::$静态变量名
//self::$allPlay+=1;
Child::$allPlay+=1;
echo $this->name."加入游戏.<br/>";

}
}

$p1=new Child("lily");
$p1->addPlay();
$p2=new Child("lucy");
$p2->addPlay();
$p3=new Child("kucy");
$p3->addPlay();
$p4=new Child("uucy");
$p4->addPlay();

//在类外只有一种方式访问静态变量:类名::$静态变量名
echo Child::$allPlay;
?>

 

本文链接


    
[2]curl数据采集系列之多页面并行采集函数get_htmls
    来源:    发布时间: 2013-11-07

用第一篇的get_html()实现简单的数据采集,由于是一个一个执行才采集数据的传输时间就会是所有页面下载的总时长,一个页面假设1秒,那么10个页面就是10秒了。所幸curl还提供了并行处理的功能。

要写一个并行采集的函数,先要了解要采集什么样的页面,对采集的页面用什么请求,才能写出一个相对常用的函数。 

 

功能需求分析:

返回什么? 

当然每一个页面的html集合成的数组

传递什么参数? 

编写get_html()时,我们知道了可以用options数组来传递更多的curl参数,那么多页面同时采集函数的编写这种特性也得保留下来。

什么类型的参数?

无论是请求网页HTML,还是调用互联网api接口,get和post传递参数总是请求同一个页面或者接口,只是参数不同罢了。那么参数的类型是:

 

get_htmls($url,$options);

 

$url 是string

 

$options,是一个二维数组,每一个页面的参数为一个数组。

 

这样的话,貌似解决了问题。但是我找遍了curl的手册都没有看到get的参数传递在什么地方,所以只能$url 是数组的形式传递并且增加一个method参数

 

 

 

函数的原型就定下来了get_htmls($urls,$options = array, $method = ‘get’);代码如下:

 

1 function get_htmls($urls, $options = array(), $method = 'get'){
2 $mh = curl_multi_init();
3 if($method == 'get'){//get方式传值 最常用
4 foreach($urls as $key=>$url){
5 $ch = curl_init($url);
6 $options[CURLOPT_RETURNTRANSFER] = true;
7 $options[CURLOPT_TIMEOUT] = 5;
8 curl_setopt_array($ch,$options);
9 $curls[$key] = $ch;
10 curl_multi_add_handle($mh,$curls[$key]);
11 }
12 }elseif($method == 'post'){//post方式传值
13 foreach($options as $key=>$option){
14 $ch = curl_init($urls);
15 $option[CURLOPT_RETURNTRANSFER] = true;
16 $option[CURLOPT_TIMEOUT] = 5;
17 $option[CURLOPT_POST] = true;
18 curl_setopt_array($ch,$option);
19 $curls[$key] = $ch;
20 curl_multi_add_handle($mh,$curls[$key]);
21 }
22 }else{
23 exit("参数出错!\n");
24 }
25 do{
26 $mrc = curl_multi_exec($mh,$active);
27 curl_multi_select($mh);//减少CPU压力 注释掉CPU压力变大
28 }while($active);
29 foreach($curls as $key=>$ch){
30 $html = curl_multi_getcontent($ch);
31 curl
    
[3]php更新mysql后获取改变的行数
    来源:    发布时间: 2013-11-07

从manual上知道了mysql_affected_rows函数当UPDATE前后的数据一样时会返回异常值,

下面有个方便的解决办法,从官方munual上看到 bdobrica at gmail dot com  留言的:

As a solution to the problem pointed in the post reffering to mysql_affected_rows() returning 0 when you are making an update query and the fields are not modified although the query is valid, i'm posting the following function. It is very simple and based on a previous post.

function mysql_modified_rows () {
$info_str = mysql_info();
$a_rows = mysql_affected_rows();
ereg("Rows matched: ([0-9]*)", $info_str, $r_matched);
return ($a_rows < 1)?($r_matched[1]?$r_matched[1]:0):$a_rows;
}

 

PS:因为这个小问题折腾了半天,感觉php真是太不清晰了

本文链接


    
最新技术文章:
▪PHP函数microtime()时间戳的定义与用法
▪PHP单一入口之apache配置内容
▪PHP数组排序方法总结(收藏)
▪php数组排序方法大全(脚本学堂整理奉献)
▪php数组排序的几个函数(附实例)
▪php二维数组排序(实例)
▪php根据键值对二维数组排序的小例子
▪php验证码(附截图)
▪php数组长度的获取方法(三个实例)
▪php获取数组长度的方法举例
▪判断php数组维度(php数组长度)的方法
▪php获取图片的exif信息的示例代码
▪PHP 数组key长度对性能的影响实例分析
▪php函数指定默认值的方法示例
▪php提交表单到当前页面、提交表单后页面重定...
▪php四舍五入的三种实现方法
▪php获得数组长度(元素个数)的方法
▪php日期函数的简单示例代码
▪php数学函数的简单示例代码
▪php字符串函数的简单示例代码
▪php文件下载代码(多浏览器兼容、支持中文文...
▪php实现文件下载、支持中文文件名的示例代码...
▪php文件下载(防止中文文件名乱码)的示例代码
▪解决PHP文件下载时中文文件名乱码的问题
▪php数组去重(一维、二维数组去重)的简单示例
▪php小数点后取两位的三种实现方法
▪php Redis 队列服务的简单示例
▪PHP导出excel时数字变为科学计数的解决方法
▪PHP数组根据值获取Key的简单示例
▪php数组去重的函数代码示例
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3