自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

PHP 7:PHP變量和常量的定義

開發(fā) 前端
本章說說PHP 7變量的定義,如果對于變量和常量的定義,你會注意幾個方面呢?

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

◆ 如何定義變量,它和C# 等語言有什么不同呢?

◆ 變量區(qū)分大小寫嗎?

◆ PHP的變量還有其他重要的嗎?

◆ 常量和變量的定義一樣嗎?

分別講述吧。

1.如何定義變量,它和C# 等語言有什么不同呢?

PHP 中的變量用一個美元符號后面跟變量名來表示。變量名是區(qū)分大小寫的。例如:

  1. <?php   
  2.  $var='Jim';  
  3.   $VAR='Kimi;  
  4.   echo "$var,$VAR";//輸出“Jim,Kimi"  
  5.  ?> 

你可能還關(guān)心變量的命名,其實和大多數(shù)語言一樣。

2. 變量區(qū)分大小寫嗎?

如 1里說的,區(qū)分大小寫。

注意,需要說明的一點是自PHP4以來,引入了引用賦值的概念,其實和多數(shù)語言的引用類似,不過我覺得最類似的是C/C++.因為它也用到了"&"符號。例如:

  1. <!--  
  2.  
  3. Code highlighting produced by Actipro CodeHighlighter (freeware)  
  4. http://www.CodeHighlighter.com/  
  5.  
  6. -->1 <?php  
  7. $foo = 'Bob';              // 賦值'Bob'給foo  
  8. $bar = &$foo;              // 通過$bar引用.注意&符號  
  9. $bar = "My name is $bar";  // 修改 $bar  
  10. echo $bar;  
  11. echo $foo;                // $foo 也修改了.  
  12. 7 ?>  

和其他語言一樣,只能對有變量名的變量才可以引用。

3. PHP其他重要點

預(yù)定義變量

預(yù)定義變量在PHP是一個重要的概念。 PHP 提供了大量的預(yù)定義變量。由于許多這些變量依賴于運行的服務(wù)器的版本和設(shè)置,及其它因素,所以并沒有詳細的說明文檔。一些預(yù)定義變量在 PHP 以命令行形式運行時并不生效。

需要注意的是 在PHP 4.2.0 以及后續(xù)版本中,PHP 指令 register_globals 的默認值為 off。這是 PHP 的一個主要變化。讓 register_globals 的值為 off 將影響到預(yù)定義變量集在全局范圍內(nèi)的有效性。例如,為了得到DOCUMENT_ROOT 的值,將必須使用 $_SERVER['DOCUMENT_ROOT'] 代替 $DOCUMENT_ROOT,又如,使用 $_GET['id'] 來代替 $id 從 URL http://www.example.com/test.php?id=3 中獲取 id 值,亦或使用$_ENV['HOME'] 來代替 $HOME 獲取環(huán)境變量 HOME 的值。

從 PHP 4.1.0 開始,PHP 提供了一套附加的預(yù)定數(shù)組,這些數(shù)組變量包含了來自 web 服務(wù)器(如果可用),運行環(huán)境,和用戶輸入的數(shù)據(jù)。這些數(shù)組非常特別,它們在全局范圍內(nèi)自動生效,例如,在任何范圍內(nèi)自動生效。因此通常被稱為自動全局變量(autoglobals)或者超全局變量(superglobals)。(PHP 中沒有用戶自定義超全局變量的機制。)超全局變量羅列于下文中;而且,你也將注意到舊的預(yù)定義數(shù)組($HTTP_*_VARS)仍舊存在。自 PHP 5.0.0 起,長格式的 PHP 預(yù)定義變量可以通過設(shè)置 register_long_arrays 來屏蔽。

下表是PHP的超全局變量:

超全局變量 描述
$GLOBALS 包含一個引用指向每個當(dāng)前腳本的全局范圍內(nèi)有效的變量。該數(shù)組的鍵名為全局變量的名稱。從 PHP 3 開始存在 $GLOBALS 數(shù)組。
$_SERVER 變量由 web 服務(wù)器設(shè)定或者直接與當(dāng)前腳本的執(zhí)行環(huán)境相關(guān)聯(lián)。類似于舊數(shù)組 $HTTP_SERVER_VARS 數(shù)組(依然有效,但反對使用)。
$_GET 經(jīng)由 URL 請求提交至腳本的變量。類似于舊數(shù)組 $HTTP_GET_VARS 數(shù)組(依然有效,但反對使用)。
$_POST 經(jīng)由 HTTP POST 方法提交至腳本的變量。類似于舊數(shù)組 $HTTP_POST_VARS 數(shù)組(依然有效,但反對使用)。
$_COOKIE 經(jīng)由 HTTP Cookies 方法提交至腳本的變量。類似于舊數(shù)組 $HTTP_COOKIE_VARS 數(shù)組(依然有效,但反對使用)。
$_FILES 經(jīng)由 HTTP POST 文件上傳而提交至腳本的變量。類似于舊數(shù)組 $HTTP_POST_FILES 數(shù)組(依然有效,但反對使用)
$_ENV 執(zhí)行環(huán)境提交至腳本的變量。類似于舊數(shù)組 $HTTP_ENV_VARS 數(shù)組(依然有效,但反對使用)。
$_REQUEST 經(jīng)由 GET,POST 和 COOKIE 機制提交至腳本的變量,因此該數(shù)組并不值得信任。所有包含在該數(shù)組中的變量的存在與否以及變量的順序均按照 php.ini 中的 variables_order 配置指示來定義。此數(shù)組在 PHP 4.1.0 之前沒有直接對應(yīng)的版本。參見 import_request_variables()。
$_SESSION 當(dāng)前注冊給腳本會話的變量。類似于舊數(shù)組 $HTTP_SESSION_VARS 數(shù)組(依然有效,但反對使用)

#p#

變量的應(yīng)用范圍

每個變量都有應(yīng)用范圍,那么PHP是怎么定義的呢?還是先看看下面代碼吧:

  1. <!--  
  2.  
  3. Code highlighting produced by Actipro CodeHighlighter (freeware)  
  4. http://www.CodeHighlighter.com/  
  5.  
  6. --> 1 <?php  
  7.  2  $var=0;  
  8.  3  function test($index)  
  9.  4  {  
  10.  5      $var=$var+1;  
  11.  6      echo "The ".$index." number is ".$var."<br>";  
  12.  7  }  
  13.  8  test(1);  
  14.  9  test(2)  
  15. 10 ?> 

你認為以上的代碼會顯示什么結(jié)果呢?

如果你認為是下面:

結(jié)果1:

  1. <!--  
  2.  
  3. Code highlighting produced by Actipro CodeHighlighter (freeware)  
  4. http://www.CodeHighlighter.com/  
  5.  
  6. -->The 1 number is 1  
  7. The 2 number is 2 

不好意思,你的結(jié)果是錯誤的。

其實正確的結(jié)果應(yīng)該是:

結(jié)果2

  1. <!--  
  2.  
  3. Code highlighting produced by Actipro CodeHighlighter (freeware)  
  4. http://www.CodeHighlighter.com/  
  5.  
  6. -->The 1 number is 1  
  7. The 2 number is 1 

那么你從其中發(fā)現(xiàn)了什么呢?我們可以知道雖然第2行的代碼定義在外面,但第5行的變量和它是不一樣的。第5行的變量僅在這個函數(shù)里使用。進一步的,如果我想調(diào)用第一行的變量而顯示結(jié)果2.代碼可以如下:

  1. <!--  
  2.  
  3. Code highlighting produced by Actipro CodeHighlighter (freeware)  
  4. http://www.CodeHighlighter.com/  
  5.  
  6. -->   
  7.  <?php  
  8.   $var=0;  
  9.   function test($index)  
  10.   {  
  11.       global $var;  
  12.       $var=$var+1;  
  13.       echo "The ".$index." number is ".$var."<br>";  
  14.   }  
  15.   test(1);  
  16.   test(2)  
  17.  ?> 

這個代碼段和上面的代碼段有何區(qū)別呢?注意第5行,多了一個global關(guān)鍵字。明白了吧。

那么還有沒有其他方法呢?答案是肯定的。

代碼如下:

  1. <!--  
  2.  
  3. Code highlighting produced by Actipro CodeHighlighter (freeware)  
  4. http://www.CodeHighlighter.com/  
  5.  
  6. -->   
  7. <?php 
  8.   $var=0;  
  9.   function test($index)  
  10.   {  
  11.         
  12.       $GLOBALS["var"]=$GLOBALS["var"]+1;  
  13.       echo "The ".$index." number is ".$GLOBALS["var"]."<br>";  
  14.   }  
  15.   test(1);  
  16.   test(2)  
  17.  ?> 

代碼有什么特殊的嗎?那就是用到了$GLOBALS這個超全局變量。

PHP也有靜態(tài)變量的說法。不過靜態(tài)變量一般用在函數(shù)里,只能是局部變量了??纯聪旅娲a吧:

  1. <!--  
  2.  
  3. Code highlighting produced by Actipro CodeHighlighter (freeware)  
  4. http://www.CodeHighlighter.com/  
  5.  
  6. -->   
  7.  <?php 
  8.  function Test()  
  9.  {  
  10.     static $a = 0;  
  11.     echo $a."<br>";  
  12.     $a++;  
  13.  }  
  14.  Test();  
  15.  Test();  
  16.  ?>  

結(jié)果為

  1. <!--  
  2.  
  3. Code highlighting produced by Actipro CodeHighlighter (freeware)  
  4. http://www.CodeHighlighter.com/  
  5.  
  6. -->1  

PHP還有一個相當(dāng)令人興奮的特性:可變變量

所謂可變變量,就是一個變量的變量名可以動態(tài)的設(shè)置和使用。

看看下面的例子:

  1. <!--  
  2.  
  3. Code highlighting produced by Actipro CodeHighlighter (freeware)  
  4. http://www.CodeHighlighter.com/  
  5.  
  6. --> <?php 
  7.   $a="hello";  
  8.   $hello="world";  
  9.   echo $a." ".$$a;  
  10.  ?>  

輸出的結(jié)果居然是hello,world.太神奇了。$$a其實就是$hello,因為$a的值是hello。

變量就這多了。下面看看常量。

常量

PHP的常量是不是前面加const呢?讓我們看一看。

不是的。在PHP必須用下面的方式定義。

bool define ( string name, mixed value [, bool case_insensitive] )

name 為常量名,value為常量的值。case_insensitive]為大小寫敏感。默認為敏感。例如:

  1. <!--  
  2.  
  3. Code highlighting produced by Actipro CodeHighlighter (freeware)  
  4. http://www.CodeHighlighter.com/  
  5.  
  6. -->   
  7.  <?php  
  8.  define("CONSTANT""Hello world.");  
  9.  echo CONSTANT; // outputs "Hello world."  
  10.  echo Constant; // outputs "Constant" and issues a notice.  
  11.    
  12.  define("GREETING""Hello you.", true);  
  13.  echo GREETING; // outputs "Hello you."  
  14.  echo Greeting; // outputs "Hello you."  
  15.    
  16.  ?>  

常量和變量不同:

◆ 常量前面沒有美元符號($);

◆ 常量只能用 define() 函數(shù)定義,而不能通過賦值語句;

◆ 常量可以不用理會變量范圍的規(guī)則而在任何地方定義和訪問;

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

◆ 常量的值只能是標(biāo)量。

原文:http://blog.csdn.net/jpr1990/article/details/7072281

【編輯推薦】

  1. PHP 7展望:PHP需要改變什么
  2. 大話PHP之性能
  3. 如果PHP是用英式英語編寫的
  4. Zend Studio 9正式發(fā)布,強大的PHP IDE
  5. 手把手教你在Ubuntu上安裝Apache、MySql和PHP
責(zé)任編輯:陳貽新 來源: jpr1990的博客
相關(guān)推薦

2011-06-15 15:36:19

PHP變量常量

2009-12-07 10:37:48

PHP預(yù)定義變量數(shù)組

2009-12-08 18:11:42

PHP系統(tǒng)常量

2011-07-12 17:06:43

PHP

2019-03-08 08:55:16

PHP7PHP5web安全

2009-11-26 14:38:08

PHP函數(shù)echo()

2011-07-01 08:41:12

PHP

2009-12-04 13:14:19

PHP Global變

2011-07-07 14:28:23

PHP

2009-12-03 19:06:44

PHP關(guān)鍵字globa

2009-09-15 09:24:07

PHP和Python

2020-08-19 15:30:04

PHP網(wǎng)絡(luò)安全代碼

2009-12-09 17:14:06

PHP unset()

2009-11-18 14:11:10

PHP數(shù)組變量

2009-12-01 19:08:18

PHP外部變量

2015-10-28 13:30:15

PHP7性能揭秘

2009-12-03 18:39:02

PHP變量php_se

2017-07-19 16:58:53

PHPFastCGI 內(nèi)核探索

2015-06-25 10:06:31

PHP 7GCC PGO

2021-03-25 12:00:18

Python變量常量
點贊
收藏

51CTO技術(shù)棧公眾號