php學習日誌(2)-php變數

来源:http://www.cnblogs.com/lijiaman/archive/2016/08/16/5774801.html
-Advertisement-
Play Games

變數是用於存儲數據的容器,與代數相似,可以給變數賦予某個確定的值(例如:$x=3)或者是賦予其它的變數(例如:$x=$y+$z)。變數的定義主要有以下規則: 變數以$開始,後面跟著變數的名稱; 變數名稱有數字、字母、下劃線構成,且第一個字元不能為數字; 變數名稱不能包含空格; 變數名稱區分大小寫。 ... ...


        變數是用於存儲數據的容器,與代數相似,可以給變數賦予某個確定的值(例如:$x=3)或者是賦予其它的變數(例如:$x=$y+$z)。變數的定義主要有以下規則:

  • 變數以$開始,後面跟著變數的名稱;
  • 變數名稱有數字、字母、下劃線構成,且第一個字元不能為數字;
  • 變數名稱不能包含空格;
  • 變數名稱區分大小寫。

    php中的變數在第一次賦予它值的時候被創建,如果變數未賦值,則在輸出時會出現錯誤,如下麵所示:

<?php
$x;
echo $x;
?>

此時瀏覽器會出現錯誤提示:

1

這個部分與Python有所區別,Python中如果變數沒有被賦值,編譯器會直接提示錯誤,我們需要註意一下。

python變數定義圖、Python變數未賦值發生錯誤               

      php是一門弱類型語言,在定義變數時,我們不需要定義變數的類型,php會根據變數的值,自動的將變數轉換成正確的數據類型。如下例所示:

<?php
$x=3;
$y=3.0;
$str="hello";
$bool=false;
$arr=array(1,2,3);
$_null=NULL;

echo gettype($x),"<br/>";     //輸出類型為integ
echo gettype($y),"<br/>";     //輸出類型為double
echo gettype($str),"<br/>";   //輸出類型為string
echo gettype($bool),"<br/>";  //輸出類型為boolean
echo gettype($arr),"<br/>";   //輸出類型為array
echo gettype($_null),"<br/>";  //輸出類型為NULL
?>

結果為:

php類型判斷

      接下來我們將對php的四種變數作用域進行討論,變數作用域定義了變數的作用範圍,php主要有以下四種變數作用域:

  • local
  • global
  • static
  • parameter(參數)

(1)局部與全局作用域

      在函數外定義的變數,擁有全局作用域,除了函數外,全局作用域可以被腳本中的任何部分訪問,要在一個函數中訪問全局變數,需要在函數中變數之前加上

global 關鍵字。

實例:

<?php
/*局部作用域與全局作用域*/
$a=5;

function test()
{
    $b=10;
    echo "測試函數內變數<br/>";
    echo "變數a的值為:$a <br/>";  //變數$a未在函數內定義,在引用時出現錯誤.
    echo "變數b的值為:$b<br/>";
}

test();

echo "測試函數外變數<br/>";
echo "變數a的值為:$a <br/>";
echo "變數b的值為:$b<br/>";    //變數$a未在函數內定義,在引用時出現警告.
?>

結果如下:

global$local

圖、局部變數與全局變數

可見,在局部函數裡面,是不能直接訪問全局變數的,如果要訪問全局變數,須在函數裡面的變數前加上global關鍵字。同樣,在函數外也不能直接訪問函數裡面的變數,函數執行結束記憶體會自動回收,故我們無法訪問到。

(2)global關鍵字

      global 關鍵字用於函數內訪問全局變數,在函數內調用函數外定義的全局變數,需要用global關鍵字。值得一提的是,這和參數的調用不同,參數的調用並不會改變該變數在記憶體中的值,而global調用是直接調用記憶體中的該值,直接對它進行操作,故會改變其值。

<?php
/*在函數內調用函數外的變數,需要用到global關鍵字*/
/*重要:這種調用會改變變數在記憶體中的值*/
$x=5;
$y=6;
/*
 * 以下這種方式是不被允許的,只有在函數內調用函數外的變數才能使用global
golbal $z=7;
*/
function myTest()
{
    global $x,$y;
    $y=$x+$y;
}

myTest();
echo "y=$y"  //輸出y=11
?>

 

*註意:超級全局變數 $GLOBALS[index]

      php將所有全局變數存儲在一個名為:$GLOBALS[index]的數組中,這個數組可以在函數內訪問,也可以用來直接更新全局變數(只能在函數內進行)。

實例:

<?php
/* GLOBALS[index]的用法講解 */
$x=5;
$y=6;

function myTest_1()
{
    $GLOBALS['y']=$GLOBALS['x']+$GLOBALS['y'];
    /*index不用寫$字元,否則報錯:$x,$y undefined
    $GLOBALS['$y']=$GLOBALS['$x']+$GLOBALS['$y'];
    */
}

function myTest_2()
{
    $GLOBALS['x']=15;
}

echo "執行myTest_1:<br/>";
myTest_1();
echo "y=$y","<br/>";
echo "x=$x","<br/>";
$GLOBALS['$x']=12;     //未將GLOBALS[index]放在函數裡面,無效
echo "x=$x","<br/>";

echo "執行myTest_2:<br/>";
myTest_2();
echo "x=$x","<br/>";
?>

結果為:

GLOBALS[index] introduce

圖、GLOBALS[index]的用法示例

(3)static關鍵字

      在一個函數執行完成之後,它的變數通常都會刪除,有時我們希望函數中的某個變數保留,這時我們可以在申明變數時使用static關鍵字:

實例:

<?php
/*靜態變數static的用法*/
function myTest()
{
    static $x=0,$y=1;
    echo $x;
    $x++;
}

myTest(); //輸出為:0
myTest(); //輸出為:1
myTest(); //輸出為:2

/*函數裡面的靜態變數不能直接被訪問*/
echo $y;  //輸出為:Notice: Undefined variable: y
?>

(4)參數作用域

      參數(parameter)的作用是將值傳遞給函數的局部變數。

實例:

<?php
/*參數(parameter)傳遞*/
function myTest($x)
{
    echo "傳遞的值為:$x.<br/>";
}

myTest(5);  //結果為:傳遞的值為5.
myTest("string") //結果為:傳遞的值為string.
?>

 

 

==php新手,有不對的地方希望各位博友提醒,萬分感謝==

Technorati 標簽: ,,,,,,


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

-Advertisement-
Play Games
更多相關文章
  • 十一、函數 Python中函數以def定義,用於實現某種功能,若是某段代碼被多處使用,不妨將它定義成一個函數,或是它用於實現特定的功能,也可以將它定義成一個函數; 一個函數func(),func為函數名,是這個函數引用(指向函數的地址);而加上括弧func()則表示執行這個函數; 在函數中定義的變數 ...
  • 我的SimpleLoader裡面的一塊 https://github.com/taoshihan1991/simpleloader 效果: ...
  • 程式說明 這是一個十分可靠的程式,這個程式的查錯能力非常強悍。程式包含了文件操作,歸併排序和字元串輸入等多種技術。 程式的功能是從外部讀取一個包括int型數據的文本文件,然後將它保存到內部臨時數組,對數組進行排序後,以文本形式輸出到指定的文件上。因為是int類型的數據,沒有很嚴重的損失精度的問題。 ...
  • 該版本的Activiti運行須知: 1.JDK 6+,Eclipse最好是Kepler以上版本。 2.試驗功能都有EXPERIMENTAL標註,被標註的部分不應該視為穩定的。 有興趣的同學可以去瞭解下Activiti Explorer項目,他涵蓋了大部分Activiti的功能,還沒有Activiti ...
  • 一、手賤行為(✿◡‿◡) 在一次開發中通過xampp方式安裝了PHP環境,需要操作資料庫時通過phpmyadmin訪問MySQL,在一次資料庫操作時想起沒有設置密碼,於是直接在mysql資料庫中的user表中將root用戶的密碼設置為“123456”,關掉頁面,重啟MySQL,再次通過phpmyad ...
  • wxPython ImportError DLL load failed: ...
  • 原文鏈接:http://blog.miguelgrinberg.com/post/easy-websockets-with-flask-and-gevent 介紹部分就先不翻了 This weekend I decided to take a short vacation from my book ...
  • 在去年的時候,偶然看到hqx演算法。 一個高質量的插值放大演算法。 與雙線性插值等插值演算法相比,這個演算法放大後對人眼保護相對比較好。 沒有雙線性插值看起來模糊,固然,也抽空把演算法簡單優化了一下。 官網及代碼: https://web.archive.org/web/20131205091805/http ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...