php變量使用,php變量的使用

來源:www.cncfan.com?|?2006-1-11?|?(有1856人讀過)

就像大部份的結構化程序,有所謂的全局變量與局部變量,PHP 在這方面也是有相似之處。

在 PHP 的程序執行時,系統會在內存中保留一塊全局變量的區域。實際運用時,可以透過 $GLOBALS["變量名稱"] 將需要的變量取出。在用戶自定的函數或程序中,就可以用 $GLOBALS 數組取出需要的變量。當然別忘了 PHP 的變量是區分大小寫的,搞錯了大小寫可是叫一百年,變量也不會出來。

$GLOBALS 數組是 PHP 程序中比較特殊的變量,不必定義,系統會自動匹配相關的變量在里面。在函數中,也不必管 $GLOBALS 數組是否已經做全局定義,就可以直接使用了。

和 $GLOBALS 變量類似的還有 $php_errormsg 字符串變量。若 PHP 的配置文件 (php.ini/php3.ini) 中的 track_errors 選項打開的話,會有全局變量 $php_errormsg 可以看到錯誤的信息。

在 PHP 中,全局變量的有效范圍 (scope) 僅限于主要程序中,不會影響到函數中同名的變量,也就是全局變量與局部變量互不侵犯。若要變量能通透到函數中,就要用到 $GLOBALS 數組或是使用 global 定義。

例如,在自行開發的函數中,要取得目前執行 PHP 程序頁面的文件名,就可以用 $GLOBALS["PHP_SELF"] 取出 $PHP_SELF 的值。

// 本程序使用 $GLOBALS 數組

function myfunc() {

echo $GLOBALS["PHP_SELF"];

}

myfunc();

?>

下面是錯誤的示范,請勿模仿,上面的才是正確的示范。

// 這是錯誤的示范

function errfunc() {

echo $PHP_SELF;

}

errfunc();

?>

但是這個錯誤的示范要是改成下例就沒問題了

// 本程序使用全局定義

function myfunc() {

global $PHP_SELF;

echo $PHP_SELF;

}

myfunc();

?>

在變量前面加上 global 的名稱,就是定義該變量為全局變量。用這種方式,就不需使用 $GLOBALS 數組,也能讓變量進入自行開發的函數中。

接下來先看靜態變量的例子

// 靜態變量的例子

function myfunc() {

static $mystr;

$mystr.="哈";

echo $mystr."
\n";

}

myfunc(); // 哈

myfunc(); // 哈哈

myfunc(); // 哈哈哈

?>

函數在執行時所產生的變量,在函數結束時就消失了,有時因為程序的需要,函數在循環中,當不希望變量在每次執行完函數就消失的話,靜態變量 (static variable) 就派上用場了。上例中,使用 $mystr 變量之前,先在變量前面加上 static,即表示變量 $mystr 是靜態變量,當每次執行 myfunc() 函數時,$mystr 的值會一直增加,每執行一次就多一個哈字。若將 static 的靜態變量定義拿掉,就沒辦法累加哈字了。

// 不是靜態變量的例子 (錯誤的)

function myfunc() {

$mystr.="哈";

echo $mystr."
\n";

}

myfunc(); // 哈

myfunc(); // 哈

myfunc(); // 哈

?>

再看一個比較實際的例子,它是處理表格的顏色,讓隔行的顏色不同。

function TdBackColor() {

static $ColorStr;

if ($ColorStr=="808080") {

$ColorStr="c0c0c0";

} else {

$ColorStr="808080";

}

return($ColorStr);

}

echo "

for ($i=0; $i<10; $i++) {

$ColorStr=TdBackColor();

echo "

這是第".$i."行\n";

}

echo "

";

?>

PHP 的變量使用技巧上,最令人覺得不可思議的則是變量的變量 (variable variable)。這是充分利用 PHP 特性玩出的特殊技巧

$a = "Hello";

$$a = "world";

echo "$a, $hello"; // Hello, world

echo "$a, {$a}"; // 也是 Hello, world

?>

mdean@kcnet.com 舉出一個更絕的例子 (24-Apr-1999),他稱為變量的函數 (variable function)

function myCallbackFunction()

{

print("Hello from callback");

}

function myFunction($callback)

{

$callback();

}

// call to myFunction passing callback

// function as parameter

myFunction("myCallbackFunction");

?>

至于用戶在 FORM 中輸入的資料,要怎么處理呢?要是在 PHP 的配置文件中,track_vars 設為 On 時,直接使用變量名字就好了。如下例,next.php 在執行時,系統會自動產生兩個變量 $username 及 $sex,直接使用就好了,比起傳統的 CGI 要自己解析,PHP 實在是太神奇了。

姓名:

性別:

由于 PHP 許多語法都是 C 語言的翻版,故 PHP 在使用變量時,隨時都可以使用新的變量,只要在使用前將變量初始化就好了,不必像 Pascal 語言那樣嚴謹,所有要使用的變量都要事先定義。這當然有好處與壞處:好處是使用方便、自由;壞處就是常常因這些自由而付出相當大的代價調試。在程序碼短的 PHP 程序當然不成問題,當程序在數百數千行,甚至 include 或 require 好幾層之后,問題就浮現出來了。無論如何,保持良好的寫作習慣才是避免浪費青春的方法。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/382967.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/382967.shtml
英文地址,請注明出處:http://en.pswp.cn/news/382967.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

php syncml 協議,基于改進的SyncML協議的圖像安全同步技術研究

Image secure synchronization technology research based on improved SyncML protocolJIA Zhaolong1賈兆攏(1991-)&#xff0c;女&#xff0c;北京郵電大學碩士生&#xff0c;主要研究方向&#xff1a;網絡安全技術與應用MA Zhaofeng2馬兆豐(1974-)&#xff0c;男&#xff0c…

php 文字水印如何居中,php文字水印和php圖片水印實現代碼(二種加水印方法)

$dst_path dst.jpg;$src_path src.jpg;//創建圖片的實例$dst imagecreatefromstring(file_get_contents($dst_path));$src imagecreatefromstring(file_get_contents($src_path));//獲取水印圖片的寬高list($src_w, $src_h) getimagesize($src_path);//將水印圖片復制到目…

qq ip探測儀 php,巧用Win7資源監視器,查看QQ好友IP

用QQ時間比較長、喜歡DIY的朋友都知道&#xff0c;有一些第三方版本的QQ或者插件可以顯示好友IP地址&#xff0c;但其實在Windows7中根本用不著第三方軟件&#xff0c;在系統自帶的資源監視器中&#xff0c;就能很方便的看到QQ好友的IP地址。首先&#xff0c;打開“任務管理器”…

oracle安裝顯示注冊表,windows下oracle 11g r2 安裝過程與卸載詳細圖解

Oracle 11g安裝1.解壓下載的包&#xff0c;然后進入包內&#xff0c;點擊setup.exe開始安裝 。2.出現如下&#xff1a;一般把那個小對勾取消&#xff0c;點擊下一步進行&#xff0c;彈出下圖這個后點‘是3.下圖后&#xff0c;選擇創建和配置數據庫&#xff0c;點擊下一步。4.下…

oracle+連接格式,oracle外連接符號(+)的用法

我們都知道&#xff0c;PL/SQL中實現外連接&#xff0c;除了可以用關鍵詞OUTER JOIN外&#xff0c;還可以用Oracle的外連接符號()。對于這個外連接符號()&#xff0c;雖然看到書上說&#xff1a;使用()進行外連接時&#xff0c;where條件中&#xff0c;對于附表的字段都應帶上(…

php一行多個商品,【后端開發】php一行展示多個商品怎么實現

php一行展示多個商品怎么實現php可以用來連接數據庫查詢商品&#xff0c;并輸出展示給用戶&#xff0c;但想要實現一行展示多個商品需要用到css技術&#xff0c;具體實現如下&#xff1a;1、首先php代碼$sql "select * from user";$result $conn->query($sql);i…

linux設置時間快1小時,LINUX CentOS系統時間與現在時間相差8小時解決方法

GPS 系統中有兩種時間區分&#xff0c;一為UTC&#xff0c;另一為LT(地方時)兩者的區別為時區不同&#xff0c;UTC就是0時區的時間&#xff0c;地方時為本地時間&#xff0c;如北京為早上八點(東八區)&#xff0c;UTC時間就為零點&#xff0c;時間比北京時晚八小時&#xff0c;…

linux雙網卡端口聚合,Linux雙網卡聚合改造

Linux雙網卡聚合改造一、環境和需求Linux主機只有一塊網卡接到交換機上&#xff0c;為了消除交換機的單點&#xff0c;新增一臺交換機&#xff0c;Linux主機端新接一塊網卡到新交換機上&#xff0c;對這兩塊網卡做聚合達到目的。二、物理連線使用網線連接新增交換機和新網卡三、…

linux服務器無法識別xml文件,linux上重啟服務器提示找不到smartbi-config.xml文件

(本文檔僅供參考)問題服務器上重啟服務時&#xff0c;報了如下錯誤信息&#xff1a;(備注&#xff1a;因安全考慮&#xff0c;新版本的config登錄界面已經不展示config文件的加載路徑了。)解決方案原因一&#xff1a;這是一個關于在哪個路徑下啟動smartbi服務的問題。首先&…

linux uname命令詳解,linux中uname命令參數及用法詳解

uname 命令可用于大多數 UNIX 和類 UNIX 系統以及 Linux。功能說明&#xff1a;uname用來獲取電腦和操作系統的相關信息。語  法&#xff1a;uname [-amnrsvpio][--help][--version]補充說明&#xff1a;uname可顯示linux主機所用的操作系統的版本、硬件的名稱等基本信息。參…

android linux網絡連接,Android和Linux服務器之間的TCP連接

我正在編寫一個代碼&#xff0c;需要每秒從Android移動設備向臺式計算機(linux服務器)發送數據。由于數據經常發送&#xff0c;通過Http命中無法實現(因為會消耗時間)&#xff0c;所以Tcp通信似乎是更好的選擇&#xff0c;因為android手機的數據可以通過此套接字編程快速發送。…

linux堆上的內存可執行嗎,pwn的藝術淺談(二):linux堆相關

這是linux pwn系列的第二篇文章&#xff0c;前面一篇文章我們已經介紹了棧的基本結構和棧溢出的利用方式&#xff0c;堆漏洞的成因和利用方法與棧比起來更加復雜&#xff0c;為此&#xff0c;我們這篇文章以shellphish的how2heap為例&#xff0c;主要介紹linux堆的相關數據結構…

arm嵌入式linux應用實例開發pdf,零點起步——ARM嵌入式Linux應用開發入門一書的源代碼...

代碼片段和文件信息屬性 大小 日期 時間 名稱----------- --------- ---------- ----- ----文件 24064 2016-03-20 09:49 零點起步——ARM嵌入式Linux應用開發入門\習題答案 (1).doc文件 24064 2016-03-20 09:50 零點起步——ARM嵌入式Lin…

linux上p圖工具,linux圖片處理工具GraphicsMagick安裝使用

安裝依賴包&#xff1a;yum install libpng libjpeg freetype libpng-devel libjpeg-devel libtool-ltdl-devel libtool-ltdl官網下載GraphicsMagick包官網地址&#xff1a;http://www.graphicsmagick.org/解壓編譯安裝&#xff1a;tar xf GraphicsMagick-1.3.25.tar.gz./confi…

manjaro linux下載軟件,manjaro linux

manjaro linux下載。manjaro linux是基于Arch Linux開發的Linux操作系統&#xff01;對于裸服務器、虛擬機、IaaS 和 PaaS 方面都得到了加強&#xff0c;而且內置了強大的數據中心滿足商業的各種要求&#xff0c;是強大的混合云平臺和物理系統&#xff01;manjaro linux介紹man…

linux 安裝qt 4.6軟件,QT學習之一:Linux下安裝QT之版本qt-4.6.3

在Linux中分別安裝應用于不同平臺的QT&#xff1a;PC&#xff1b;嵌入式X86&#xff1b;ARM。這三者PC版、嵌入式X86版和ARM版的區別主要體現在&#xff1a;當configure時分別加了不同的參數&#xff0c;具體區別是&#xff1a;PC平臺&#xff1a;在linux中全安裝qt&#xff0c…

linux kill命令使用方法,Linux初學者的killall命令(8個例子)

Linux初學者的killall命令(8個例子)我們已經討論了kill命令 &#xff0c;如果你想在Linux中終止進程&#xff0c;你可以使用kill命令 。 但是&#xff0c;還有一個命令行實用程序可以用于相同的目的&#xff1a; killall 。 在本教程中&#xff0c;我們將使用一些易于理解的示例…

linux wait 信號丟失,wait函數族和SIGCHLD信號的關系

一、wait()和waitpid()函數的區別pid_t wait(int *status)進程一旦調用了wait&#xff0c;就立即阻塞自己&#xff0c;由wait自動分析是否當前進程的某個子進程已經退出&#xff0c;如果讓它找到了這樣一個已經變成僵尸的子進程&#xff0c; wait就會收集這個子進程的信息&…

linux socket接收不到16進制數據,C下通過socket收發十六進制數據解決辦法

C下通過socket收發十六進制數據系統是在LINUX下&#xff0c;下位機發送十六進制數據過來 上位機怎么解析 把數據以十六進制的形式顯示出來&#xff0c;發送十六進制又如何實現------解決方案--------------------socket不就是發16進制的么------解決方案--------------------那…

c語言 字符串 url,如何對URL字符串進行百分號編碼

在和web服務進行交互時&#xff0c;我們經常需要對URL中的特定字符和傳輸的表單數據進行百分號編碼。例如&#xff0c;’&’在百分號編碼時會變成’%26’。搞清楚 URL中哪部分的哪些字符應該進行百分號編碼了并不是件易事。最好的資料好像是RFC 3986和W3C HTML5。出于興趣和…