php基礎知識筆記

來源:互聯網
上載者:User
include和require的異同: 相同點:都可以引入其他的php檔案。 不同點:include當出現引入檔案錯誤時,只會出現警告,但程式仍然會繼續往下執行。而當require出現錯誤時則會報錯,程式終止。 一般來說都是使用include_once和require_once,而不使用include和require。引入檔案的語句要放在最前面,這點就類似C語言。   php變數是區分大小寫,但是函數名卻不區分大小寫。且不能以數字開頭。例如Abc和abc是一樣的,如果這樣的兩個函數共存在一個檔案中就會報錯。 局部變數和全域變數同名下的情況分析; 看下面的一段代碼:       $a=45;      function abc(){ //定義函數        $a+= 10; } abc(); //調用函數 echo  ‘$a=’.$a; 輸出結果是多少呢?結果還是45,為什麼呢?在函數體內的是局部變數,和外部變數$a同名,但不是同一個變數,而是兩個完全不相干的變數。函數內的變數$a隨著函數執行完畢就釋放了。輸出的仍是外部變數,如果要在函數體內使用外部變數(全域變數)那麼就要在內部的同名變數前加上global 聲明。其實在編譯器看來,聲明為global時其實是把外部同名的變數的地址賦給這個局部變數,這時內部變數和外部同名變數是同一地址,所以自然就成了同一變數了。在函數體的形參或沒有聲明為global的局部變數,那麼就是作為局部變數來使用的,範圍就是在函數體內。例如下面的一段代碼輸出結果是45,而不是55. $a=45;      function abc($a){ //定義函數        $a += 10; } abc($a); //調用函數 echo  ‘$a=’.$a;   在php中一共有三種層級的錯誤: 第一級錯誤:notice,最輕的錯誤,還可以執行 第二級錯誤:warn ,警告,還可以執行 第三級錯誤:error ,程式無法執行下去,這個錯誤是最嚴重的錯誤   unset函數解說: (PHP 3, PHP 4 ) unset -- 釋放給定的變數,當我們不想使用該變數時就可以釋放這個變數。 描述 void unset ( mixedvar [, mixed var [, ...]]) unset()銷毀指定的變數。注意在 PHP 3 中,unset() 將返回 TRUE(實際上是整型值 1),而在 PHP 4 中,unset() 不再是一個真正的函數:它現在是一個語句。這樣就沒有了傳回值,試圖擷取 unset() 的傳回值將導致解析錯誤。 如果在函數中 unset() 一個全域變數,則只是局部變數被銷毀,而在調用環境中的變數將保持調用unset() 之前一樣的值。即在函數外部該全域變數仍保持原樣。如果在函數中unset() 一個通過引用傳遞的變數,則只是局部變數被銷毀,而在調用環境中的變數將保持調用unset() 之前一樣的值。即形參是個取地址符的情況。 php有點類似C語言,不支援多態,不允許同名函數的存在,但對於形參更靈活,在調用時可以不寫或少寫幾個形參值。還可以給形參賦預設值。例如 function diyMethod($a,$b=3)就是給形參賦預設值為3 ,php函數預設傳值方式是值傳遞,要想使用引用傳遞(地址傳遞),在形參前加上地址符&就可以了。引用傳遞其實有點相當於變相地將形參所對應的調用該函數的傳入參數變成了全域變數。雖然沒有global聲明。引用傳遞會改變傳入參數的值!但要注意這裡的引用並不是C語言的指標.因為指標本身是一個變數,而php的引用其實是變數的一種別名,說白了,就是一個地址可以有多個變數名字。在 PHP 中引用意味著用不同的名字訪問同一個變數內容。當用 global $var 聲明一個變數時實際上建立了一個到全域變數的引用。   php中變數、常量定義方法 1.   定義常量define("CONSTANT", "Hello world."); 常量只能包含標量資料(boolean,integer,float 和 string)。 調用常量時,只需要簡單的用名稱取得常量的值,而不能加“$”符號,如:echoCONSTANT; 注: 常量和(全域)變數在不同的名字空間中。這意味著例如 TRUE 和 $TRUE 是不同的。 2.普通變數$a = "hello"; 3.可變變數(使用兩個貨幣符號($)) $$a = "world"; 兩個變數都被定義了: $a 的內容是“hello”並且 $hello 的內容是“world”。 因此,可以表述為: echo "$a ${$a}";或者 echo "$a $hello";它們都會輸出:hello world 要將可變變數用於數組,必須解決一個模稜兩可的問題。這就是當寫下 $$a[1] 時,解析器需要知道是想要 $a[1] 作為一個變數呢,還是想要 $$a 作為一個變數並取出該變數中索引為 [1] 的值。解決此問題的文法是,對第一種情況用 ${$a[1]},對第二種情況用 ${$a}[1]。 4.靜態變數 在函數內部static $a =0; 注意:聲明中用運算式的結果對其賦值會導致解析錯誤如static $a =3+3;(error) 靜態變數僅在局部函數域中存在(函數內部),函數執行完之後,變數值不會丟失,可用於遞迴調用 5.全域變數 在函數體內定義的global變數,函數體外可以使用,在函數體外定義的global變數不能在函數體內使用,在全域範圍內訪問變數可以用特殊的 PHP 自訂 $GLOBALS 數組: 如:$GLOBALS["b"] = $GLOBALS["a"] +$GLOBALS["b"]; 在一個函數域內用 global 語句匯入的一個真正的全域變數實際上是建立了一個到全域變數的引用 global $obj; 註:對於變數的 static 和 global 定義是以應用的方式實現的 6.給變數賦值:傳地址賦值(簡單引用): $bar = &$foo; //加&符號到將要賦值的變數前 改動新的變數將影響到原始變數,這種賦值操作更加快速 注意:只有命名變數才可以傳地址賦值 注意:如果 $bar = &$a; $bar = &$foo; 改變$bar的值只能改變變數foo的值,而不改變a的值(引用改變了) 7.PHP超全域變數$GLOBALS :包含一個引用指向每個當前指令碼的全域範圍內有效變數。該數組的鍵標為全域變數的名稱。從 PHP 3 開始存在 $GLOBALS 數組。 $_SERVER :變數由 Web 服務器設定或者直接與當前指令碼的執行環境相關聯。類似於舊數組 $HTTP_SERVER_VARS 數組(依然有效,但反對使用)。 $_GET :經由 HTTP GET 方法提交至指令碼的變數。 $_POST :經由 HTTP POST 方法提交至指令碼的變數。 $_COOKIE :經由 HTTP Cookies 方法提交至指令碼的變數。 $_FILES :經由 HTTP POST 檔案上傳而提交至指令碼的變數。 檔案上傳表單中要有 enctype="multipart/form-data" $_ENV :執行環境提交至指令碼的變數。 $_REQUEST :經由 GET,POST 和 COOKIE 機制提交至指令碼的變數,因此該數組並不值得信任。所有包含在該數組中的變數的存在與否以及變數的順序均按照 php.ini 中的variables_order 配置指示來定義。該數組沒有直接類比 PHP4.1.0 的早期版本。參見 import_request_variables()。 注意:自 PHP 4.3.0 起,$_FILES 中的檔案資訊不再存在於 $_REQUEST 中。 $_SESSION :當前註冊給指令碼會話的變數。 如何禁用phpinfo(): php.ini中 disable_functions = phpinfo() 重啟web伺服器。 php中的常量 常量只能用define(常量名,常量值); 常量只能包含標量資料(boolean,integer,float 和 string)。 可以簡單的通過指定其名字來取得常量的值,不要在常量前面加上 $ 符號。如果常量名是動態,也可以用函數 constant() 來讀取常量的值。用 get_defined_constants() 可以獲得所有已定義的常量列表。 注: 常量和(全域)變數在不同的名字空間中。這意味著例如 TRUE 和 $TRUE 是不同的。 如果使用了一個未定義的常量,PHP 假定想要的是該常量本身的名字,如同用字串調用它一樣(CONSTANT 對應"CONSTANT")。此時將發出一個 E_NOTICE 級的錯誤。參見手冊中為什麼 $w3sky[bar] 是錯誤的(除非事先用 define() 將 bar 定義為一個常量)。如果只想檢查是否定義了某常量,用 defined() 函數。 常量和變數不同: * 常量前面沒有貨幣符號($); * 常量只能用 define() 函數定義,而不能通過指派陳述式; * 常量可以不用理會變數範圍的規則而在任何地方定義和訪問; * 常量一旦定義就不能被重新定義或者取消定義; * 常量的值只能是標量。 定義常量 <?PHP define("CONSTANT", "Helloworld."); echo CONSTANT; // outputs "Helloworld." echo Constant; // outputs "Constant"and issues a notice. ?> 跳水比賽,10個評委打分,去掉一個最高分和一個最低分,然後求剩下的評委的分數總和的平均分為該運動員的得分,試輸出給最高分的評委和給最低分的評委以及該運動員的得分。 答案如下:  
<?php      $arr = array("arial"=>12,"ms"=>9.0,"ok"=>7.1,"song"=>5.0,"bold"=>3.8,"know"=>2.7,"wow"=>1.7,"serial"=>7.9,"moder"=>7.6,"froke"=>6.7);      function  getMinMax($arr,$k=true){ //$k 為 true時輸出最小值,為false 則輸出最大值,還有平均數         $num=$arr["arial"];$sum=0;$s="arial";         foreach($arr as $i => $value){              if($k){                   if($value<$num){                      $num =$value;$s=$i;                   }              }else {                  if($value>$num){                      $num =$value;$s=$i;                   }               }         }          $sum = array_sum($arr);         return array($sum,$num,$s);      }      $newArr=getMinMax($arr,true);       $sum=$newArr[0]-$newArr[1];       echo 'the lowest degree people is '.$newArr[2]."<br />";      unset($newArr);      $newArr=getMinMax($arr,false);       $sum -= $newArr[1];      echo '<br />the highest degree people is '.$newArr[2];      echo '<br />the average degree is '.$sum/(count($arr)-2);  ?>  



相關文章

Beyond APAC's No.1 Cloud

19.6% IaaS Market Share in Asia Pacific - Gartner IT Service report, 2018

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。