<?php ?>
內。 這樣apache纔會把他當作php腳本內容來解析, 纔會去調用php模塊解析,而後返回解析後的內容,由於不管是php仍是html文件擴展名,都是由apache來接受請求並解析的,都是按html代碼來處理的,只是在遇到php標籤的時候,才認爲是php腳本代碼。也就說,在寫web的時候, 老是先有 標籤, 後有 內容! 應該將內容都放在標籤中,而不是直接將 內容放在文件中。php
1.php的全局變量是 針對一個文件內部, 一個文件域而言的。
凡是在函數外部的變量都叫作 全局變量
跟c/c++的全局變量思惟不同,php認爲函數內外的變量是 兩個互不想通, 互不可見的(函數內的變量是局部變量)。即全局變量不能在 函數內使用。 確實要在函數內部使用全局變量,就要使用 global語句,或者叫global 關鍵字聲明。html
<?php $name = 'jack'; function getName(){ global $name; echo $name; } getName(); ?>
php的變量聲明?
能夠不用聲明變量,直接使用;
但跟其餘編程語言的思想相相似, 變量應該、最好是先聲明再使用;
可是要注意的是, 全局變量的聲明不能使用var, 而類定義中的 成員變量聲明時應該使用 var關鍵字!
聲明的時候, 你能夠只寫這個變量,但這樣在形式上,和實際做用上意義都不大, 因此, 應該將變量的聲明和初始化相結合,這樣既聲明瞭變量,同時又給變量初始化,賦了初值。java
unexpected T_VAR in c:\foo.php on lin2, 其中T_VAR表示 terminate variable, 表示意外的 變量結尾,實際上就是變量的聲明錯誤mysql
變量聲明錯誤是parse ERROR, 而變量undefined variable未聲明是notice! 警告linux
<?php $GLOBALS['name'] = 'JACK'; function getName(){ echo $GLOBALS['name']; } getName(); ?>
所謂的全局變量,實際上也只是 「文件域」的,只是在當前文件範圍內有效。
一個文件要使用另外一個文件中的 所謂的 「全局變量」,要使用 include...c++
在php標籤中,能夠包含其餘php文件, 在使用包含include/require/_once 的時候,實際上是作了一些處理、工做的: 先將被包含文件的php標籤先去掉/剝離,
而後只是將其中的php標籤中的內容包含、複製過來。
因此, 若是在php標籤中, 你就不能直接地再次使用,php的標籤了,也就是說, php標籤是不能嵌套的. 不然就會出錯,如: <?php <?php ....?> .... ?>
web
可是php的包含include語句,跟c/c++的又有所區別: 被包含的php文件,必定要寫 php標籤, 不然你覺得像c語言同樣,直接複製過來的.可是在php中, 若是被包含文件沒有php標籤的時候, 只是把其中的內容當作"純粹的/原生的html內容來輸出,好比: $foo=10;
只會直接在瀏覽器中 輸出$foo=10;
而並不會認爲是一個php變量$foo
, 因此後面使用 echo $foo;
的時候, 就會報錯: Notice: Undefined variable: foo
正則表達式
echo $GLOBALS; 的輸出結果: Array( .... [SCRIPT_FILENAME] => C:/wamp/www/foo.php [REMOTE_PORT] => 49275 [GATEWAY_INTERFACE] => CGI/1.1 [SERVER_PROTOCOL] => HTTP/1.1 [REQUEST_METHOD] => GET [QUERY_STRING] => [REQUEST_URI] => /foo.php [SCRIPT_NAME] => /foo.php [PHP_SELF] => /foo.php [REQUEST_TIME] => 1507607647 ) **[name] => JACK** )
foo.php文件內容: <?php $GLOBALS['age'] = 10; print_r($GLOBALS); // 只是包含 系統超全局變量 和一個 age index變量 ?>
bar.php文件內容 <?php $GLOBALS['name'] = 'JACK'; function getName(){ echo $GLOBALS['name']; } getName(); echo "<br>"; print_r($GLOBALS); // 執行完foo.php後, 再執行bar.php, 這時顯示的仍然只有系統超全局變量 和 name 索引變量, 並無 age索引... ?>
結論:sql
php腳本是解釋型,不是編譯型, 並不能像c語言那樣, 一個全局變量執行完後, 仍存在於內存中, 確實是全部文件均可以共用的全局變量 , 可是在php中, 腳本是"無狀態的"! 即: 一個腳本文件執行完畢後 , 關於這個腳本的 全部的內存變量都要被清除, 抹掉, 服務器端(php語言)不會保持 這個被請求的php腳本的執行後的任何內容. 當下一次請求其餘php腳本的時候, 全部的一切 內存變量都要 從新開始, "一切又要從頭開始" 好像之前的任何腳本都沒有執行過.數據庫
所以 不一樣腳本文件中的 $GLBOALS是變化的, 執行每一個不一樣的腳本,其值多是不一樣的! 文件與文件之間的 $GLBOALS 不是互相傳遞的.
或者說: php是不保存狀態的, 一個php腳本中的變量 跟另外一個 腳本中的 同名 變量是 沒有毛關係的. 彼此老死不相往來,除非 include...
在php中,單是一個$foo;是沒有任何意義的, 並無定義、聲明這個變量: 這個foo變量會被認爲是 null, 會被認爲是not set,同時會被
認爲是undefined. 是沒有被定義的.
變量爲null 只有兩種狀況: 一是$foo;
二是 $foo = null;
即沒有任何定義,或直接明確賦值爲null
對於defined和undefined判斷,凡是null,都是認爲 沒有定義的.
總之, 只有兩種狀況下是null
<?php $name; // 像這樣的語句實際上是沒有任何意義的,固然也不會認爲是錯誤的 if(defined($name)){echo '$name is defined';}else{ echo '$name is undefined';} if(is_null($name)){ echo "name is null"; }else{ echo "name is not null"; } echo "<br>---------------------------------<br>"; $name = null; if(defined($name)){echo '$name is defined';}else{ echo '$name is undefined';} echo "<br>"; if(is_null($name)){ echo "name is null"; }else{ echo "name is not null"; } echo "<br>---------------------------------<br>"; if(isset($age)){ echo "age is set"; }else{ echo "age is not set"; } echo "<br>---------------------------------<br>"; if(empty($name)){ echo 'name is empty';}else{echo 'name is not empty';} echo "<br>---------------------------------<br>"; $name=''; // 這裏name被賦予空字符,但已經不是null了, 也就是說,只有給變量賦值, 變量就不爲null if(is_null($name)){ echo "name is null"; }else{ echo "name is not null"; } ?>
超全局變量$_GLOBLAS也是文件域的
當一個文件結束時, 全部有關這個文件的東西都將在內存中消失.
get/post的內容是如何傳遞到 "跳轉"文檔中的?
可能有兩種可能:
一種是: 跳轉時, 原文檔自己並是立刻關閉, 要將傳遞的內容傳遞 到 目標頁面後(即在交際的時間點, 是有兩個文檔 在內存中同時並存被打開的, 即A -> B , 那麼A和B 都打開並同時生存), 原文檔才關閉.
另外一種多是: 源文檔中的傳遞變量/參數, 由apache來管理, 將它發到一個臨時內存變量區中, 隨即關閉原文檔, 而後再打開 跳轉的目標文檔, 而後把保存的 變量合併到目標文檔中.
兩種方式, 均可實現, 可是反正都是單文件做用域的
php和html: 一切都是標籤 的 標籤文檔
因爲php和html都是在服務器端執行的「腳本」不是在os下執行的C/c++程序,因此它是面向的apache,因此是標籤文檔,「一切都是標籤」:嚴格來講,文檔中只有標籤. 全部的內容都要用標籤來進行"語義化"說明. 那種隨便"甩東西在文檔中"的寫法實際上是沒有理解標籤文檔的含義的
在php中, 要計算"數字字符串"的數值時, 不要使用toint()函數 ,應該使用intval()函數.由於這個函數會作一些安全性處理.
當判斷一個變量是否爲數字,不然進行賦值時的 "通用寫法"是:
if( isset($_GET['id']) && !empty($_GET['id']) )
由於瀏覽器會把多個空格(包括製表符)當作一個 空格來顯示,因此:
在代碼中 不必定老是用 回車、換行來分割顯示, 使用空格也能夠的。
APR是什麼?
APR是apache portalbe runtime (library) 可移植運行庫, 是從apache項目中分離出來的,(之前的apache是本身在內部, 來實現對操做系統調用的實現, 如今就不是本身直接實現了, 而是apache內部組件 經過 APR (至關於中間件) 來對操做系統資源的調用了 )將不一樣操做系統平臺如win, unix, linux等平臺下的系統調用進行封裝.便於移植, 同時也減輕了apache的重量.
pcre: perl compatible regular expression: perl 兼容正則表達式. 由於apache在處理一些應用/模塊如 rewrite.so重寫模塊的時候,可能就要用到這個pcre.因此手動安裝時可能也要求安裝pcre.
<?php $a=10; // 整數, 包括十進制/ 十六進制的0x表示的, 八進制的 0123 表示的. 都算. $b=10.2e3; // 只要是用 指數形式或科學計數法表示的都是 浮點數: float/double/real $c=11.0; $d='123'; $e=11.2; var_dump($a); var_dump($b); var_dump($c); var_dump($d); var_dump($e); echo gettype($a)."<br>"; echo gettype($b)."<br>"; echo gettype($c)."<br>"; echo gettype($d)."<br>"; echo is_numeric($a)?"\t數字":"非數字\t"; echo is_numeric($b)?"\t數字":"非數字"; echo is_numeric($c)?"\t數字":"非數字\t"; echo is_numeric($d)?"\t數字":"非數字\t"; settype($a,"double"); echo "<br>".$a; echo "<br>".gettype($a)."<br>"; ?>
上述代碼顯示的結果:
int 10 float 10200 float 11 string '123' (length=3) float 11.2 integer double double string 數字 數字 數字 數字 10 double
結論:
php中的數據類型, 包括8種「正式」的, 3種「僞類」的
4種基本、標量類型: 整數,浮點數,布爾值,字符串
2種複合類型: 數組, 對象
2種特殊類型: 資源resource, NULL空
爲了便於理解函數 的參數類型, 規定了3種僞類: mixed,numeric, call_user_function
關於php中的數字?
所以,數字實際上是一種 "僞類",叫number, 包括: int, float, 數字字符串"123"等.即上面的$a/b/c/d判斷是否爲數字時,都顯示爲true!
判斷變量類型的函數有: is_numeric, is_string, is_bool, is_array, is_object, is_resource.注意的是, "123"這樣的數字字符串, 便是數字, 又是字符串的類型...
在顯示echo, 或var_dump的時候,即便是浮點數(有小數點)的,只要小數點後面是0,仍然會將小數點後面的部分去掉只顯示前面的整數部分, 好比: 10.0,12.00都只顯示爲10, 12
1.(print 和 print_r能夠顯示簡單變量,可是隻是顯示值, 不會顯示顯示 「數據類型」!) var_dump和gettype顯示的類型略有區別, 前者能夠認爲是「簡單」顯示, 後者是「完整」顯示,好比: 整數,前者顯示爲int, 後者顯示爲interger; 浮點數前者顯示爲 :float,後者顯示爲double. 字符串都顯示爲string.
並且字符串 var_dump還會顯示長度(length=x)
因此, 對於php來講, 由於是弱類型語言,因此在定義變量時, 並不須要聲明變量類型, 甚至, 同一個變量$a, 還能夠賦予不一樣類型的值, 如$a=10, 後面還能夠$a="abc". 都是能夠的! 所以,不須要用int/integer之類的關鍵字來講明。因此 對於php變量的類型「名稱、字符串」,只是咱們使用的「人」的一種稱呼, php代碼自己其實並不關心「什麼稱呼」的! 或者說 根本就沒有這種說法或問題存在。
甚至說, 某個變量是整數, 能夠說是: int, integer, 你若是高興,也能夠說他是: inti, inte, integ, integering均可以???只要你的代碼中的數據類型在運算時是正確合適的就行。
因此, 能夠說: php中的int 跟 integer沒有區別,相等的; 一樣的float,double, real都認爲是相等的,一回事!
是否作類型檢查?
php代碼堯轉換爲c代碼嗎? 爲何有 function {main}()?
10<pre class='xdebug-var-dump' dir='ltr'><small>int</small> <font color='#4e9a06'>10</font> </pre><pre class='xdebug-var-dump' dir='ltr'><small>float</small> <font color='#f57900'>10200</font> </pre><pre class='xdebug-var-dump' dir='ltr'><small>float</small> <font color='#f57900'>11</font> </pre><pre class='xdebug-var-dump' dir='ltr'><small>string</small> <font color='#cc0000'>'123'</font> <i>(length=3)</i> </pre><pre class='xdebug-var-dump' dir='ltr'><small>float</small> <font color='#f57900'>11.2</font> </pre>integer<br>double<br>double<br>string<br> 數字 數字 數字 數字<br>10<br>double<br><br /> <font size='1'> <table class='xdebug-error' dir='ltr' border='1' cellspacing='0' cellpadding='1'> <tr><th align='left' bgcolor='#f57900' colspan="5"><span style='background-color: #cc0000; color: #fce94f; font-size: x-large;'>( ! )</span> Fatal error: Unsupported operand types in C:\wamp\www\index.php on line <i>30</i></th></tr> <tr><th align='left' bgcolor='#e9b96e' colspan='5'>Call Stack</th></tr> <tr><th align='center' bgcolor='#eeeeec'>#</th><th align='left' bgcolor='#eeeeec'>Time</th><th align='left' bgcolor='#eeeeec'>Memory</th><th align='left' bgcolor='#eeeeec'>Function</th><th align='left' bgcolor='#eeeeec'>Location</th></tr> <tr><td bgcolor='#eeeeec' align='center'>1</td><td bgcolor='#eeeeec' align='center'>0.0004</td><td bgcolor='#eeeeec' align='right'>375752</td><td bgcolor='#eeeeec'>{main}( )</td><td title='C:\wamp\www\index.php' bgcolor='#eeeeec'>..\index.php<b>:</b>0</td></tr> </table> </font>
echo能夠輸出任意內容:除了html代碼外,還能夠輸出 對瀏覽器端 的 script的js腳本內容:
好比:echo "<script>alert(\"請先登陸再進行操做\"); window.open('/', '_top'); </script>";
在雙引號中, 能夠嵌套單引號,若是確實要嵌套雙引號, 可使用 \進行轉義。
isset能夠帶多個參數: if(!isset($_SESSION["uid"],$_SESSION["username"]))
?
isset: 其中的set表示設置的意思,就是判斷一個變量是否已經設置,並且是否爲null
若是一個變量被unset,確定就是isset爲false了。
注意變量被設置爲"",實際上是被設置爲 \0,可是他就不是null了.
isset能夠帶多個 參數, 此時,只有 這些全部的參數 都被設置且不爲null, 才返回true. 不然返回false. 參數是從左到右進行檢查,遇到錯誤false立刻中止檢查
平時 多讀 多記 別人的代碼, 框架代碼, 就是增加本身的內功的過程。 要把整個代碼作到「爐火純青」的地步,直到全部的代碼都 「爛熟於心」的地步。
switch($column){ case 'match_bd31': if(($mb_inball==3) && ($tg_inball==1)) $status=1;break; }
1. 簡單的寫法 echo '<span>hello</span>'; 2. 算是比較融合的寫法 <?php for($i=1; $i<3;$i++){ ?> <tr><th>some text</th></tr> <?php } ?> 3. 更徹底的更緊密的寫法 for($i=1;$i<=3;$i++) { $str .="<a href='{$this->pageUrl}={$i}' >$i</a>"."\n" ; $str .= "<a href='{$this->pageUrl}={$i}'>$i</a>"."\n"; }
修改apache httpd的監視端口/服務器端口,很是簡單,就只是改變一下 listen 80的值,好比8080,而後重啓httpd服務便可.
在windows下,主配置是在conf/下的httpd.conf, 還能夠包含一些附加配置去增長apache的一些附加features, 附加配置是放在conf/extra目錄中,而後只須要在httpd.conf主配置中包含這些附加配置便可.或直接將附加配置文件也是conf結尾的 **.conf
的 內容拷貝到主配置文件中.
添加附加配置文件, 確實是添加要去掉#號, 若是加上#, 就被屏蔽了,也就是,不包含這個附加配置
當附加配置的內容有錯誤的時候,有可能致使 主配置文件出錯->致使apache服務啓動不起來.
$sql="select name from users which location='$location'";
$conn = new mysqli($db_host, $db_user, $db_passwd, $db); ...