2011-01-23 36 views
2

我正在面向对象的设计中编写一个Web应用程序。这个应用程序会经常与数据库进行交互。一些常规操作正在验证用户对所请求的函数/方法的ACL权限,执行某些功能等。简而言之,数据库将被使用很多。所以我的问题是,如果我使用OOP开发我的应用程序,并声明将用于设置输入的类级别变量,并且如果有来自另一个用户的任何并行或并发请求,输入数据被改变?在多线程的请求环境中面向对象的编码 - PHP

我需要做一些独立的事情来确保应用程序是多线程的,并且在进程未完成之前进入的输入不会被更改吗?

例如:

class myProces{ 
var $input1; 
var $input2; 

    function process1($ip1, $ip2){ 
     $this->input1 = $ip1; 
     $this->input2 = $ip2; 
     $this->getDataDB();   
    } 

    function getDataDB(){ 
    //do some database activity with the class level variables; 
    // I would pass the values in the class level variables; 
    $query = "select column from table where col1 = $this->input1 and col2= $this->input2"; 

    mysql_query($query); 

    return something; 
    } 


} 

现在,如果我有两个用户打在同一时间我的应用程序,并给函数的调用这个类

USER1: $ OBJ =新myProces( ); $ obj-> process1(1,2);

user2: $ obj = new myProces(); $ obj-> process1(5,6);

现在,如果我确实有类级变量,当并发请求进来时它们是否会更改值? PHP会为多线程做任何类型的处理吗?我不确定Apache是​​否可以充当消息队列,请求可以排队。

任何人都可以解释,如果面向大量用户的Web应用程序的OOP好,或者开发人员需要做任何类型的多线程?

回答

-1

这不是你不必担心的问题。与Web服务器的每个连接都会生成一个完全独立的PHP解释器实例,并具有完全独立的内存和资源句柄。其中一个对象不会受到另一个对象的影响,一个对象中的任何数据库连接都不会受到另一个对象的影响。您的一个进程中的类属性不会被另一个进程中的请求修改。

Web上的许多顶级站点都运行在Apache和PHP上,数百个并发请求全天同时发生,而且他们不必编写任何特殊代码来处理它。

0

几件事情:

  1. 这有什么好做的面向对象编程。
  2. PHP不支持用户线程

每个请求都将使用它自己的内存,所以你不必担心你的背后并发使用更新的变量。

但是,在处理来自数据库的数据时,您必须小心。用户1可能会读取某些内容,然后用户2可能会读取相同的内容并在用户1完成之前对其进行更新。然后,当用户1更新它时,他可能会意外覆盖用户2所做的一些事情。

这些事情可以用事务,锁等来处理。再次,它与OOP或多线程无关。

0

第一个:尝试了解PDO(除非变量之前的VAR,意味着您使用的是PHP4)。

第二:正如konforce和Grossman所说,每个用户都获得不同的PHP实例。

:可能会出现此问题的Java项目(及其他),使用静态的对象或静态方法。不要担心这在PHP中。

+0

PDO将如何帮助我?它是为单个应用程序使用多个数据库而不是它 – macha 2011-01-23 02:53:24

0

有没有必要担心在PHP端混淆了事情,但是当您想出更新或插入数据的需要时,有多个用户可以修改相同的数据子集将导致您进入不需要的后果。如插入重复行或修改同一行。因此,您需要使用SQL命令,如锁定表或行。