#計算器的實作
超全局變數
html中巢狀php程式碼
PHP語言是開發伺服器端的語言,是對資料的處理,PHP的開發不可避免的要與前台的頁面進行交互,從而進行資料的傳遞。那我們是怎麼從前台取得資料並傳遞到後台的呢?它們利用http協定進行資訊的傳輸。可以看另外一邊部落格http://www.php.cn/。
而今天的計算器的案例,設計到資料的前後台資料的傳輸。它的大致功能是在前台的頁面填寫數據,提交到後台,後台處理完數據,然後返回到前台。
前台的一個html頁面CalculatingMachine.php
<?php $value = isset($_GET['value']) ? $_GET['value'] : ''; ?> <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>计算器的实现</title> </head> <style type="text/css"> .cm{ text-align:center; margin-top:100px; line-height:30px; } </style> <body> <p class = 'cm'> <form action="NumCount.php" method="post"> 数字1:<input type="text" name="num1"><br> 数字2:<input type="text" name="num2"><br> <select name = 'oper'> <option value = 'plus'>+</option> <option value = 'subtract'>-</option> <option value = 'multiply'>*</option> <option value = 'pided'>/</option> </select><br> <input type="submit" value="计算"> </form> <p><?php echo $value;?></p> </p> </body> </html>
前台頁面是對使用者的輸入資料透過post傳遞到後台的NumCount.php,在前台的檔案後綴名是php結尾的,這是因為當後台處理的資料傳到前台進行資料的顯示,最重要的一點,以php為後綴名的檔案可以寫html程式碼,但是以html為後綴名的檔案不可以寫php程式碼(可以在設定檔中設定);
後台的處理頁面:NumCount.php
<?php //引入运算的函数 require_once './function.php'; //从html页面得到数据 $num1 = isset($_POST['num1']) ? $_POST['num1'] : 0; $num2 = isset($_POST['num2']) ? $_POST['num2'] : 0; $oper = isset($_POST['oper']) ? $_POST['oper'] : ''; //判断是否是数字 if(!is_numeric($num1) || !is_numeric($num2)){ echo "<script>alert('请输入数字')</script>"; Header("Refresh:0;url = ./CalculatingMachine.php"); } //得到计算后的值 $value = 0; //通过switch判断是那种运算 switch($oper){ case 'plus': $value = plus($num1,$num2); break; case 'subtract': $value = subtract($num1,$num2); break; case 'multiply': $value = multiply($num1,$num2); break; case 'pided': $value = pided($num1,$num2); break; default: echo ''; } //把计算后的值传递给前台。 Header("Refresh:0;url = ./CalculatingMachine.php?value={$value}");
後台的接受頁面,因為是透過post方式進行數據的提交,所以可以透過超全域變數$_POST[]得到數據,並進行數據的驗證,當不是數字的時候,彈出對話框進行提示,並透過header跳到前台。
在後台對資料的操作函數是封裝到了一個檔案中的,透過引入檔案進行使用,
運算的函數封裝到一個檔案中:function.php
<?php //加 function plus($num1,$num2){ return $num1 + $num2; } //减 function subtract($num1,$num2){ return $num1 - $num2; } //乘 function multiply($num1,$num2){ return $num1 * $num2; } //除 function pided($num1,$num2){ return $num1 / $num2; }
前台的頁面:
後台處理資料後傳到前台:
在上面的後台的程式碼中可以看到接受資料是透過超全域變數$_POST[],進行接受資料的。那麼在PHP中什麼是超全域變量,他們又有什麼作用呢?
PHP 中的許多預定義變數都是“超全域的”,這意味著它們在一個腳本的全部作用域中都可用。在函數或方法中無需執行 global $variable; 就可以存取它們。
PHP中超全局的分類:
$GLOBALS 一個包含了全部變數的全域組合 陣列 。變數的名字就是數組的鍵。這表示其在腳本的所有作用域中都是可用的。不需要在函數或方法中用 global $variable; 來存取它。
<?php $a = 12; //整型 $str = '超全局变量'; $arr = array(1,2,3,4); //数组 var_dump($GLOBALS['a']); echo '<br>'; var_dump($GLOBALS['str']); echo '<br>'; var_dump($GLOBALS['arr']);
可以看到在上面中超全域變數$GLOBALS自動儲存了程式碼中的變數。
$_SERVER 是一個包含了頭資訊(header)、路徑(path)、以及腳本位置(script locations)等等資訊的陣列。這個數組中的項目是由 Web 伺服器所建立。不能保證每個伺服器都提供全部項目;伺服器可能會忽略一些,或提供一些沒有在這裡列舉出來的項目。
這個超全局變數和http協定也有些關係,在這個變數中,我們可以得到我們在進行資料傳輸時的一些資訊。
<?php echo $_SERVER['SERVER_ADDR']; ......结果....... 127.0.0.1
上面只是server中的其中一個值而已,得到伺服器的ip位址,別的值可以查看幫助文件。
$_GET[] 透過 URL 參數傳遞給目前腳本的變數的陣列。 在網頁的傳輸資料是,常用的有兩種方式,一個GET和一個POST,而這個超全域變數就是保存透過GET方式傳的值
$_POST[] 透過HTTP POST 方法傳遞給目前腳本的變數的陣列,當透過POST方式傳遞資料的時候,這個超全域變數就會接受
$_REQUEST[],在上面兩個超全域變數根據不同的傳遞方式,儲存不同的值,而這個變數是兩種傳遞方式的數值都會保存。
以下的超全域變數會慢慢介紹
$_FILES[] 檔案上傳變量,透過HTTP POST 方式上傳到目前腳本的項目的數組。 在後面的文件上傳時,再詳細介紹。
$_COOKIE[] 透過HTTP Cookies 方式傳遞給目前腳本的變數的陣列
$_SESSION[] 目前腳本可用SESSION 變數的數組。更多關於如何使用的信息,可以透過 Session 函數進行了解。
上面的就是PHP中的超全域變量,在開發中我們會隨時和他們打交道。
在上面计算器的前台代码中我们可以看到,当数据处理完传递到前台后,通过在p标签中写php代码来显示数据。从中我们可以看到php是怎么嵌套在html代码中
<?php code?>
在这里的开发都是php代码和html代码进行嵌套,数据和页面进行一起的开发,什么模式都没用到。
计算机的案列几乎包含了前面的所学,把所有的都化为己用。学习过得知识要学会运用。
以上就是PHP基础教程七之计算器的实现的内容,更多相关内容请关注PHP中文网(www.php.cn)!