php 真正的多线程 pthread

对于php,有很多种多进程的实现,这里就不说了,下面介绍一种多线程的方式。 php真正的多线程实现方式,通过安装php的扩展:pthread 扩展

安装步骤如下:

下载地址是这个:

https://github.com/krakjoe/pthreads

但是这个下载的是 版本3 也就是php 7 才能用的

我们需要使用2版本

然后刷新的页面如下,拖到最底部:

下一页找到版本2的

下载下来,这个v2 才是php5才可以使用的

下载下来,安装:

或者,您直接这样下载:

cd /tools  
   wget https://github.com/krakjoe/pthreads/archive/v2.0.10.zip  
   unzip   v2.0.10.zip  
   cd pthreads-2.0.10  
   /usr/local/php/bin/phpize  
   ./configure --with-php-config=/usr/local/php/bin/php-config    
   make  
   make install

注意:您的php 在编译的时候需要开启 –enable-maintainer-zts

./configure --prefix=/usr/local/php --disable-fileinfo   --enable-fpm --with-config-file-path=/etc --with-config-file-scan-dir=/etc/php.d --with-openssl --with-zlib --with-curl --enable-ftp --with-gd --with-xmlrpc  --with-jpeg-dir --with-png-dir --with-freetype-dir --enable-gd-native-ttf --enable-mbstring --with-mcrypt=/usr/local/libmcrypt --enable-zip --with-mysql=/usr/local/mysql --without-pear --enable-maintainer-zts 

 

vim /etc/php.ini 
添加
extension=pthreads.so

 

重启php  
/etc/init.d/php-fpm restart

 

我之前搞的一个用php多线程获取订单货运号的例子:

http://blog.csdn.net/terry_water/article/details/50273847

php 一个容易被混淆的概念,深入理解成员变量和 属性。

本文章有误,不要阅读该文章。

1.对于public 定义的类的变量称为成员变量,譬如:

public $age;

2.通过 get开头的方法定义的为属性,他们都可以通过$ob->age 访问,譬如:

public function getSex() {}  
public function setSex($sex) {}

3.下面我们看一下他们执行的优先级

class ob{  
  # 类成员变量
  public  $age =10;  
  
  # 属性方法
  public function getAge(){  
    return 18;  
  }  
    # 魔术方法 
  public function __get($name){  
    return 22 ;  
  }  
  
}

如果我执行:

$ob = new ob();  
$ob->age

执行的结果为:

1.返回的是public 定义的成员变量, 10

2.如果去掉public $age的定义,那么返回的是魔术方法   22

因为魔术方法对应的是,当某些成员变量不存在的时候,就会访问魔术方法__get

3.如果去掉 __get的方法的定义,才会访问对象的属性,那么返回的是 18

 

二:下面我们执行一点高级点的php知识:

有时候我们看似一个简单的赋值,可能在后面执行了很多我们看不到的东西,这个在yii2中有很多地方用到了。

class ob{  
    public $age = 10;  
    
  public function  setScore($score){  
    $this->age = 22;   
    }  
   
  public function  getScore(){  
    $this->age = 55;
    return 199;  
    }  
}

当我们执行:

$ob = new $ob()  
echo $ob->age;  # 结果输出10,这个没有问题,很容易理解
echo $ob->score;  # 结果为199
echo $ob->age;  # 结果输出55 
$ob->score = 10;  #并没有给score赋值,而是给成员变量age赋值22
echo $ob->age;  # 结果输出55

上面我写的代码有点离谱,不过对于理解这个概念很有帮助,可以看到我们利用封装的对象$ob,进行赋值,在当前代码中并没有赋值,而是干了其他的事情。

譬如在yii的model有一个赋值的函数

$model->attributes = […],这里执行的就是一个属性,也就是setAttributes,结果保存到了private类成员变量$_attributes中了。