php是一門腳本語言,同時php中的變量類型也是弱語言類型,這和javascript很是類似。筆者在這裏說一說PHP中的變量知識點。javascript
看下面的案例:php
<?php class Ref{ public $val = 100; } function change($v){ $v++; } $Ref = new Ref(); echo $Ref->val."\n";//100 change($Ref->val); echo $Ref->val."\n";//100 ?>
輸出結果爲:java
100
100
其中符號點(.)表示鏈接符。
若是把change函數改爲以下的形式數組
function change(&$v){//注意多了&符號 $v++; }
而後輸出的結果就是:app
100
101
&在上面已經演示過了,&表示引用操做符,顧名思義,被&操做符修飾的變量,表示傳遞變量的引用。
例如:函數
<?php $foo = "test"; $bar = &$foo;//以引用傳遞 echo $bar."\n";//test $bar = "hello"; echo $foo."\n";//hello unset($foo);//釋放給定的變量 if( isset($bar) ) //檢測變量是否已設置 echo "bar is set\n"; else echo "bar is not set\n"; if( isset($foo) ) //檢測變量是否已設置 echo "foo is set\n"; else echo "foo is not set\n"; ?>
php中還提供了可變變量這種語法,一個可變變量獲取了一個普通變量的值做爲這個可變變量的變量名。
例如:佈局
<?php $foo = "hello"; $$foo = "world"; $$$foo = "php"; echo $foo."\n";//hello echo $$foo."\n";//world; echo $hello."\n";//world echo $$$foo."\n";//php echo $$hello."\n";//php echo $world."\n";//php ?>
下面的案例是摘錄自文檔中,這裏作出以下幾點解釋。ui
=>用於給數組賦值時,使用指定(鍵和值)。this
->用於在訪問類的成員字段時,指定要訪問的目標字段。url
<?php class foo { var $bar = 'I am bar.'; var $arr = array(name=>'jamy.',age=>12); var $r = 'I am r.'; } $foo = new foo(); $bar = 'bar'; $baz = array('foo', 'bar', 'baz', 'quux'); echo $foo->$bar . "\n"; echo $foo->{$baz[1]} . "\n"; $start = 'b'; $end = 'ar'; echo $foo->{$start . $end} . "\n"; $arr = 'arr'; echo $foo->{$arr[1]} . "\n"; ?>
輸出爲:
I am bar.
I am bar.
I am bar.
I am r.
在PHP中根據變量的做用範圍分爲全局變量和局部變量。
局部變量:在函數之中定義的變量被稱爲局部變量。
全局變量:在函數以外聲明的變量就是全局變量,若要在函數之中使用全局變量,必需要利用global關鍵字定義目標變量,或者使用$GLOBLES來指定。
超全局變量(預約義變量):是在所有做用域中始終可用的內置變量。$GLOBLES就是一個超全局變量,它能夠在腳本任何做用域內使用。除了$GLOBLES,還有$_SERVER,$_GET,$_POST,$_FILES,$_COOKIE,$_SESSION,$_REQUEST,$_ENV。
例如:
<?php function myfunc(){ global $foo; echo $foo;//hello } $foo = "hello"; myfunc(); ?>
若是使用$GLOBALS一樣也能夠在函數內訪問全局變量。
function myfunc(){ echo $GLOBALS["foo"];//hello }
$_GET是經過 URL 參數傳遞給當前腳本的變量的數組
<?php $para = $_GET; foreach (array_keys($para) as $p){ echo("para = ".$p.",val = ".$para[$p]."\n"); } ?>
若是用..../myphpfile.php?name=jamy&age=12
網頁源碼效果圖以下:
其他的說明以下:
$_SERVER : 是一個包含了諸如頭信息(header)、路徑(path)、以及腳本位置(script locations)等等信息的數組。
$_POST:當 HTTP POST 請求的 Content-Type 是 application/x-www-form-urlencoded 或 multipart/form-data 時,會將變量以關聯數組形式傳入當前腳本。
$_GET:經過 URL 參數傳遞給當前腳本的變量的數組
$_FILES:HTTP文件上傳變量,經過 HTTP POST 方式上傳到當前腳本的項目的數組。
$_SESSION:當前腳本可用 SESSION 變量的數組
$_COOKIE:經過 HTTP Cookies 方式傳遞給當前腳本的變量的數組。
$_REQUEST:request變量,默認狀況下包含了 $_GET,$_POST 和 $_COOKIE 的數組。
$GLOBALS:包含了所有變量的全局組合數組。變量的名字就是數組的鍵。
靜態變量使用static修飾,靜態變量的訪問也不能使用->,而是要使用::格式,例如:
<?php class foo{ public static $porp = "hello"; } echo foo::$porp;//hello
這樣的語法和C++有幾分類似之處。
靜態變量只會被初始化一次,不管是佈局仍是全局的。例如:
<?php $test = function(){ static $count = 0; echo $count++."\n"; }; $test(); $test(); $test();
結果爲:
0
1
2
在上面咱們已經用過了類了,關於PHP中的類,筆者這裏還想再作一些補充。
定義類的注意點:
1.定義類使用關鍵字class,class後接類名
2.定義構造函數使用__construct,後面接參數。
3.定義訪問修飾符,好比:private,public,protected。
4.定義方法使用function關鍵字,在定義方法時若是不指定訪問修飾符,默認爲public。
<?php //user.php class User { private $name; private $age; function __construct( $name, $age ) { $this->name = $name; $this->age = $age; } function getName() { return $this->name; } function isAdult() { return $this->age >= 18?"an Adult":"Not an Adult"; } }
而後可使用以下的代碼訪問
<?php require "user.php"; $h = new User( "Calvin", 15 ); echo "Hello, " . $h->getName(). "! You are ". $h->isAdult(); ?> <br/> <?php $h = new User( "Chris", 39 ); echo "Hello, " . $h->getName(). "! You are ". $h->isAdult(); ?>
參考文章: