php const與define區別

来源:http://www.cnblogs.com/manongjc/archive/2016/02/25/5215893.html
-Advertisement-
Play Games

原文地址:http://www.manongjc.com/article/491.html const是用於類成員常量的定義了,定義之後不可改,而define我們定義的是全局常量了, 這樣我們在其它地方訪問但不能改變了,具體還有一些細節我們下麵給各位列出來吧 註意:define不能定義在類中,而co


原文地址:http://www.manongjc.com/article/491.html

 

const是用於類成員常量的定義了,定義之後不可改,而define我們定義的是全局常量了, 這樣我們在其它地方訪問但不能改變了,具體還有一些細節我們下麵給各位列出來吧

 

註意:define不能定義在類中,而const必須定義在類中,並且const必須通過類名::變數名來進行訪問


1、const用於類成員變數定義,一旦定義且不能改變其值。define定義全局常量,在任何地方都可以訪問。
2、define不能在類中定義而const可以。
3、const不能在條件語句中定義常量

4、const採用一個普通的常量名稱,define可以採用表達式作為名稱。
5、const只能接受靜態的標量,而define可以採用任何表達式。
6、const 總是大小寫敏感,然而define()可以通過第三個參數來定義大小寫不敏感的常量
7.使用const簡單易讀,它本身是一個語言結構,而define是一個方法,用const定義在編譯時比define快很多。

define是定義常量的,如果在類中定義常量呢?當然不能用define,而用const,如下例:

<?php
//在類外面通常這樣定義常量
define("PHP","111cn.net");
class MyClass
{
    //常量的值將始終保持不變。在定義和使用常量的時候不需要使用$符號
    const constant = 'constant value';
 
    function showConstant() {
        echo  self::constant . "<br>";
    }
}
 
echo MyClass::constant . "<br>";
 
$classname = "MyClass";
echo $classname::constant . "<br>"; // PHP 5.3.0之後
 
$class = new MyClass();
$class->showConstant();
echo $class::constant."<br>"; // PHP 5.3.0之後
//print_r(get_defined_constants());  //可以用get_defined_constants()獲取所有定義的常量
?>

 

一般是define在類外定義常量,const在類內定義常量,並且const必須通過類名::變數名來進行訪問。但是php5.3以上支持類外通過const定義常量,看如下,這樣是ok的:

<?php
    const a = "abcdef";
    echo a;
?>

關於常量的基礎知識,這裡不說了,除了以上,define和const的其它區別(摘自網路):

1.const不能再條件語句中定義常量,但是define是可以的,如下:

<?php
    if(1){
        const a = 'java';
    }
    echo a;  //必錯
?>

2.const採用一個普通的常量名稱,define可以採用表達式作為名稱

<?php
const  FOO = 'PHP'; 
for ($i = 0; $i < 32; ++$i) { 
    define('PHP_' . $i, 1 << $i); 
} 
?>

3.const只能接受靜態的標量,而define可以採用任何表達式。

<?php
const PHP = 1 << 5;    // 錯誤
define('PHP', 1 << 5); // 正確 
?>

4.const本身就是一個語言結構。而define是一個函數。所以使用const速度要快的多。

兩個共同步:兩者都是不能進行重新賦值。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 【一些前言廢話】一名web開發尤其是後端不懂LAMP環境的搭建,那就攤上事了,有些人說他一直用win下的wampServer這種傻瓜式環境搭建,用的挺好的,也有人說他用雲伺服器,搭配“一鍵搭建LAMP環境”大法也挺好用的,是的,這些在初學的時候都是可以先用上的,但是“不知其所以然”的習慣一旦養成,很
  • 作者:r1ce 原創作品轉載請註明出處 《Linux內核分析》 MOOC課程http://mooc.study.163.com/course/USTC-1000029000 關於電腦是如何工作的,這是一個容易概括卻難以詳解的問題。大家非常清楚的馮諾依曼體系,以存儲程式為最重要的特性,實際上就是CP
  • 在linux環境下輸入getevent命令遙控器按一個鍵,出現的第二行,第二個數,就是這個鍵對應的16進位,轉成10進位之後放入system\usr\keylayout\Vendor_2389_Product_00a8_Version_0200.kl文件中,然後讓這個鍵對應1,2,DPAD_UP,C
  • 添加 yum 源 Centos 6.x 的源 # rpm -Uvh http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm # rpm -Uvh http://rpms.famillecollet
  • 首先用Vs自帶的Nuget包管理器下載並安裝npoi 2.0,如果沒有NuGet程式包選項,在菜單-->工具-->擴展管理器中搜索NuGet。 然後寫一個方法讀取DataTable中的內容,並輸出到MemoryStream中 這是我的NPOIHelper 1 using System; 2 usin
  • 新年耽誤了不少時間,好久沒認真的坐下來學習了,新年也快完了,又要開始正式學習了,按著視頻教學學習,用了一天的時間,學習了下簡單的變數及其相關的輸入輸出和應用,學了幾種最基本的類型: int(整型) char(字元型) string(字元串類型)double(雙精度浮點數) decimal(貨幣值類型
  • 從老馬那摳出點東西,由於是個視頻,沒有文檔資料,遂觀後做下總結,以便以後自己遇到優化的時候可以考慮考慮這些方面,下麵我將總結的寫出來,供大家分享,可能有不對的地方希望指出 一.SOA服務的粒度的把控: 建議:服務在設計時應該是自上而下或者在服務開發之前做相應的調整,儘量的保證服務粗粒度化,這樣就能減
  • C#設置系統日期和時間的代碼分享,使用C#代碼設置系統日期和時間的程式開發步驟如下: (1)為了使用DllImportAttribute類,需要引入命名空間: using System.Runtime.InteropServices; (2)自定義類SetSystemDateTime用於設置系統時間
一周排行
    -Advertisement-
    Play Games
  • 前言 本文介紹一款使用 C# 與 WPF 開發的音頻播放器,其界面簡潔大方,操作體驗流暢。該播放器支持多種音頻格式(如 MP4、WMA、OGG、FLAC 等),並具備標記、實時歌詞顯示等功能。 另外,還支持換膚及多語言(中英文)切換。核心音頻處理採用 FFmpeg 組件,獲得了廣泛認可,目前 Git ...
  • OAuth2.0授權驗證-gitee授權碼模式 本文主要介紹如何筆者自己是如何使用gitee提供的OAuth2.0協議完成授權驗證並登錄到自己的系統,完整模式如圖 1、創建應用 打開gitee個人中心->第三方應用->創建應用 創建應用後在我的應用界面,查看已創建應用的Client ID和Clien ...
  • 解決了這個問題:《winForm下,fastReport.net 從.net framework 升級到.net5遇到的錯誤“Operation is not supported on this platform.”》 本文內容轉載自:https://www.fcnsoft.com/Home/Sho ...
  • 國內文章 WPF 從裸 Win 32 的 WM_Pointer 消息獲取觸摸點繪製筆跡 https://www.cnblogs.com/lindexi/p/18390983 本文將告訴大家如何在 WPF 裡面,接收裸 Win 32 的 WM_Pointer 消息,從消息裡面獲取觸摸點信息,使用觸摸點 ...
  • 前言 給大家推薦一個專為新零售快消行業打造了一套高效的進銷存管理系統。 系統不僅具備強大的庫存管理功能,還集成了高性能的輕量級 POS 解決方案,確保頁面載入速度極快,提供良好的用戶體驗。 項目介紹 Dorisoy.POS 是一款基於 .NET 7 和 Angular 4 開發的新零售快消進銷存管理 ...
  • ABP CLI常用的代碼分享 一、確保環境配置正確 安裝.NET CLI: ABP CLI是基於.NET Core或.NET 5/6/7等更高版本構建的,因此首先需要在你的開發環境中安裝.NET CLI。這可以通過訪問Microsoft官網下載並安裝相應版本的.NET SDK來實現。 安裝ABP ...
  • 問題 問題是這樣的:第三方的webapi,需要先調用登陸介面獲取Cookie,訪問其它介面時攜帶Cookie信息。 但使用HttpClient類調用登陸介面,返回的Headers中沒有找到Cookie信息。 分析 首先,使用Postman測試該登陸介面,正常返回Cookie信息,說明是HttpCli ...
  • 國內文章 關於.NET在中國為什麼工資低的分析 https://www.cnblogs.com/thinkingmore/p/18406244 .NET在中國開發者的薪資偏低,主要因市場需求、技術棧選擇和企業文化等因素所致。歷史上,.NET曾因微軟的閉源策略發展受限,儘管後來推出了跨平臺的.NET ...
  • 在WPF開發應用中,動畫不僅可以引起用戶的註意與興趣,而且還使軟體更加便於使用。前面幾篇文章講解了畫筆(Brush),形狀(Shape),幾何圖形(Geometry),變換(Transform)等相關內容,今天繼續講解動畫相關內容和知識點,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 什麼是委托? 委托可以說是把一個方法代入另一個方法執行,相當於指向函數的指針;事件就相當於保存委托的數組; 1.實例化委托的方式: 方式1:通過new創建實例: public delegate void ShowDelegate(); 或者 public delegate string ShowDe ...