Home >Backend Development >PHP Tutorial >php 中 对象的数据隔离?
在多人访问某个 类 的时候,如果在代码中显性的写死了 $i = new Class() ; 的话,那么所有的人访问的对象都是这个唯一的 $i 吗?
在多人访问某个 类 的时候,如果在代码中显性的写死了 $i = new Class() ; 的话,那么所有的人访问的对象都是这个唯一的 $i 吗?
题主可能对代码是怎么执行的还每太弄明白。
本质上你写了一个class,它什么都不是,仅仅是一堆变量和一系列函数的集合。只是语言底层帮你做了一些限制,让这个集合里面的变量或者函数只能通过className.xxx的方式来访问和调用。
至于你的问题,你首先主要知道php的多进程的概念。你可以把php代码看成一个食谱,食谱是什么呢?食谱什么都不是,它仅仅是一系列的步骤,让看它的人跟着它的指示进行下一步。没有厨师,食谱毫无意义。当用户请求执行xxx.php,就相当于来了个厨师拿了xxx这个食谱然后按照食谱上写的步骤开始烹饪。同时有多个对xxx.php的请求,相当于同时来了多个厨师,他们的共同点是:他们拿着同一份食谱,意味着他们之后会干相同的事情。但是每个厨师都是独立的,他们有他们自己的食材和锅,所以是互不影响的。
题主可能想问的是单例模式,我继续用上面的例子来讲。对于某个厨师,他在按照食谱进行烹饪的时候,其中可能会需要多次放一勺70%盐+20%孜然+10%味精的混合物
。那么对于这样可能会反复用到的对象,他可以提前做一罐放在那儿,之后要用就不需要每次去按比例混合,直接从罐子里取一勺就好了。这就是单例。
那么你可能还有疑问,我电脑只有一个CPU进行运算,我同时多个请求来了怎么办?很简单,轮流使用呗。这个答案可能比较让人惊讶,但事实就是如此。就好比说有100个人要写作文,但是只有一张纸,怎么办呢?那只能每个人写两句然后下一个人写,等大家都写完了,又轮到第一个人写。这看起来简直就没办法写下去了嘛!但是想象一下,如果速度非常非常快,你写了一个字后你的纸被拿走给别人写,但是0.0000001秒之后大家都写完了,纸又回到了你的手上,而且别人的字迹都被擦干净了,你写的内容还在原来的位置。在这么短的时间内切换,你完全感觉不到纸被拿走过,你会觉得是自己独占地使用这张纸。这就是操作系统的进程切换,PHP也是这个道理。
当然不同了, 每个用户都有一个全新的实例$i。 因为每个用户所在的进程同。
。。。
如果每个人都得到的是一份$i的copy而不是每个人都执行了$i=new Class的话,他们能回到同一个实例.反之,如果他们都通过$i=new Class的话.那肯定只能共享static.以上这些的假设都是php运行在单线程下.很明显LZ0说的多个用户一定会启动多个php进程.