關(guān)于變量作用域這一點(diǎn),PHP 與絕大多數(shù)語(yǔ)言也都不同:默認(rèn)函數(shù)內(nèi)不能訪問(wèn)函數(shù)所在作用域的成員。在 JavaScript 中,我們可以在函數(shù)作用域中使用父級(jí)作用域中的成員:
var top = 'top variable'
function foo () {
var sub = 'sub variable'
console.log(top)
// => `top variable`
function bar () {
console.log(top)
// => `top variable` console.log(sub)
// => `sub variable`
}
bar()
}
foo()
而在 PHP 中:
<?php
$top = 'top variable';
function foo () {
$sub = 'sub variable';
echo $top;
// => 無(wú)法拿到
function bar () {
echo $top;
// => 無(wú)法拿到
echo $sub;
// => 無(wú)法拿到
}
bar();
}
foo();
如果需要訪問(wèn)全局變量,可以通過(guò) global 關(guān)鍵字聲明:
<?php
$top = 'top variable';
function foo () {
// 聲明在當(dāng)前作用域中獲取全局作用域中的 `$top`
global $top;
$sub = 'sub variable';
echo $top;
// => `top variable`
function bar () {
// 聲明在當(dāng)前作用域中獲取全局作用域中的 `$top` 和 `$bar`
global $top, $bar;
echo $top;
// => `top variable`
echo $sub;
// => 任然無(wú)法拿到,因?yàn)?`$sub` 不再全局范圍,而是在 `foo` 函數(shù)中定義
}
bar();
}
foo();
http://www.w3school.com.cn/php/php_superglobals.asp
PHP 中的許多預(yù)定義變量都是“超全局的”,這意味著它們?cè)谝粋€(gè)腳本的全部作用域中都可用。在函數(shù)或方法中無(wú)需執(zhí)行 global $variable; 就可以訪問(wèn)它們。
這些超全局變量是:
本文會(huì)介紹一些超全局變量,并會(huì)在稍后的博客中講解其他的超全局變量。
$GLOBALS 這種全局變量用于在 PHP 腳本中的任意位置訪問(wèn)全局變量(從函數(shù)或方法中均可)。
PHP 在名為 $GLOBALS[index] 的數(shù)組中存儲(chǔ)了所有全局變量。變量的名字就是數(shù)組的鍵。
下面的例子展示了如何使用超級(jí)全局變量 $GLOBALS:
<?php
$x = 75;
$y = 25;
function foo () {
$GLOBALS['z'] = $GLOBALS['x'] + $GLOBALS['y'];
}
foo(); echo $z; // => 100
常量跟變量一樣也是一個(gè)數(shù)據(jù)容器,但是不同的是一旦申明過(guò)后就不允許被修改。
定義常量使用的是內(nèi)置的 define
函數(shù)
第一個(gè)參數(shù)是常量的名稱,建議采用全大寫(xiě)字母命名,多個(gè)單詞下劃線分隔
第二個(gè)參數(shù)是常量中存放的數(shù)據(jù),可以是任意類型
第三個(gè)參數(shù)是常量名稱是否區(qū)不分大小寫(xiě),默認(rèn) false 區(qū)分大小寫(xiě)
<?php
// 定義常量使用的是內(nèi)置的 `define` 函數(shù)
// 第一個(gè)參數(shù)是常量的名稱,建議采用全大寫(xiě)字母命名,多個(gè)單詞下劃線分隔
// 第二個(gè)參數(shù)是常量中存放的數(shù)據(jù),可以是任意類型
// 第三個(gè)參數(shù)是常量名稱是否區(qū)不分大小寫(xiě),默認(rèn) false 區(qū)分大小寫(xiě)
define('SYSTEM_NAME', '阿里百秀');
define('SYSTEM_ENABLE', true);
<?php
// 直接通過(guò)常量的名稱訪問(wèn)常量
// 與變量不同的是不需要用 $
echo SYSTEM_NAME;
echo SYSTEM_ENABLE;
通常情況下,當(dāng)一個(gè)文件中的代碼過(guò)長(zhǎng),自然會(huì)想到要拆分到多個(gè)文件中。隨著開(kāi)發(fā)經(jīng)驗(yàn)的積累,慢慢的會(huì)發(fā)現(xiàn),
除了文件過(guò)程應(yīng)該拆分文件,更應(yīng)該做的事情是根據(jù)用途去劃分。
不管你是怎樣想的,核心問(wèn)題都是一樣:怎么將代碼拆分到多個(gè)文件中?
PHP 中引入其他 PHP 文件有四種方式:
require | require_once | include | include_once | |
---|---|---|---|---|
被載入文件如果不存在是否影響繼續(xù)運(yùn)行 | Y | Y | N | N |
多次調(diào)用是否會(huì)重復(fù)執(zhí)行被載入的文件 | Y | N | Y | n |
橫向分為兩類:require 和 include 兩種,區(qū)別在于 require 會(huì)因?yàn)檩d入文件不存在而停止當(dāng)前文件執(zhí)行,而include 不會(huì)。
縱向分為兩類:xxx 和 xxx_once,區(qū)別在于代碼中每使用一次 xxx 就執(zhí)行一次載入的文件,而 xxx_once 只會(huì)在第一次使用是執(zhí)行。
include 一般用于載入公共文件,這個(gè)文件的存在與否不能影響程序后面的運(yùn)行
require 用于載入不可缺失的文件
至于是否采用一次載入(once)這種方式取決于被載入的文件
require.php
<?php
// // 類似 CSS 的 import 導(dǎo)入文件
// require 'config.php';
// // require 可以用于在當(dāng)前腳本中載入一個(gè)別的腳本文件并且執(zhí)行他
// // require 在每一次調(diào)用時(shí)都會(huì)載入對(duì)應(yīng)的文件
// echo SYSTEM_NAME;
// require 'config.php';
// echo SYSTEM_NAME;
// require_once ==================================
// require_once 如果之前載入過(guò),不再執(zhí)行(只執(zhí)行一次)
// 由于類似于 定義常量 定義函數(shù) 這種操作不能執(zhí)行多次
// 所以 require_once 更加合適載入這種文件
require_once 'config.php';
echo SYSTEM_NAME;
require_once 'config.php';
echo SYSTEM_NAME;
config.php
<?php
/**
* 定義公共的配置信息
* 1. 便于維護(hù)
* 2. 公共使用
*/
define('SYSTEM_NAME', 'HELLO');
define('SYSTEM_VERSION', '1.0.0');
define('DB_HOST', '192.168.110.120');
aside.php
<aside>
這是側(cè)邊欄1111
</aside>
include.php
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<!-- require 特點(diǎn): 一旦被載入的文件不存在就會(huì)報(bào)一個(gè)致命錯(cuò)誤,當(dāng)前文件不再往下執(zhí)行 -->
<!-- include 特點(diǎn): 載入文件不存在不會(huì)報(bào)錯(cuò)誤(會(huì)有警告,警告不用管),當(dāng)前文件繼續(xù)執(zhí)行 -->
<?php include 'aside.php'; ?>
<main>
這是主要的區(qū)域
</main>
</body>
</html>
內(nèi)容太多,見(jiàn)鏈接:https://yangyongli.blog.csdn.net/article/details/111559480
聯(lián)系客服