php全域變數和類配合使用全解析_PHP教程

來源:互聯網
上載者:User
情況1:

father.php如下定義:

$jack = 1000;

?>

children.php 如下定義:

require("father.php");

$jack=123;

echo $jack."/n";

?>

php children.php

運行輸出為123.

如果將$jack=123注釋掉,運行為1000,如果將$jack=123放到require("father.php");之前,運行結果為1000.

比較好理解:php解釋執行,解釋到哪,執行到哪。。像$jack這種屬於全域變數,如第一種情況的初始用它的時候是1000,是在require

的時候運行得到的,結果又被改成了123,所以運行結果輸出123.

情況2:

children.php代碼改為如下:

require("father.php");

function testJack(){

if(!isset($jack)){

echo '$jack is null'."/n";

}

}//testJack

testJack();

?>

php children.php

運行結果為:$jack is null.也就是說在testJack()中引用的$jack是一個局部變數。

如果使用global關鍵字,聲明這個$jack是一個全域變數,代碼改為如下:

require("father.php");

function testJack(){

global $jack;

if(!isset($jack)){

echo '$jack is null'."/n";

}else{

echo '$jack is not null'."/n";

}

}//testJack

testJack();

?>

則運行結果為$jack is not null!

情況3:

children.php代碼如下:

require("father.php");

class JackTest{

public function testJack(){

if(!isset($jack)){

echo '$jack is null'."/n";

}else{

echo '$jack is not null'."/n";

}

}//testJack

}

$jackTest = new JackTest();

$jackTest->testJack();

?>

運行結果輸出:$jack is null

這是因為class中的這個函數的$jack這是一個局部變數啊。

如果在function testJack開頭加 global $jack;那麼就輸出$jack is not null了。

比較容易理解。

情況4:

把檔案名稱當做參數動態載入,代碼如下:

$casefile = $_SERVER['argv'][1];

echo $casefile."/n";

require($casefile);

echo $jack."/n";

?>

運行php children.php father.php

結果如下:

father.php

1000

也就是說我們動態載入程式運行成功了。。

情況5:

要把動態載入和類的定義結合起來:

目錄關係式這樣的:
|- c.php
|- Bfold - b.php
|- Afold - a.class.php (裡面的函數引用了../Bfold/b.php )

也就是說 在c.php 中new 了class a.class ,而a.class.php 的一個函數中require 了Bfold 檔案夾下的b.php ,這個require(../Bfold/b.php )報錯,Warning: ……


因為你讓伺服器當前執行的是c.php 檔案,所以php 解析的時候是把路徑相對於c.php 而言的,你試試把(../Bfold/b.php )改成(Bfold/b.php )看看,應該就不會報錯了。

下面是程式例子,說明在函數內部使用require_once (A.php ).

對require_once 的理解:

假設B.php 中引用了require_once(A.php); 這條語句。。

那麼其實是相當於調用了A.php 這個匿名的匿名函式去執行。如:


C.php 在一個函數調用中 require 了 B.php------》

B.php 在普通語句中 require 了 A.php--------》

A.php

現在我們調用 php B.php ;因為 B.php 在普通語句中使用了 require 調用了 A.php ,那麼 A.php 會把它的相對 A 來說是全域變數的變數,註冊到 B.php 的環境中。因為 B.php 是根開始調用檔案,他的運行環境就是全域環境。所以A.php 檔案中的變數在 B.php 可以被正常使用。

現在我們調用 php C.php ;那麼 C 是在函數使用 require 調用了 B.php 的,然後 B 又調用了 A ,感覺在這個調用的過程中,相對 B 和 A 根運行環境是 C 的調用函數的環境 ,但 C 的調用函數如果要使用 B 和 A 中的變數,就沒有辦法了。。

如果用 global $a, 去引用,那麼由於 $a 在這種情況下不屬於全域變數,引用不到。

如果用 $a 去引用,那麼由於 $a 會被當成局部變數也引用不到的。。。

http://www.bkjia.com/PHPjc/477354.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/477354.htmlTechArticle情況1: father.php如下定義: ?php $jack = 1000; ? children.php 如下定義: ?php require(father.php); $jack=123; echo $jack./n; ? php children.php 運行輸出為123. 如果...

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.