PHP引用符&的用法介紹

關於php的引用(就是在變數或者函數、物件等前面加上&符號)的作用,我們先看下面這個程式。

“;
echo “$b
“;
$a++; //變數a自增1
echo “$a
“;
echo “$b
“;//查看變數b,也增加了1,說明使用的是同一存儲單元
?>

程式運行結果:

100
100
101
101

很多人誤解php中的引用跟C當中的指標一樣,事實上並非如此,而且很大差別。C語言中的指標除了在陣列傳遞過程中不用顯式申明外,其他都需要使用*進行定義,而php中對於位址的指向(類似指標)功能不是由用戶自己來實現的,是由Zend核心實現的,php中引用採用的是“寫時拷貝”的原理,就是除非發生寫操作,指向同一個位址的變數或者物件是不會被拷貝的。
php默認為傳值傳遞:

程式運行結果:

30 and 20

要是想變為位址傳遞需要加&,既:

程式運行結果:

30 and 30

也就是說,&把$a的位址傳給了$b,這樣的話這兩個變數現在共用一個記憶體的存儲區域,就是說它們的值是一樣的。
同樣的語法可以用在函數中,它返回引用,以及用在 new 運算子中:

引用做的第二件事是用引用傳遞變數。這是通過在函數內建立一個本地變數,並且該變數在呼叫範圍內引用了同一個內容來實現的。說的通俗點就是一個函數的參數是一個本地變數的引用。下面再舉例說明一下:

運行這段代碼是給函數傳遞兩個參數,一個是引用$a的內容,一個是$b的值,在執行此函數後,發現$a的內容改變了,而$b的內容則沒有變化。
PHP引用的第三個用法是引用返回,這個用法理解起來有點難度,引用返回用在當你想用函數找到引用應該被綁定在哪一個變數上面時。當返回引用時,使用此語法:說的簡單點,就還是引用函數的返回。但和參數傳遞不同,必須在函式定義和函數引用這兩個地方都用 & 符號。下面舉個例子:

x = 2;
?>

這個例子給$foo 賦值是函數find_var的返回引用,所以在給$foo->x賦值時就是給find_var的返回引用賦值,而不是簡單的賦值。
PHP引用的最後一個用法是引用定位,主要有兩個應用:一個是global 引用,當用 global $var 聲明一個變數時實際上建立了一個到全域變數的引用。也就是和$var =& $GLOBALS[“var”];是一樣的。另外一個是$this的用法,在一個物件的方法中,$this 永遠是調用它的物件的引用。

在沒有IPV6地址的OpenVZ VPS下使用IPV6隧道機制

我買的vps估計太便宜了,不配ipv6地址,而且無法加載ipv6模組。但能開啟TUN/TAP,所以用軟件tb-tun來建立ipv6 tunnel,使得能走ipv6流量。然後在學校裡可以用ipv6且不限網速,這樣ss用起來應該就快很多吧。:-D

1. 在HE上申請免費的ipv6地址

原理是vps與HE的服務器之間走ipv4流量,然後HE再轉換為ipv6流量並為其分配ipv6地址。這樣我們的vps就相當於「有了一個ipv6地址」,並能進行通信。
HE網址為:https://tunnelbroker.net/。註冊登入後,點閱Create Regular Tunnel。成功後,可見其為我們分配的ipv6地址,網頁不要關,後面設定要用。

2. 將TUN/TAP開啟

這個可以在vps的控制面板裡開啟,請確定已經開了,因為後面tb-tun需要。

3. vps上安裝tb-tun

下載tb-tun,執行:

tb-tun_r18.tar
tar xvf tb-tun_r18.tar.gz

編譯tb-tun,執行:

gcc tb_userspace.c -l pthread -o tb_userspace

4. 設定tunnel

在HE網頁上找到下面3個對應項

Server_IPv4_Address
Client_IPv4_Address
Client_IPv6_Address

將你自己的值替換到下面的代碼中,放到/etc/init.d/ipv6tb:

#! /bin/sh

### BEGIN INIT INFO
# Provides: ipv6
# Required-Start: $local_fs $all
# Required-Stop: $local_fs $network
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: starts the ipv6 tunnel
# Description: ipv6 tunnel start-stop-daemon
### END INIT INFO

# /etc/init.d/ipv6tb

touch /var/lock/ipv6tb

case “$1” in
start)
echo “Starting ipv6tb ”
setsid /root/tb_userspace tb 66.220.18.42 103.79.76.216 sit > /dev/null 2>&1 &
sleep 3s #ugly, but doesn’t seem to work at startup otherwise
ifconfig tb up
ifconfig tb inet6 add 2001:470:c:1032::2/64
ifconfig tb inet6 add 2001:470:d:1032::1/64 #Add as many of these as you need from your routed /64 allocation
ifconfig tb mtu 1480
route -A inet6 add ::/0 dev tb
route -A inet6 del ::/0 dev venet0
;;
stop)
echo “Stopping ipv6tb”
ifconfig tb down
route -A inet6 del ::/0 dev tb
killall tb_userspace
;;
*)
echo “Usage: /etc/init.d/ipv6tb {start|stop}”
exit 1
;;
esac

exit 0

設定開機自動啟動:

chmod +x /etc/init.d/ipv6tb

CentOS
chkconfig –add ipv6tb
chkconfig ipv6tb on

Ubuntu
update-rc.d ipv6tb defaults

然後啟動服務:
/etc/init.d/ipv6tb start
現在就設定好了,我們可以ping一下看是否能訪問ipv6網站:
ping6 ipv6.he.net

一代比一代幸福

前不久人們談最多的話題就是股市大漲,行情很好,牛氣沖天! 而近期突然大變天,不叫做大漲,也不叫做大跌,已經叫做股災,天災地難 「災」 ,損失慘重 ,很恐怖!!
其實不用怕,天不會塌!像地震一樣,災後重建的家園 ~ 更牢固更安全,更美麗,更幸福!!
因為股災 ~ 才能知道什麼叫做初生牛仔不識虎,才能讓曾經的小牛仔變成大牛仔; 因為股災 ~ 才能使一些不適合的人群遠離股市,讓他們更安全; 因為股災 ~ 才能知道,知識和技術的珍貴; 因為股災 ~ 才能再誕生,一批又一批新的高手; 因為股災 ~ 才能再誕生,一批又一批,新的億萬富翁……國內外的歷史可以證明。
瞭解股市的人會發現:大跌 ,大漲,股災,然後再大漲 。會長期週而復始 ,不斷地輪流上演,虧的虧,死的死,發財的發財,反反覆覆,不斷地輪流轉。
不管如何,最終,股市還是不斷地強大,不斷地往上漲,年代越久漲幅越大 ,國情越好股市越好,道理很簡單 。08年時差不多才1500家公司左右,現在將接近3000家公司,如果股市那麼可怕,對社會沒有任何貢獻,還能夠發展那麼快嗎 ??? !!!
人的生命,有生有死,不要因為有人離世,就說社會不行,其實,生生死死,一代接一代,不斷地更新換代,一代比一代發達,一代比一代幸福 ~ 股市也一樣!!