本節講解的內容
include和include_once
require和require_once
常量
引入檔案和常量結合案列
變數操作函數
輸出語句
前言
在上篇文章中,我們討論了函數的應用,但是只是在一個檔案中進行函數的調用,當我們想在不同的檔案中進行函數的調用時,上節的內容就不能夠實現,但是PHP語言提供了引入的概念。讓這個問題得到了完美的解決。
檔案的引用
如果某個檔案,比如a.php 檔案,要使用 b.php 檔案的函數,這是就需要我們把b檔案中的函數引入到a檔案中。PHP位我們提供了四種方式來達到目的, 分別是 include , include_once, require , require_once 。
雖然總共有四種方式,但是每個的引入方式不一樣。
include和include_once
從名字可以看到,這兩個引入都有include,他們兩個共同的特點就是當引入的檔案出錯的時候(因為你不能保證每個引入的檔案都是正確的)不會終止程式,而是會接著執行下去的。
<?php include 'a.php'; echo '上面引入的檔案出錯了';
結果:
include
include,一種引入檔案的形式,它有兩個特點:
當include引入的檔案出錯的時候,程式不會立即停止,它會一直執行下去。
如果檔案已經引入了,它會重複的引入,
第一個特點上面已經論述過,第二個特點,當在代碼中重複的使用include引入同一個檔案,它會重複的引入。
<?php/** * a.php檔案的內容,一個求和的函數 */function sum($a,$b){ return $a + $b;}//func.php檔案的內容<?php include 'a.php'; include 'a.php'; echo '重複的引入檔案';
結果:
在上面可以看到在此時用include它會報錯,意思是說你之前已經引入了檔案,不能再次引入。
include_once
include_once它和include很像,除了引入出錯會繼續執行外,還有一個是當檔案已經引入後,它不會再次引入。
<?php include_once 'a.php'; include_once 'a.php'; echo '引入一次檔案。';.....結果......引入一次檔案。
可以看到上面的代碼並沒有報錯。
require和require_once
require和require_once是另外一種檔案引入的方式。他們共有的特點是:
當引入的檔案出錯的時候,就會終止程式,不在向下執行。
<?php require 'b.php'; echo '這句話不會執行';
結果:
require
require,一種引入檔案的形式,它有兩個特點:
當require引入的檔案出錯的時候,程式會立即停止。
如果檔案已經引入了,它會重複的引入,
第一個特點上面已經論述過,第二個特點,當在代碼中重複的使用require引入同一個檔案,它會重複的引入。
<?php/** * a.php檔案的內容,一個求和的函數 */function sum($a,$b){ return $a + $b;}//func.php檔案的內容<?php require 'a.php'; require 'a.php'; echo '引入一次檔案。';
結果:
在上面可以看到在此時用require它會報錯,意思是說你之前已經引入了檔案,不能再次引入。
require_once
require_once它和require很像,除了引入出錯會終止程式外,還有一個是當檔案已經引入後,它不會再次引入。
<?php require_once 'a.php'; require_once 'a.php'; echo '引入一次檔案。';.....結果......引入一次檔案。
可以看到上面的代碼並沒有報錯。
系統為我們提供了四種方式,但我們怎麼知道選擇什麼樣的引入方式呢?
如果我們在引入某些檔案(比如擷取資料庫連接,開啟檔案等。建議使用_once這種方式來引入檔案),防止資源浪費。而我們在開發中經常使用require和require_once這種方式。
更推薦使用require_once這種方式。因為使用這種方式可以節省資源,同時可以避免重複定義出現的錯誤。
檔案引入機制
檔案引入的深入瞭解:在PHP中當在一個檔案中引入另外一個檔案的時候,就會去執行引入的檔案,我們在引入的檔案中可以返回一個值,也可以不返回,直到檔案結束。
<?php echo '這是引入的檔案<br>'; require_once 'b.php'; //引入b檔案 echo '當執行完引入的檔案後執行這句話<br>';b.php檔案<?php echo '這是另外一個檔案<br>'; return;......結果......這是引入的檔案這是另外一個檔案當執行完引入的檔案後執行這句話
仔細看到上面的代碼,可以看到在引入的檔案中使用return終止語句,並沒有終止主檔案的終止。它們雖然在同一個記憶體中運行,但是不影響各自的運行。
引入檔案的return問題
關於return的問題總結起來總共有三點:
常量
在我們的開發過程中,往往需要一些全域性的值,就是已經確定並且我們在以後不會修改他們,比如說網站的根目錄路徑,這時候我們已經不能夠使用變數,因為變數我們是可以修改的。在這裡就介紹PHP中另外一種常量;
常量:常量可以理解成是一種特殊的變數,一旦被定義,就不能再改變或者取消定義[即: 不能unset常量].
那我們用什麼來定義常量呢?PHP中提供了兩種方法來定義常量。
我們在定義常量的時候,這兩個都可以使用。
<?php define('PI',3.1415926); echo PI . '<br>'; const TAX = 0.012; echo TAX; ......結果...... 3.1415926 0.012
從上面的代碼可以看出常量的定義和變數使不一樣的,它們兩個是有區別的。
常量和變數的區別:
常量前面沒有貨幣符號($);
常量只能用 define() 函數定義,而不能通過指派陳述式;
常量可以不用理會變數的範圍而在任何地方定義和訪問;
常量一旦定義就不能被重新定義或者取消定義;
常量的值只能是標量。
常量的名字一般都是大寫。
處理我們自己定義的常量外,PHP系統還給我們定義了一些常量,比如我們在講整型的時候用到的PHP_INT_MAX,擷取整型的最大值。
魔術常量
PHP語言可以說有一個特色,它的文法中有魔術這個概念。在系統常量中就有魔術這個概念,PHP稱之為魔術常量,那什麼是魔術常量?
魔術常量:PHP 向它啟動並執行任何指令碼提供了大量的預定義常量。不過很多常量都是由不同的擴充庫定義的,只有在載入了這些擴充庫時才會出現,或者動態載入後,或者在編譯時間已經包括進去了。(一大堆看不懂的話-_-);
簡單的來說就是系統總共提供了八個魔術常量,它們的值隨著它們在代碼中的位置改變而改變。例如 __LINE__ 的值就依賴於它在指令碼中所處的行來決定。這些特殊的常量不區分大小寫。
PHP的魔術常量:
__LINE__ 檔案中的當前行號。
__FILE__ 檔案的完整路徑和檔案名稱。如果用在被包含檔案中,則返回被包含的檔案名稱。自 PHP 4.0.2 起, __FILE__ 總是包含一個絕對路徑(如果是符號串連,則是解析後的絕對路徑),而在此之前的版本有時會包含一個相對路徑。
__DIR__ 檔案所在的目錄。如果用在被包括檔案中,則返回被包括的檔案所在的目錄。它等價於 dirname(__FILE__)。除非是根目錄,否則目錄中名不包括末尾的斜杠。(PHP 5.3.0中新增) =
__FUNCTION__ 函數名稱(PHP 4.3.0 新加)。自 PHP 5 起本常量返回該函數被定義時的名字(區分大小寫)。在 PHP 4 中該值總是小寫字母的。
__CLASS__ 類的名稱(PHP 4.3.0 新加)。自 PHP 5 起本常量返回該類被定義時的名字(區分大小寫)。在 PHP 4 中該值總是小寫字母的。類名包括其被聲明的作用地區(例如 Foo\Bar)。注意自 PHP 5.4 起 __CLASS__ 對 trait 也起作用。當用在 trait 方法中時,__CLASS__ 是調用 trait 方法的類的名字。
__TRAIT__ Trait 的名字(PHP 5.4.0 新加)。自 PHP 5.4 起此常量返回 trait 被定義時的名字(區分大小寫)。Trait 名包括其被聲明的作用地區(例如 Foo\Bar)。
__METHOD__ 類的方法名(PHP 5.0.0 新加)。返回該方法被定義時的名字(區分大小寫)。
__NAMESPACE__ 當前命名空間的名稱(區分大小寫)。此常量是在編譯時間定義的(PHP 5.3.0 新增)。
樣本:
<?php define('PI',3.1415926); echo PI . '<br>'; const TAX = 0.012; echo TAX . '<br>'; echo __DIR__; //使用魔術常量來擷取當前檔案所在的絕對路徑。 ......結果...... 3.1415926 0.012 D:\mywamp\Apache24\htdocs\zendstudio\yunsuanfu
可以看到在使用__DIR__這個魔術常量的時候,在運行後,自動擷取檔案當前的絕對路徑。
上面的內容就是常量的使用,當然還是多練。當我們在開發中怎麼利用魔術常量和檔案引入開發呢?
引入檔案和魔術常量的最佳樣本
在開發中我們在引入檔案的時候,檔案的路徑是一個關鍵,我們有兩種選擇,一種是相對路徑,一種是絕對路徑。開發中我們往往選擇是絕對路徑,也就是檔案所在的路徑比如c:/mywamp/apache24/…,這種格式就可以理解為絕對路徑。
在這裡我們來對引入檔案和魔術常量進行一個綜合應用:
在上面使我們在開發中可能用到的檔案夾,今天我們只是簡單的進行使用,就是後面的流程
在lib檔案夾下有一些f函數檔案,裡面有我們使用的函數,我們可以定義為function.php
在lib的init.php中使用魔術常量來定義一些常量,用來表示檔案的絕對路徑,就算你把項目的路徑換了,也是可以的,同時在init.php中引入函數庫
在index.php中引入init.php檔案。
function.php:
<?php function getSum($a,$b){ //計算兩個數的和 return $a + $b; } function getSub($a,$b){ //計算兩個數的差 return $a - $b; }
init.php
<?php //定義項目的根目錄 define('WEB_ROOT_PATH',dirname(__DIR__) . '/'); //定義css的路徑 define("CSS_PATH",WEB_ROOT_PATH . 'css/'); //定義js的路徑 define('JS_PATH',WEB_ROOT_PATH . 'js/'); //定義圖片的路徑 define('IMAGE_PATH',WEB_ROOT_PATH . 'image/'); //定義存放模板的路徑 define('TEMPLATE_PATH',WEB_ROOT_PATH . 'template/'); //定義lib的路徑 define('LIB_PATH',WEB_ROOT_PATH . 'lib/'); //定義model的路徑 define('MODEL_PATH',WEB_ROOT_PATH . 'model/'); //我們使用lib的絕對路徑來引入function.php檔案 require LIB_PATH . 'function.php';
在init中我們使用魔術常量__DIR__來動態擷取檔案的所在目錄,然後通過dirname()(說明給出一個包含有指向一個檔案的全路徑的字串,本函數返回去掉檔案名稱後的目錄名),得到項目的根目錄,然後根據根目錄得到各個檔案夾的絕對路徑,在最後通過絕對路徑引入函數檔案。
index.php
<?php require_once './lib/init.php'; //這裡通過相對路徑來擷取初始設定檔案 //上面的表示已經引入了初始設定檔案,而我們在初始化中又引入了函數檔案,所以可以在這裡直接用函數檔案裡面的函數。 $sum = getSum(10,23); $sub = getSub(10,5); echo $sum; echo '<br>'; echo $sub; ......結果...... 33 5
可以看到在index.php檔案中可以正常的使用lib下的函數檔案裡面的函數。
上面的就是引入檔案和魔術常量的最基本的用法。
函數的結尾
通過上面的介紹,算是基本介紹完了函數的使用和常量的使用,學完函數,我們在來回顧回顧以前不知道的。
操作變數的函數
isset() : 檢測變數是否設定,未定義或值為null時返回假
unset() : 銷毀指定的變數。你可以在函數中傳入變數進行銷毀。
empty() : 判斷一個變數是否被認為是空的。當一個變數並不存在,或者它的值等同於 FALSE ,那麼它會被認為不存在。
is_int() : is系列有很多函數,用來判斷變數的類型,如is_int,當變數是整數型別的,返回true,否則返回false。
PHP輸出語句
echo
echo 實際上不是一個函數,是PHP語句,所以後面可以不適用括弧,當你想用echo輸出多個值得時候,可以用逗號隔開。echo並沒有傳回值。
print
print 和echo用法一樣,但是echo的速度要比print的速度快,print也不是一個函數,它是有傳回值得,總是返回1.
print_r
print_r(變數)列印關於變數的易於理解的資訊。如果變數是string,integer,float將會直接輸出其值,如果變數是一個數組,則會輸出一個格式化後的數組。
printf
printf函數返回一個格式化後的字串,它的文法是
printf(format,arg1,arg2)
var_dump
var_dump()一般我們是輸出變數的內容,類型和字串的內容,類型,長度,從而我們可以看到變數的類型是什麼。
總結
通過這兩節的講解,函數和常量的知識算是說完了,函數的調用過程和操作在以後開發中我們一定要瞭然於胸。
以上就是PHP基礎教程六之函數、常量的內容,更多相關內容請關注topic.alibabacloud.com(www.php.cn)!