Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
多线程请求环境中的面向对象编码——PHP_Php_Database_Multithreading_Queue_Message Queue - Fatal编程技术网

多线程请求环境中的面向对象编码——PHP

多线程请求环境中的面向对象编码——PHP,php,database,multithreading,queue,message-queue,Php,Database,Multithreading,Queue,Message Queue,我正在编写一个面向对象设计的web应用程序。这个应用程序将经常与数据库交互。一些常规操作包括验证用户对请求的函数/方法的ACL权限、执行某些函数等。简而言之,数据库将被大量使用。所以我这里的问题是,如果我使用OOP开发我的应用程序,并声明用于设置输入的类级变量,并且如果有任何来自其他用户的并行或并发请求,输入数据会被更改吗 我是否需要做一些单独的事情来确保应用程序是多线程的,并且在进程未完成之前不会更改输入 例: 现在,如果有两个用户同时访问我的应用程序,并调用这个类中的函数 用户1: $obj

我正在编写一个面向对象设计的web应用程序。这个应用程序将经常与数据库交互。一些常规操作包括验证用户对请求的函数/方法的ACL权限、执行某些函数等。简而言之,数据库将被大量使用。所以我这里的问题是,如果我使用OOP开发我的应用程序,并声明用于设置输入的类级变量,并且如果有任何来自其他用户的并行或并发请求,输入数据会被更改吗

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

例:

现在,如果有两个用户同时访问我的应用程序,并调用这个类中的函数

用户1: $obj=新的myProces; $obj->process11,2

用户2: $obj=新的myProces; $obj->process15,6

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


有谁能解释一下面向对象编程(OOP)对于用户数量众多的web应用程序是否很好,或者开发人员是否必须执行任何类型的多线程处理???

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


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

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

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

有几件事:

这与OOP无关。 PHP不支持用户线程 每个请求都将使用它自己的内存,所以您不必担心背后的并发使用更新变量

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

这类事情可以通过事务、锁等来处理。同样,它与OOP或多线程无关。

有几件事:

这与OOP无关。 PHP不支持用户线程 每个请求都将使用它自己的内存,所以您不必担心背后的并发使用更新变量

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

这类事情可以通过事务、锁等来处理。同样,它与OOP或多线程无关。

首先:尝试了解PDO,除非变量前面的变量表示您正在使用PHP4

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

第三:这个问题可能发生在Java项目和其他使用静态对象或静态方法的项目中。在PHP中不要担心这一点。

首先:尝试了解PDO,除非变量之前的变量表示您使用的是PHP4

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


第三:这个问题可能发生在Java项目和其他使用静态对象或静态方法的项目中。在PHP中不必担心这一点。

在PHP方面不必担心混淆,但是当您需要更新或插入数据时,让多个用户能够修改相同的数据子集将导致不必要的后果。例如插入重复行或修改同一行。因此,您需要使用SQL命令,例如锁定表或行。

无需担心将
在PHP方面有很多问题,但当您需要更新或插入数据时,让多个用户能够修改相同的数据子集将导致不必要的后果。例如插入重复行或修改同一行。因此,您需要使用SQL命令,例如锁定表或行。

PDO将如何帮助我?这是为了在一个应用程序中使用多个数据库,不是吗?你说:我正在用面向对象的设计编写一个web应用程序。PDO是面向对象的。你不必担心字符串的转义和其他很多事情。PDO是用C写的,这意味着“更快”。PDO能帮我什么忙?这是为了在一个应用程序中使用多个数据库,不是吗?你说:我正在用面向对象的设计编写一个web应用程序。PDO是面向对象的。你不必担心字符串的转义和其他很多事情。PDO是用C编写的,这意味着“更快”。
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;
    }


}