作者chrisQQ (ChrisLiu)
看板PHP
标题Re: [请益] 一些观念厘清
时间Wed Feb 15 02:51:07 2012
※ 引述《p52189 (皮爷)》之铭言:
: function A (String,String,int)
: function A (String,int,int)
:
: 没有明显型别限制的话怎麽区别它们呢?
: 我之前好像看过有人这样写
:
: function X ($vara = '')
:
: 这样是不是表示限制?
php 里面没有重载(overload)
你只能宣告 function A (var1, var2, var3) {
// 如果你依旧想写成 overload 的话
if (is_int(var2)) { A2(); }
// etc...
}
php 只认得一个同名的 A function,其他不管参数数一不一样,都会跳重复定义的错误
: 另外
:
: $a = $b;
:
: 这时候a、b皆是指向同一个实体吗?
:
: ↑这部分超搞混
:
array 的话在 PHP5 里面直接用 $a = $b 是指向同个实体
(印象中,有错请指正。我只依稀记得 PHP4 跟 PHP5 不一样)
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
1F:推 UniFish:array的=是「复制」02/15 09:10
↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
:
: 更搞混的还有...
:
: 请问以下变数作用范围是?
:
: {$a}
个人没写过这种写法,估计只有在 "{$a}",双引号内部出现,
:
: function A(){$a}
local
:
: while(true){$a}
global
:
: 我知道一般写在最外头的变数好像强到可以跨过不同的指令稿
:
: 所以会让多个页面利用include同一指令稿的方式共用变数
:
: 但所谓的共用,这些变数是属於同一个Request吗?
:
如果你指的同个 request = 同个 client 的 同个 connection 的话
那麽,是的。
: 比如有一组页面
:
: page_one.php
:
: page_two.php
:
: page_three.php
:
: 它们皆 include 一个 global.php,global.php 内含一个 $my_var
:
: 王小明透过浏览器观看 page_one.php
:
: 陈小华透过浏览器观看 page_two.php
:
: 假设两个页面会分别对 $my_var做操作,值会不同
:
会
: 那他们得到的 $my_var 结果会一样吗?
:
不会
PHP 中没有 ASP 的 Application 全域系统变数,
生命周期就只有 client 开始连线到结束。
(当然你可以用写档/share momery的方式来弄一个跟 ASP Application 变数一样)
($_SESSION 存在主机上,看你设定多久,
$_COOKIE 在 client 上,一样看你的 expire time,其他变数几乎都是执行完就死了)
: 还是说共用仅止於小明本人?
:
不考虑上述的 Application 变数的话
小明的变数仅小明
小华的变数仅小华
:
: 问得很支离破碎抱歉...因为我也不是很清楚问题长什麽样子,具体有哪些问题等等
:
: 如果清楚问题的话也许自己就可以解决了冏
: ※ 编辑: p52189 来自: 114.42.225.45 (02/14 21:39)
: → tyf99:不同 client 的变数是分开的,因为是不同的 php thread 02/14 23:48
: → tyf99:不同 thread 的变数要互通,就要透过 shared memory 02/14 23:49
: → tyf99:变数的生命期,一般来说最长的是$_SESSION,然後才是global 02/14 23:51
: → tyf99:不过一般不会用 shared memory,难写,透过资料库比较简单 02/14 23:53
memcache 是个好方法!(但还是要稍微搭配资料库做纪录)
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 219.85.64.11
2F:推 p52189:感谢!非常清楚! 02/15 07:31
3F:→ p52189:不过印象中HTTP不是一问一答的吗? 所以才说request 02/15 07:33
4F:→ p52189:搞错的话不好意思 02/15 07:33
5F:→ gname:php没有重载,但有写法可以仿... 02/15 08:34
6F:推 UniFish:array的=是「复制」 02/15 09:10
7F:推 kerash:php 的重载大多数都是用 func_get_arg() 取得输入参数 02/15 09:11
8F:→ kerash:判断 arg 的长度 if=1 or if=2 ... etc 之後 02/15 09:12
9F:→ kerash:再看看要不要针对每个输入的参数判断型态来呼叫执行 02/15 09:12
10F:→ kerash:以上说的是仿造的方式 02/15 09:13
11F:推 gname:推楼上~ 就是酱~ 02/15 10:53
把楼上板友 array = 的定义放到文章内。
※ 编辑: chrisQQ 来自: 219.85.64.11 (02/15 17:13)
12F:推 kusoayan:复制是在改变其值时才会进行 02/16 00:47