对OO不是很了解。
平常的项目中有许多公共的,操作频繁的函数。
我现在想把那些函数进行分类封装。静态方法一般是在不涉及到对象属性,状态时使用,一般通过传入值,在方法内部操作并返回值。(网上看的,不知道对不对)方法一:
static function delfile($path){
if(file_exists($path)){
if(is_file($path)){
@unlink($path);
}
}
}
问题:并发的时候,如:user1删除file1,user2删除file2,会不会出现user1删除file2,user2删除file1或者只删除了file1,或者都没删除???(我的理解是互不影响)方法二:
static function IP($SAFEKEY){
$IP=$_SERVER["REMOTE_ADDR"];
return $IP;
}
问题:user1是ip1,user2是ip2,会不会出现user1得到ip2或其他情况???方法三:
static function rands($num){
$a="YqVO8wAeK1U6DrTtyI4BuGioLp2CaPsJdfM3SgFh0ZjWklEz7NxRc9vHbX5nQm";
for($i=0;$i<$num;$i++){
$str.=substr($a,mt_rand(0,strlen($a)-1),1);
}
return $str;
}
rands(4);
问题:排除在很小很小的几率下user1和user2会得到相同结果可能。在系统或线程或某些情况下,user1和user2是否会得到相同的结果。

解决方案 »

  1.   

    你说的情况都不会发生。。而且和static关键字没关系。。
      

  2.   

    一:互不影响
    用户指定的path不同,当然不会删除错。二:不会有错
    根据客户来得到 ip,不会有影响三:相同机率很小。
    mt_rand散播种子是随机的。
    用户1和2,得到相同种子是较小的。应该说是短期内。。时间长,得到结果多,相同还是较多的,。____________
    以上仅为个人意见
      

  3.   

    问题:并发的时候,如:user1删除file1,user2删除file2,会不会出现user1删除file2,user2删除file1或者只删除了file1,或者都没删除???(我的理解是互不影响)理解正确问题:user1是ip1,user2是ip2,会不会出现user1得到ip2或其他情况???
    不会问题:排除在很小很小的几率下user1和user2会得到相同结果可能。在系统或线程或某些情况下,user1和user2是否会得到相同的结果。
    不会
    其实你有一个很大的误区,尽管php可以运行于进程(cgi方式)或线程(模块方式)中。
    但php中的任何变量、对象...(当然包括静态的)都只在当前进(线)程中有效
      

  4.   


    唠叨大哥,能稍微具体点解释一下:
    但php中的任何变量、对象...(当然包括静态的)都只在当前进(线)程中有效吗?我在网上查到的是说,静态类在内存中只存在一份,所以我就在想访问1和访问2同时执行某个静态方法的时候,会不会产生并发时的数据错误。
      

  5.   

    网上的关于PHP OO的静态方法说得很简单。
    我主要是在某些地方,某些情况多节约点系统开销。
      

  6.   

    重申一遍,php程序中的任何元素都只生存于当前运行的程序中,即一个http响应中你所说的“静态类在内存中只存在一份”是指当一个程序中多次实例化同一个类时
      

  7.   

    Thank You!php程序中的任何元素都只生存于当前运行的程序中,即一个http响应中你所说的“静态类在内存中只存在一份”是指当一个程序中多次实例化同一个类时我要问的就是这个
      

  8.   

    php是单线程的,每次请求(访问)中产生的静态类(方法)是只有一份的。并发处理是在WebServer(apache)上。访问1和访问2不会使用同一个地址存放php程序产生的变量。