PHP 中變數 常量的定義與用法

來源:互聯網
上載者:User

變數用於儲存值,比如數字、文本字串或數組。

一旦設定了某個變數,我們就可以在指令碼中重複地使用它。

PHP 中的所有變數都是以 $ 符號開始的。

在 PHP 中設定變數的正確方法是:

$var_name = value;PHP 的入門者往往會忘記在變數的前面的 $ 符號。如果那樣做的話,變數將是無效的。

讓我們試著建立一個存有字串的變數,和一個存有數值的變數:


如果對於變數和常量的定義,你會注意幾個方面呢?你可能會想到:

如何定義變數,它和C# 等語言有什麼不同呢?
變數區分大小寫嗎?
PHP的變數還有其他重要的嗎?

常量和變數的定義一樣嗎?
 分別講述吧。
1.如何定義變數,它和C# 等語言有什麼不同呢?
   PHP 中的變數用一個貨幣符號後面跟變數名來表示。變數名是區分大小寫。例如:
<?php教程
 $var='Jim';
  $VAR='Kimi;
  echo "$var,$VAR";//輸出“Jim,Kimi"
 ?>你可能還關心變數的命名,其實和大多數語言一樣。
2. 變數區分大小寫嗎?
   如 1裡說的,區分大小寫。
  注意,需要說明的一點是自PHP4以來,引入了引用賦值的概念,其實和多數語言的引用類似,不過我覺得最類似的是C/C++.因為它也用到了"&"符號。例如:  1 <?php
2 $foo = 'Bob';              // 賦值'Bob'給foo
3 $bar = &$foo;              // 通過$bar引用.注意&符號
4 $bar = "My name is $bar";  // 修改 $bar
5 echo $bar;
6 echo $foo;                // $foo 也修改了.
7 ?> 和其他語言一樣,只能對有變數名的變數才可以引用。
3. PHP其他重要點
預定義變數
預定義變數在PHP是一個重要的概念。 PHP 提供了大量的預定義變數。由於許多這些變數依賴於啟動並執行伺服器的版本和設定,及其它因素,所以並沒有詳細的說明文檔。一些預定義變數在 PHP 以命令列形式運行時並不生效。

需要注意的是 在PHP 4.2.0 以及後續版本中,PHP 指令 register_globals 的預設值為 off。這是 PHP 的一個主要變化。讓 register_globals 的值為 off 將影響到預定義變數集在全域範圍內的有效性。例如,為了得到 DOCUMENT_ROOT 的值,將必須使用 $_SERVER['DOCUMENT_ROOT'] 代替 $DOCUMENT_ROOT,又如,使用 $_GET['id'] 來代替 $id 從 URL http://www.example.com/test.php?id=3 中擷取 id 值,亦或使用 $_ENV['HOME'] 來代替 $HOME 擷取環境變數 HOME 的值。

從 PHP 4.1.0 開始,PHP 提供了一套附加的預定數組,這些陣列變數包含了來自 網頁伺服器(如果可用),運行環境,和使用者輸入的資料。這些數組非常特別,它們在全域範圍內自動生效,例如,在任何範圍內自動生效。因此通常被稱為自動全域變數(autoglobals)或者超全域變數(superglobals)。(PHP 中沒有使用者自訂超全域變數的機制。)超全域變數羅列於下文中;而且,你也將注意到舊的預定義數組($HTTP_*_VARS)仍舊存在。自 PHP 5.0.0 起,長格式的 PHP 預定義變數可以通過設定 register_long_arrays 來屏蔽。
下表是PHP的超全域變數:
超全域變數
 描述
 
$GLOBALS 包含一個引用指向每個當前指令碼的全域範圍內有效變數。該數組的鍵名為全域變數的名稱。從 PHP 3 開始存在 $GLOBALS 數組。
$_SERVER 變數由 網頁伺服器設定或者直接與當前指令碼的執行環境相關聯。類似於舊數組 $HTTP_SERVER_VARS 數組(依然有效,但反對使用)。
$_GET 經由 URL 請求提交至指令碼的變數。類似於舊數組 $HTTP_GET_VARS 數組(依然有效,但反對使用)。
$_POST 經由 HTTP POST 方法提交至指令碼的變數。類似於舊數組 $HTTP_POST_VARS 數組(依然有效,但反對使用)。
$_COOKIE 經由 HTTP Cookies 方法提交至指令碼的變數。類似於舊數組 $HTTP_COOKIE_VARS 數組(依然有效,但反對使用)。
$_FILES 經由 HTTP POST 檔案上傳而提交至指令碼的變數。類似於舊數組 $HTTP_POST_FILES 數組(依然有效,但反對使用)
$_ENV 執行環境提交至指令碼的變數。類似於舊數組 $HTTP_ENV_VARS 數組(依然有效,但反對使用)。
$_REQUEST  經由 GET,POST 和 COOKIE 機制提交至指令碼的變數,因此該數組並不值得信任。所有包含在該數組中的變數的存在與否以及變數的順序均按照 php.ini 中的 variables_order 配置指示來定義。此數組在 PHP 4.1.0 之前沒有直接對應的版本。參見 import_request_variables()。
$_SESSION 當前註冊給指令碼會話的變數。類似於舊數組 $HTTP_SESSION_VARS 數組(依然有效,但反對使用)
變數的應用範圍
 每個變數都有應用範圍,那麼PHP是怎麼定義的呢?還是先看看下面代碼吧:
 1 <?php
 2  $var=0;
 3  function test($index)
 4  {
 5      $var=$var+1;
 6      echo "The ".$index." number is ".$var."<br>";
 7  }
 8  test(1);
 9  test(2)
10 ?>你認為以上的代碼會顯示什麼結果呢?
如果你認為是下面:
結果1:
The 1 number is 1
The 2 number is 2不好意思,你的結果是錯誤的。
其實正確的結果應該是:
結果2
The 1 number is 1
The 2 number is 1那麼你從其中發現了什麼呢?我們可以知道雖然第2行的代碼定義在外面,但第5行的變數和它是不一樣的。第5行的變數僅在這個函數裡使用。進一步的,如果我想調用第一行的變數而顯示結果2.代碼可以如下:
 1 <?php
 2  $var=0;
 3  function test($index)
 4  {
 5      global $var;
 6      $var=$var+1;
 7      echo "The ".$index." number is ".$var."<br>";
 8  }
 9  test(1);
10  test(2)
11 ?>這個程式碼片段和上面的程式碼片段有何區別呢?注意第5行,多了一個global關鍵字。明白了吧。
那麼還有沒有其他方法呢?答案是肯定的。
代碼如下:
 1 <?php
 2  $var=0;
 3  function test($index)
 4  {
 5     
 6      $GLOBALS["var"]=$GLOBALS["var"]+1;
 7      echo "The ".$index." number is ".$GLOBALS["var"]."<br>";
 8  }
 9  test(1);
10  test(2)
11 ?>代碼有什麼特殊的嗎?那就是用到了$GLOBALS這個超全域變數。
PHP也有靜態變數的說法。不過靜態變數一般用在函數裡,只能是局部變數了。看看下面代碼吧:
 1 <?php
 2 function Test()
 3 {
 4    static $a = 0;
 5    echo $a."<br>";
 6    $a++;
 7 }
 8 Test();
 9 Test();
10 ?> 結果為
1
2
PHP還有一個相當令人興奮的特性:可變變數
所謂可變變數,就是一個變數的變數名可以動態設定和使用。
看看下面的例子:
1 <?php
2  $a="hello";
3  $hello="world";
4  echo $a." ".$$a;
5 ?> 輸出的結果居然是hello,world.太神奇了。$$a其實就是$hello,因為$a的值是hello。
變數就這多了。下面看看常量。

常量
 PHP的常量是不是前面加const呢?讓我們看一看。
不是的。在PHP必須用下面的方式定義。
bool define ( string name, mixed value [, bool case_insensitive] )
name 為常量名,value為常量的值。case_insensitive]為大小寫敏感。預設為敏感。例如:
 1 <?php
 2 define("CONSTANT", "Hello world.");
 3 echo CONSTANT; // outputs "Hello world."
 4 echo Constant; // outputs "Constant" and issues a notice.
 5
 6 define("GREETING", "Hello you.", true);
 7 echo GREETING; // outputs "Hello you."
 8 echo Greeting; // outputs "Hello you."
 9
10 ?>

常量和變數不同:

常量前面沒有貨幣符號($);

常量只能用 define() 函數定義,而不能通過指派陳述式;

常量可以不用理會變數範圍的規則而在任何地方定義和訪問;

常量一旦定義就不能被重新定義或者取消定義;

常量的值只能是標量。

執行個體

<?php
$txt = "Hello World!";
$number = 16;
?>PHP 是一門鬆散類型的語言(Loosely Typed Language)
在 PHP 中,不需要在設定變數之前聲明該變數。

在上面的例子中,您看到了,不必向 PHP 聲明該變數的資料類型。

根據變數被設定的方式,PHP 會自動地把變數轉換為正確的資料類型。

在強型別的程式設計語言中,您必須在使用前聲明變數的類型和名稱。

在 PHP 中,變數會在使用時被自動聲明。


<?php
 //引用
 $one="test";
 two=&amp;$one;//相當於傳地址,兩個變數指向一個地址

//動態變數
$one="######";
$two="one";
$three="two";

echo $three."&lt;br&gt;";//輸出"two"
echo $$three."&lt;br&gt;";//輸出"one"
echo $$$three."&lt;br&gt;";//輸出"######"

//php中有8個類型
//4種標量:   int integer
//     bool boolean
//     float,double,real
//     string
//2種複合類型: array
//  object
//2種特殊類型:  資源類型 resource
//   空類型   null

  
//整數的聲明  
$int=10; //十進位聲明
$int=045;//八進位聲明
$int=0xff;//十六進位聲明
$float=3.14E+5;//科學計數法
$float=3.14E-5;

//一下都是false的情況
$bool=false;
$bool=0;
$bool=0.000;
$bool=null;
$bool="";
$bool=" ";
$bool="0";
$bool=array();

//字串的聲明
//1.單引號和雙引號都可以聲明字串
//2.聲明的字串沒有長度限制
//3.在雙引號的字串中,既可以直接解析變數,又可以直接使用逸出字元(可以轉義單引號本身,也可以轉義逸出字元"")
//4.在單引號的字串中,不可以直接解析變數,也不可以使用逸出字元
//5.在雙引號中不能再使用雙引號,在單引號中不能再使用單引號
//6.最好使用單引號,
$str='aaaaa';
$str="aaaa";
//定界符聲明字串,大量字串
//test是自訂的一個字串,後面不能有任何字元,空格也不可以
//也要以test這個自訂的字串結束,結束前不能有任何字元
$str=&lt;&lt;&lt;test
this write content......
test;
?>

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.