概念
常數可以理解為:長久不變的值,常數值被定義後,在腳本的其他任何地方都不能被改變。
一、常數組成
常數的書寫形式為define(常數名,常數)
註:
# 常數名稱可以小寫,但通常大寫
常數名稱可以不加引號,但通常加上引號。
在字串中呼叫常數的時候,必須在引號外
常數名建議只用字母和底線
#我們來定義和呼叫一個常數:
實例:
<?php //定义一个常量 define('Name','PHP.com'); //正确的调用方式 echo '我们是'.Name; echo '<br/>'; //错误的调用方式 echo '我们是Name'; ?>
接下來,我們來驗證下關於常數的幾個說法
實例:
<?php //其实可以小写,但是不好区分出来,所以习惯上大家都大写 define('age',27); echo age; //常量可以在外面不加引号 define(A,'安徽省'); echo A; //只能用于标量,用于其他会报错,例如数组 define('HF',array(1,2,3)); echo HF; ?>
註1:常數定義是未加引號,可以正常輸出,但是PHP會提醒我們定義不規範,此處Ntice
可以透過修改PHP設定檔消除,各位有興趣的話,可以自己搜索,嘗試解決。
註2:前面提到的七種資料型,還可以分為三大類
標量資料型別:布林型、整數、浮點型、字串
複合資料型別:陣列、物件
特殊資料型別:NUll、資源型、回調函數
註3:常數在定義後,預設是全域變量,可以在整個運行的腳本的任何地方使用。
二、部分內建常數
系統也為我們準備了一些內建的常數。這些常量都是規定好的。我們先熟悉幾個,還有更多的系統常數我們學習完上冊,入門後再慢慢的增加和學習。
常數名稱 | |
##__LINE__ | |
目前所在的行 | __FILE__ |
目前檔案在伺服器的路徑 | #__FUNCTIOIN__###########目前函數名稱## # |
__CLASS__ | 目前類別名稱 |
__METHOD__ |
目前成員方法名稱 # ## |
#PHP_VERSION | ##目前PHP的版本|
__TRAIT__ | #Trait 的名字,php5.4新加 |
#__DIR__ | 檔案所在的目錄 |
##__NAMESPACE__ | |
實例:
<?php //输出当前所在行 echo __LINE__; echo "<br/>"; //输出当前文件所在服务器的路径 echo __FILE__; echo "<br/>"; //输出当前PHP运行的操作系统 echo PHP_OS; ?>
註:其他幾個,大家可以嘗試輸出看看,有幾個還沒學到,後面章節學到再詳細介紹
三、利用defined()函數來做安全機制
此處知識,暫時只做了解。學習完函數後,再來看本部程式碼也可以。
defined()我們來學習這種用法,主是為了防止其他人繞過安全檢查檔案。
函數:defined(常數)
功能:向函數的括號後面傳入常數,如果常數定義了就回傳true,否則回傳false
假設情況:
我們有一套線上電子商城的軟體需要付錢,檢查是否付費是透過對軟體授權檢查來完成的,而文件version.php中就有檢查授權的功能,我們在軟體中規定,沒有授權檢查文件version.php就不能使用這個軟體。所有的程式碼都包含了version.php。而且為了防止有人盜版,我還可以把version.php的程式碼進行了加密。
我們有兩個檔案:
一個檔案中間有版本號,版本宣告和授權宣告。檔案名稱為version.php
一個檔案中有具體的業務功能。例如:使用者註冊、登陸等,檔案名稱為users.php
我們該怎麼做呢? ——也就是說不包含 version.php檔案就不讓,執行users.php之後的程式碼。
我們來實驗:
1.version.php檔案
程式碼如下:
<?php //此处是检查是否是否授权的业务部份代码xxxx define('AUTH',true); //略过模拟代码xxx行 ?>
2.ser.php
程式碼如下:
<?php //尝试将include 'version.php'这一行代码注释后再执行看看,对比结果 include 'version.php'; if(!defined('AUTH')){ echo '非法!非法!你尝试跳过授权文件'; exit; }
結果可知:version.php必須包含,不然不會顯示後面的echo '使用者註冊';
:
函數:include('傳入檔案路徑與檔案名稱')
功能:這個函數的功能是傳入指定路徑的文件,讓PHP包含進來執行
後面會詳細解釋inclde
下一節